Files
questshock/modding/hacked/editor/archives/SetArchiveDataCommand.go
T

46 lines
1.2 KiB
Go

package archives
import (
"github.com/inkyblackness/hacked/ss1/resource"
"github.com/inkyblackness/hacked/ss1/world"
)
type setArchiveDataCommand struct {
model *viewModel
selectedLevel int
oldData map[resource.ID][]byte
newData map[resource.ID][]byte
}
func (command setArchiveDataCommand) Do(modder world.Modder) error {
command.delResources(modder, command.oldData)
return command.perform(modder, command.newData)
}
func (command setArchiveDataCommand) Undo(modder world.Modder) error {
command.delResources(modder, command.newData)
return command.perform(modder, command.oldData)
}
func (command setArchiveDataCommand) delResources(modder world.Modder, data map[resource.ID][]byte) {
for id := range data {
modder.DelResource(resource.LangAny, id)
}
}
// nolint: interfacer
func (command setArchiveDataCommand) perform(modder world.Modder, data map[resource.ID][]byte) error {
for id, blockData := range data {
if len(blockData) > 0 {
modder.SetResourceBlocks(resource.LangAny, id, [][]byte{blockData})
} else {
modder.DelResource(resource.LangAny, id)
}
}
command.model.restoreFocus = true
command.model.selectedLevel = command.selectedLevel
return nil
}