77 lines
2.4 KiB
Go
77 lines
2.4 KiB
Go
package undoable
|
|
|
|
import (
|
|
"github.com/inkyblackness/hacked/ss1/content/audio"
|
|
"github.com/inkyblackness/hacked/ss1/edit"
|
|
"github.com/inkyblackness/hacked/ss1/edit/media"
|
|
"github.com/inkyblackness/hacked/ss1/edit/undoable/cmd"
|
|
"github.com/inkyblackness/hacked/ss1/resource"
|
|
"github.com/inkyblackness/hacked/ss1/world"
|
|
)
|
|
|
|
// SoundEffectService provides read/write functionality with undo capability.
|
|
type SoundEffectService struct {
|
|
wrapped edit.SoundEffectService
|
|
commander cmd.Commander
|
|
}
|
|
|
|
// NewSoundEffectService returns a new instance of a service.
|
|
func NewSoundEffectService(wrapped edit.SoundEffectService, commander cmd.Commander) SoundEffectService {
|
|
return SoundEffectService{
|
|
wrapped: wrapped,
|
|
commander: commander,
|
|
}
|
|
}
|
|
|
|
// Modified returns true if the identified sound resource is marked as modified.
|
|
func (service SoundEffectService) Modified(key resource.Key) bool {
|
|
return service.wrapped.Modified(key)
|
|
}
|
|
|
|
// RequestRemove queues to erase the sound from the resources.
|
|
func (service SoundEffectService) RequestRemove(key resource.Key, restoreFunc func()) {
|
|
service.requestCommand(
|
|
func(setter media.SoundEffectBlockSetter) {
|
|
service.wrapped.Remove(setter, key)
|
|
},
|
|
service.wrapped.RestoreFunc(key),
|
|
restoreFunc)
|
|
}
|
|
|
|
// RequestClear queues to reset the identified audio resource to a silent one-sample audio.
|
|
func (service SoundEffectService) RequestClear(key resource.Key, restoreFunc func()) {
|
|
service.requestCommand(
|
|
func(setter media.SoundEffectBlockSetter) {
|
|
service.wrapped.Clear(setter, key)
|
|
},
|
|
service.wrapped.RestoreFunc(key),
|
|
restoreFunc)
|
|
}
|
|
|
|
// Audio returns the audio component of identified sound effect.
|
|
func (service SoundEffectService) Audio(key resource.Key) audio.L8 {
|
|
return service.wrapped.Audio(key)
|
|
}
|
|
|
|
// RequestSetAudio queues the change to update the audio.
|
|
func (service SoundEffectService) RequestSetAudio(key resource.Key, data audio.L8, restoreFunc func()) {
|
|
service.requestCommand(
|
|
func(setter media.SoundEffectBlockSetter) {
|
|
service.wrapped.SetAudio(setter, key, data)
|
|
},
|
|
service.wrapped.RestoreFunc(key),
|
|
restoreFunc)
|
|
}
|
|
|
|
func (service SoundEffectService) requestCommand(
|
|
forward func(modder media.SoundEffectBlockSetter),
|
|
reverse func(modder media.SoundEffectBlockSetter),
|
|
restore func()) {
|
|
c := command{
|
|
forward: func(modder world.Modder) { forward(modder) },
|
|
reverse: func(modder world.Modder) { reverse(modder) },
|
|
restore: restore,
|
|
}
|
|
service.commander.Queue(c)
|
|
}
|