-
Notifications
You must be signed in to change notification settings - Fork 4
/
tmx2lua.go
120 lines (105 loc) · 2.81 KB
/
tmx2lua.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package main
import (
"flag"
"fmt"
"github.com/kyleconroy/go-tmx/tmx"
"log"
"os"
"path/filepath"
"strings"
"text/template"
)
func exportTileset(filename string, tmpl *template.Template) {
fmt.Printf("Processing %s\n", filename)
file, err := os.Open(filename)
if err != nil {
log.Fatal(err)
}
tileset, err := tmx.Read(file)
if err != nil {
log.Fatal(err)
}
luaFilename := strings.Replace(filepath.Base(filename), filepath.Ext(filename), ".lua", 1)
outputPath := filepath.Join(filepath.Dir(filename), luaFilename)
output, err := os.Create(outputPath)
if err != nil {
log.Fatal(err)
}
err = tmpl.Execute(output, tileset)
if err != nil {
log.Fatal(err)
}
}
func main() {
flag.Parse()
luaTable := `return {
width = {{.Width}},
height = {{.Height}},
tilewidth = {{.TileWidth}},
tileheight = {{.TileHeight}},
orientation = "{{.Orientation}}",
properties = { {{range .Properties}}
["{{.Name}}"] = "{{.Value}}",{{end}}
},
tilesets = { {{range .Tilesets}}
{
name = "{{.Name}}",
tilewidth = {{.TileWidth}},
tileheight = {{.TileHeight}},
spacing = {{.Spacing}},
margin = {{.Margin}},
image = {
source = "{{.Image.Source}}",
width = "{{.Image.Width}}",
height = "{{.Image.Height}}",
},
properties = { {{range .Properties}}
["{{.Name}}"] = "{{.Value}}",{{end}}
},
},{{end}}
},
tilelayers = { {{range .Layers }}
{
name = "{{.Name}}",
properties = { {{range .Properties}}
["{{.Name}}"] = "{{.Value}}",{{end}}
},
tiles = { {{range .DecodedTiles}}{{if .Nil}}false,{{else}}{id = {{.ID}},{{if .HorizontalFlip}} flipHorizontal = true,{{end}}{{if .VerticalFlip}} flipVertical = true,{{end}}{{if .DiagonalFlip}} flipDiagonal = true,{{end}}},{{end}}{{end}} },
},{{end}}
},
objectgroups = { {{range .ObjectGroups }}
["{{.Name}}"] = {
name = "{{.Name}}",
properties = { {{range .Properties}}
["{{.Name}}"] = "{{.Value}}",{{end}}
},
objects = { {{range .Objects}}
{
name = "{{.Name}}",
x = {{.X}},
y = {{.Y}},
width = {{.Width}},
height = {{.Height}},
type = "{{.Type}}",
{{if .PolyLines}}polyline = { {{range .PolyLines }}{{range .Decode}}
{ x = {{.X}}, y = {{.Y}} },{{end}}{{end}}
},{{end}}
{{if .Polygons}}polygon = { {{range .Polygons }}{{range .Decode}}
{ x = {{.X}}, y = {{.Y}} },{{end}}{{end}}
},{{end}}
properties = { {{range .Properties}}
["{{.Name}}"] = "{{.Value}}",{{end}}
},
},{{end}}
},
},{{end}}
}
}`
tmpl, err := template.New("lua").Parse(luaTable)
if err != nil {
log.Fatal(err)
}
for _, handle := range flag.Args() {
exportTileset(handle, tmpl)
}
}