diff --git a/lang/en.json b/lang/en.json index 2660c35..8e34cd7 100644 --- a/lang/en.json +++ b/lang/en.json @@ -6,6 +6,8 @@ "SETTINGS.HypeTrackEnableN": "Enable Hype Track", "SETTINGS.HypeTrackEnableH": "Enable the ability to set a Track for an Actor", + "SETTINGS.restartHypeTracksN": "Restart Hype Track", + "SETTINGS.restartHypeTracksH": "Enable the ability to restart a Track for an Actor instead of always running from the beginning", "SETTINGS.HypeTrackPauseOthersN": "Pause Other Playlist Sounds (Hype Track)", "SETTINGS.HypeTrackPauseOthersH": "Select to pause other Sounds (eg. music) while Hype Track is playing", "SETTINGS.ItemTrackEnableN": "Enable Item Track", diff --git a/modules/config.js b/modules/config.js index 241a800..eb2ab4e 100644 --- a/modules/config.js +++ b/modules/config.js @@ -118,10 +118,11 @@ export const SETTINGS_KEYS = { get HypeTrack() { return { enable: "enableHypeTrack", - pauseOthers: "hypeTrackPauseOthers" + pauseOthers: "hypeTrackPauseOthers", + restartHypeTracks: "restartHypeTracks" } }, - + get CombatTrack() { return { enable: "enableCombatTrack", diff --git a/modules/hype-track.js b/modules/hype-track.js index 9780bdc..f333bbc 100644 --- a/modules/hype-track.js +++ b/modules/hype-track.js @@ -7,7 +7,6 @@ export default class HypeTrack { this.playlist = null; this.pausedSounds = []; } - /* -------------------------------------------- */ /* Hook Handlers */ /* -------------------------------------------- */ @@ -70,7 +69,7 @@ export default class HypeTrack { } // Stop any active hype tracks - if (this.playlist?.playing) await this.playlist.stopAll(); + if (this.playlist?.playing) await Playback.pauseAllTracks(this.playlist); // Find the hype track const flags = this._getActorHypeFlags(combat?.combatant?.actor); @@ -268,13 +267,13 @@ export default class HypeTrack { return playedTrack; } - + async _stopHypeTrack() { if (!this.playlist || !isFirstGM()) return; // Stop the playlist if it is playing if (this.playlist.playing) { - await this.playlist.stopAll(); + await Playback.pauseAllTracks(); ui.playlists.render(); } diff --git a/modules/playback.js b/modules/playback.js index cfe080d..afc5083 100644 --- a/modules/playback.js +++ b/modules/playback.js @@ -1,5 +1,9 @@ import * as MAESTRO from "./config.js"; +class PlaybackSettings{ + + static pauseDictionary = {}; // for hype tracks restarting handling +} /** * Get all the sounds in a specific playlist @@ -52,8 +56,29 @@ export async function playTrack(trackId, playlistId) { const sound = playlist.sounds?.get(trackId); if (!sound) return; + + + const restartHypeTracks = game.settings.get(MAESTRO.MODULE_NAME, MAESTRO.SETTINGS_KEYS.HypeTrack.restartHypeTracks); + var resumeTime = 0; + if(restartHypeTracks && PlaybackSettings.pauseDictionary[trackId]) resumeTime = PlaybackSettings.pauseDictionary[trackId]; + + return await sound.update({pausedTime: resumeTime, playing: true}); +} - return await sound.update({playing: true}); +export async function pauseAllTracks(playlist) { + if(!playlist) return; + + const restartHypeTracks = game.settings.get(MAESTRO.MODULE_NAME, MAESTRO.SETTINGS_KEYS.HypeTrack.restartHypeTracks); + if(restartHypeTracks && playlist.data && playlist.data.sounds) + { + var sounds = playlist.data.sounds; + sounds.forEach(sound=>{ + if(sound.playing) + { + PlaybackSettings.pauseDictionary[sound.id] = sound.sound.currentTime; + } + })} + await playlist.stopAll(); } /** diff --git a/modules/settings.js b/modules/settings.js index acc834e..2d0c4ac 100644 --- a/modules/settings.js +++ b/modules/settings.js @@ -22,7 +22,7 @@ export const registerModuleSettings = async function() { await game.maestro.hypeTrack._checkForHypeTracksPlaylist(); } }), - + game.settings.register(MAESTRO.MODULE_NAME, MAESTRO.SETTINGS_KEYS.HypeTrack.pauseOthers, { name: "MAESTRO.SETTINGS.HypeTrackPauseOthersN", hint: "MAESTRO.SETTINGS.HypeTrackPauseOthersH", @@ -31,7 +31,18 @@ export const registerModuleSettings = async function() { default: false, config: true, onChange: async s => {} - }), + }) + , + + game.settings.register(MAESTRO.MODULE_NAME, MAESTRO.SETTINGS_KEYS.HypeTrack.restartHypeTracks, { + name: "MAESTRO.SETTINGS.restartHypeTracksN", + hint: "MAESTRO.SETTINGS.restartHypeTracksH", + scope: "world", + type: Boolean, + default: false, + config: true, + onChange: async s => {} + }), /* -------------------------------------------- */ /* Item Track */