sprite.go 1014 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package main
  2. import "fmt"
  3. type Sprite struct {
  4. node *Node
  5. Img string
  6. Animated bool
  7. FrameRate int
  8. Delay int
  9. RandomStart bool
  10. }
  11. func (s *Sprite) Parse(node *Node) error {
  12. if node.Key() != "sprite" {
  13. return fmt.Errorf("expected 'sprite' node, invalid node")
  14. }
  15. s.Img = node.Value()
  16. s.node = node
  17. if node.Len() != 0 {
  18. s.Animated = true
  19. for _, kid := range node.Children {
  20. switch kid.Key() {
  21. case "frame rate", "frame time":
  22. s.FrameRate = kid.ValueInt()
  23. case "delay":
  24. s.Delay = kid.ValueInt()
  25. case "random start frame":
  26. s.RandomStart = true
  27. }
  28. }
  29. }
  30. return nil
  31. }
  32. func (s *Sprite) Update() error {
  33. if s.node == nil {
  34. return fmt.Errorf("no node, sprite")
  35. }
  36. s.node.RmAllChildren()
  37. s.node.SetValue(s.Img)
  38. if s.Animated {
  39. n := s.node.NewChild()
  40. n.Set("frame rate", s.FrameRate)
  41. n = s.node.NewChild()
  42. n.Set("delay", s.Delay)
  43. if s.RandomStart {
  44. n := s.node.NewChild()
  45. n.Line = n.Format("random start frame")
  46. }
  47. }
  48. return nil
  49. }