-
Notifications
You must be signed in to change notification settings - Fork 5
/
parser.go
51 lines (42 loc) · 1.08 KB
/
parser.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
package ebitmx
import (
"encoding/xml"
"fmt"
)
// ParseTSX parses a TSX file and returns a Tileset
// For now, we only allow XML format
func ParseTSX(bytes []byte) (*Tileset, error) {
tsxMap := &Tileset{}
err := xml.Unmarshal(bytes, tsxMap)
if err != nil {
return nil, fmt.Errorf("only <xml> format is allowed: %v", err)
}
return tsxMap, nil
}
// ParseTMX parses a TMX file and returns a Map
// For now, we only allow XML format
func ParseTMX(bytes []byte) (*Map, error) {
tmxMap := &Map{}
err := xml.Unmarshal(bytes, tmxMap)
if err != nil {
return nil, fmt.Errorf("only <xml> format is allowed: %v", err)
}
err = checkLimitations(tmxMap)
if err != nil {
return nil, fmt.Errorf("unsupported: %v", err)
}
return tmxMap, nil
}
// TODO address limitations
func checkLimitations(tmxMap *Map) error {
if tmxMap.Orientation != "orthogonal" {
return fmt.Errorf("orientation must be orthogonal")
}
if tmxMap.RenderOrder != "right-down" {
return fmt.Errorf("renderorder must be right-down")
}
if tmxMap.Infinite {
return fmt.Errorf("infinite is not supported")
}
return nil
}