mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-10-01 15:46:17 -04:00
Merge pull request #1086 from gucio321/anim-data-encoder
animation data: methods for edition animation data records count and animation entries
This commit is contained in:
commit
5e29ea8219
@ -61,6 +61,61 @@ func (ad *AnimationData) GetRecordsCount() int {
|
||||
return len(ad.entries)
|
||||
}
|
||||
|
||||
// PushRecord adds a new record to entry named 'name'
|
||||
func (ad *AnimationData) PushRecord(name string) {
|
||||
ad.entries[name] = append(
|
||||
ad.entries[name],
|
||||
&AnimationDataRecord{
|
||||
name: name,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// DeleteRecord teletes specified index from specified entry
|
||||
func (ad *AnimationData) DeleteRecord(name string, recordIdx int) error {
|
||||
newRecords := make([]*AnimationDataRecord, 0)
|
||||
|
||||
for n, i := range ad.entries[name] {
|
||||
if n == recordIdx {
|
||||
continue
|
||||
}
|
||||
|
||||
newRecords = append(newRecords, i)
|
||||
}
|
||||
|
||||
if len(ad.entries[name]) == len(newRecords) {
|
||||
return fmt.Errorf("index %d not found", recordIdx)
|
||||
}
|
||||
|
||||
ad.entries[name] = newRecords
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddEntry adds a new animation entry with name given
|
||||
func (ad *AnimationData) AddEntry(name string) error {
|
||||
_, found := ad.entries[name]
|
||||
if found {
|
||||
return fmt.Errorf("entry of name %s already exist", name)
|
||||
}
|
||||
|
||||
ad.entries[name] = make([]*AnimationDataRecord, 0)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteEntry deltees entry with specified name
|
||||
func (ad *AnimationData) DeleteEntry(name string) error {
|
||||
_, found := ad.entries[name]
|
||||
if !found {
|
||||
return fmt.Errorf("entry named %s doesn't exist", name)
|
||||
}
|
||||
|
||||
delete(ad.entries, name)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Load loads the data into an AnimationData struct
|
||||
//nolint:gocognit,funlen // can't reduce
|
||||
func Load(data []byte) (*AnimationData, error) {
|
||||
|
@ -155,7 +155,7 @@ func TestAnimationDataRecord_FPS(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestAnimationDataRecord_Marshal(t *testing.T) {
|
||||
func TestAnimationData_Marshal(t *testing.T) {
|
||||
file, fileErr := os.Open("testdata/AnimData.d2")
|
||||
if fileErr != nil {
|
||||
t.Error("cannot open test data file")
|
||||
@ -209,3 +209,82 @@ func TestAnimationDataRecord_Marshal(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestAnimationData_DeleteRecord(t *testing.T) {
|
||||
ad := &AnimationData{
|
||||
entries: map[string][]*AnimationDataRecord{
|
||||
"a": {
|
||||
{name: "a", speed: 1, framesPerDirection: 1},
|
||||
{name: "a", speed: 2, framesPerDirection: 2},
|
||||
{name: "a", speed: 3, framesPerDirection: 3},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
err := ad.DeleteRecord("a", 1)
|
||||
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
if len(ad.entries["a"]) != 2 {
|
||||
t.Fatal("Delete record error")
|
||||
}
|
||||
|
||||
if ad.entries["a"][1].speed != 3 {
|
||||
t.Fatal("Invalid index deleted")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAnimationData_PushRecord(t *testing.T) {
|
||||
ad := &AnimationData{
|
||||
entries: map[string][]*AnimationDataRecord{
|
||||
"a": {
|
||||
{name: "a", speed: 1, framesPerDirection: 1},
|
||||
{name: "a", speed: 2, framesPerDirection: 2},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
ad.PushRecord("a")
|
||||
|
||||
if len(ad.entries["a"]) != 3 {
|
||||
t.Fatal("No record was pushed")
|
||||
}
|
||||
|
||||
if ad.entries["a"][2].name != "a" {
|
||||
t.Fatal("unexpected name of new record was set")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAnimationData_AddEntry(t *testing.T) {
|
||||
ad := &AnimationData{
|
||||
entries: make(map[string][]*AnimationDataRecord),
|
||||
}
|
||||
|
||||
err := ad.AddEntry("a")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
if _, found := ad.entries["a"]; !found {
|
||||
t.Fatal("entry wasn't added")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAnimationData_DeleteEntry(t *testing.T) {
|
||||
ad := &AnimationData{
|
||||
entries: map[string][]*AnimationDataRecord{
|
||||
"a": {{}, {}},
|
||||
},
|
||||
}
|
||||
|
||||
err := ad.DeleteEntry("a")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
if _, found := ad.entries["a"]; found {
|
||||
t.Fatal("Entry wasn't deleted")
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user