nuri_game-tmx_reader 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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