53 lines
1.5 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|