Files
questshock/modding/hacked/editor/messages/SetMessageDataCommand.go
T

53 lines
1.5 KiB
Go

package messages
import (
"github.com/inkyblackness/hacked/ss1/resource"
"github.com/inkyblackness/hacked/ss1/world"
)
type messageDataEntry struct {
oldData [][]byte
newData [][]byte
}
type setMessageDataCommand struct {
model *viewModel
key resource.Key
showVerboseText bool
textEntries map[resource.Language]messageDataEntry
audioEntries map[resource.Language]messageDataEntry
}
func (cmd setMessageDataCommand) Do(modder world.Modder) error {
return cmd.perform(modder, func(entry messageDataEntry) [][]byte { return entry.newData })
}
func (cmd setMessageDataCommand) Undo(modder world.Modder) error {
return cmd.perform(modder, func(entry messageDataEntry) [][]byte { return entry.oldData })
}
func (cmd setMessageDataCommand) perform(modder world.Modder, dataResolver func(messageDataEntry) [][]byte) error {
cmd.saveEntries(modder, cmd.key.ID.Plus(cmd.key.Index), cmd.textEntries, dataResolver)
cmd.saveEntries(modder, cmd.key.ID.Plus(cmd.key.Index).Plus(300), cmd.audioEntries, dataResolver)
cmd.model.restoreFocus = true
cmd.model.currentKey = cmd.key
cmd.model.showVerboseText = cmd.showVerboseText
return nil
}
func (cmd setMessageDataCommand) saveEntries(modder world.Modder, id resource.ID,
entries map[resource.Language]messageDataEntry,
dataResolver func(messageDataEntry) [][]byte) {
for lang, entry := range entries {
data := dataResolver(entry)
if len(data) > 0 {
modder.SetResourceBlocks(lang, id, data)
} else {
modder.DelResource(lang, id)
}
}
}