1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2025-02-02 22:57:04 -05:00
OpenDiablo2/d2core/d2hero/hero_skill.go
2021-06-13 16:15:05 +02:00

46 lines
1.1 KiB
Go

package d2hero
import (
"encoding/json"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2records"
)
// HeroSkill stores additional payload for a skill of a hero.
type HeroSkill struct {
*d2records.SkillRecord
*d2records.SkillDescriptionRecord
Shallow *shallowHeroSkill
SkillPoints int
}
// An auxiliary struct which only stores the ID of the SkillRecord, instead of the whole SkillRecord
// and SkillDescrptionRecord.
type shallowHeroSkill struct {
SkillID int `json:"skillId"`
SkillPoints int `json:"skillPoints"`
}
// MarshalJSON overrides the default logic used when the HeroSkill is serialized to a byte array.
func (hs *HeroSkill) MarshalJSON() ([]byte, error) {
// only serialize the Shallow object instead of the SkillRecord & SkillDescriptionRecord
bytes, err := json.Marshal(hs.Shallow)
if err != nil {
return nil, err
}
return bytes, nil
}
// UnmarshalJSON overrides the default logic used when the HeroSkill is deserialized from a byte array.
func (hs *HeroSkill) UnmarshalJSON(data []byte) error {
shallow := &shallowHeroSkill{}
if err := json.Unmarshal(data, shallow); err != nil {
return err
}
hs.Shallow = shallow
return nil
}