main.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package main
  2. import (
  3. "encoding/json"
  4. "encoding/xml"
  5. "fmt"
  6. "io/ioutil"
  7. "log"
  8. "os"
  9. "strconv"
  10. )
  11. type TextureAtlasXML struct {
  12. XMLName xml.Name `xml:"TextureAtlas"`
  13. Text string `xml:",chardata"`
  14. ImagePath string `xml:"imagePath,attr"`
  15. SubTexture []struct {
  16. Text string `xml:",chardata"`
  17. Name string `xml:"name,attr"`
  18. X string `xml:"x,attr"`
  19. Y string `xml:"y,attr"`
  20. Width string `xml:"width,attr"`
  21. Height string `xml:"height,attr"`
  22. } `xml:"SubTexture"`
  23. }
  24. type Frame struct {
  25. W int `json:"w"`
  26. H int `json:"h"`
  27. X int `json:"x"`
  28. Y int `json:"y"`
  29. }
  30. type Anchor struct {
  31. X float64 `json:"x"`
  32. Y float64 `json:"y"`
  33. }
  34. type Meta struct {
  35. Description string `json:"description"`
  36. }
  37. type FrameData struct {
  38. Filename string `json:"filename"`
  39. Frame Frame `json:"frame"`
  40. Anchor Anchor `json:"anchor"`
  41. }
  42. type AtlasData struct {
  43. Frames []FrameData `json:"frames"`
  44. Meta Meta `json:"meta"`
  45. }
  46. func main() {
  47. inputFile := os.Args[1]
  48. outputFile := os.Args[2]
  49. desc := ""
  50. if len(os.Args) == 2 {
  51. desc = os.Args[3]
  52. }
  53. content, err := ioutil.ReadFile(inputFile)
  54. if err != nil {
  55. log.Fatal(err)
  56. }
  57. xmlData := &TextureAtlasXML{}
  58. xml.Unmarshal(content, &xmlData)
  59. jsonData := AtlasData{
  60. Frames: []FrameData{},
  61. Meta: Meta{Description: desc},
  62. }
  63. for _, n := range xmlData.SubTexture {
  64. w, err := strconv.Atoi(n.Width)
  65. if err != nil {
  66. fmt.Println(err.Error())
  67. }
  68. h, err := strconv.Atoi(n.Height)
  69. if err != nil {
  70. fmt.Println(err.Error())
  71. }
  72. x, err := strconv.Atoi(n.X)
  73. if err != nil {
  74. fmt.Println(err.Error())
  75. }
  76. y, err := strconv.Atoi(n.Y)
  77. if err != nil {
  78. fmt.Println(err.Error())
  79. }
  80. nJsonData := FrameData{
  81. Filename: n.Name,
  82. Frame: Frame{
  83. W: w,
  84. H: h,
  85. X: x,
  86. Y: y,
  87. },
  88. Anchor: Anchor{X: 0.5, Y: 0.5},
  89. }
  90. jsonData.Frames = append(jsonData.Frames, nJsonData)
  91. }
  92. bytes, err := json.Marshal(jsonData)
  93. if err != nil {
  94. log.Fatal(err)
  95. }
  96. os.WriteFile(outputFile, bytes, 0644)
  97. }