nuri_game-tmx_reader 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bafedf74686bf3db56b4075b3ee9dba4474f255cc4fe3d08c46c5bd6d2dd588a
4
- data.tar.gz: 55d792e678149e79724ce7e70313be8a0be4c400d603c501db60d756bd0da5de
3
+ metadata.gz: eea7fdfe561aa348894f90fbc92913934b6cab0597346c6f975e0ff041a09b19
4
+ data.tar.gz: 5d57b7eb3b88bb6648019ad3bd0f10173a47b5289187d666b9ccecbd9d44822f
5
5
  SHA512:
6
- metadata.gz: 01ae0b8d7d024a892859268448299f17e2a597a8de4466f6057b44ac668a80c5489d3d77016f1db3d562b8cd92a939d37b9a18c271466a2523af36d1dc447cb1
7
- data.tar.gz: 10d5816b916b005a63130674539a7eb7b04c1db9e5cc2eec7db60a17e60f52bb8a53656842733a543ba56cf8ac54926de4bbadb50a3df6d29730832f660669a4
6
+ metadata.gz: 5d37a126a8629082b0fbbb4144152c34bb860eda2d69b501ca576609b62533eb2c012ce61ba4d254c738b239a8bf016bb2554e11822c4a24c2043146b2e9f968
7
+ data.tar.gz: 8d2f5f61ab2db1bef233553bc7c1da5608d110d4e16ee0eee6fce2099cf57d5a95d44ec710a0f93367bdebe28e0666db974c20aa71142da147210be82210ed47
@@ -39,6 +39,7 @@ module NuriGame
39
39
  map = REXML::Document.new(contents).root
40
40
  @tilesets = []
41
41
  @layers = {}
42
+ @invert_order = false
42
43
  validate_map(map)
43
44
  load_map_infos(map)
44
45
  load_tilesets(map)
@@ -52,7 +53,7 @@ module NuriGame
52
53
  def validate_map(map)
53
54
  raise 'Invalid TMX data, root element is not a <map>' if map.name != 'map'
54
55
  raise 'Invalid TMX orientation, expect orthogonal' if xml_value(map, 'orientation') != 'orthogonal'
55
- raise 'Invalid TMX renderorder, expect left-up' if xml_value(map, 'renderorder') != 'left-up'
56
+ @render_order = xml_value(map, 'renderorder') || 'right-down'
56
57
  raise 'Invalid TMX map format, should not be infinite' if xml_value(map, 'infinite').to_i != 0
57
58
  end
58
59
 
@@ -78,11 +79,20 @@ module NuriGame
78
79
  if layer.name == 'group'
79
80
  load_layer_group(layer, xml_value(layer, 'name'))
80
81
  elsif layer.name == 'layer'
81
- @layers[xml_value(layer, 'name')] = load_layer(layer)
82
+ @layers[get_layer_name(xml_value(layer, 'name'))] = load_layer(layer)
82
83
  end
83
84
  end
84
85
  end
85
86
 
87
+ # Adjust the layer name to prevent duplicates
88
+ # @param name [String]
89
+ # @return [String]
90
+ def get_layer_name(name)
91
+ name = name.dup
92
+ name.prepend('/') while @layers[name]
93
+ return name
94
+ end
95
+
86
96
  # Load the layer from a group
87
97
  # @param group [REXML::Element]
88
98
  # @param groupname [String]
@@ -92,7 +102,7 @@ module NuriGame
92
102
  load_layer_group(layer, File.join(groupname, xml_value(layer, 'name')))
93
103
  elsif layer.name == 'layer'
94
104
  name = File.join(groupname, xml_value(layer, 'name'))
95
- @layers[name] = load_layer(layer)
105
+ @layers[get_layer_name(name)] = load_layer(layer)
96
106
  end
97
107
  end
98
108
  end
@@ -101,10 +111,28 @@ module NuriGame
101
111
  # @param layer [REXML::Element]
102
112
  def load_layer(layer)
103
113
  data = get_layer_data(layer)
114
+ data = adjust_layer_data(layer, data)
104
115
  # Perform stuff if there's offset & co (but shouldn't happen since we don't allow infinite maps)
105
116
  return data
106
117
  end
107
118
 
119
+ # Adjust the layer data
120
+ # @param layer [REXML::Element]
121
+ # @param data [Array]
122
+ # @return [Array]
123
+ def adjust_layer_data(layer, data)
124
+ width = xml_value(layer, 'width').to_i
125
+ height = xml_value(layer, 'height').to_i
126
+ if @width != width || @height != height
127
+ rows = Array.new(@height) do |index|
128
+ next(Array.new(@width, 0)) unless (row = data[index * width, @width])
129
+ row.concat(Array.new(@width - row.size, 0)) if row.size < @width
130
+ next(row)
131
+ end
132
+ return [].concat(*rows)
133
+ end
134
+ return data
135
+ end
108
136
  # Get the layer data
109
137
  # @source https://github.com/shawn42/tmx/blob/master/lib/tmx/parsers/tmx-rexml.rb
110
138
  # @param layer [REXML::Element]
@@ -128,7 +156,7 @@ module NuriGame
128
156
  return layer_data.split(',').collect(&:to_i)
129
157
  end
130
158
  end
131
- REXML::XPath.match(layer, "data/tile").map { |tile| tile.attributes["gid"].to_i }
159
+ REXML::XPath.match(layer, 'data/tile').map { |tile| tile.attributes['gid'].to_i }
132
160
  end
133
161
 
134
162
  # Decompress using Zlib
@@ -1,5 +1,5 @@
1
1
  module NuriGame
2
2
  class TmxReader
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nuri_game-tmx_reader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nuri Yuri
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-13 00:00:00.000000000 Z
11
+ date: 2018-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler