46 lines
1.2 KiB
Go
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
|
|
}
|