tmx 0.1.3 → 0.1.4

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2269a75b8e1f1dd7ce9a4ac399cae4a3538ad5df
4
+ data.tar.gz: 98f6cb5462d7245e495595dbf851cc1458fee5e1
5
+ SHA512:
6
+ metadata.gz: cc07f67ec4b9bd782be6c2749ab34424f0ab165e467afb6504d1c46edc7384406e2ba5f62e73c54d70bde545eb6e7d9f42da9399f3c1db96c34ad9094def1477
7
+ data.tar.gz: 52caa2aef41c92361b404bfaae226d68cb9255b8eab2827c202e75288f4f8e4a3a3874f33a6e4ebcf7547901df4a4122e9b6d98c9274a053fa952d6e4cb38a26
data/lib/tmx.rb CHANGED
@@ -17,7 +17,9 @@ module Tmx
17
17
  #
18
18
  def load(filename,options={})
19
19
  options = default_options(filename).merge(options)
20
- parse contents(filename), options
20
+
21
+ # Pass :filename in options for resolving relative "source" paths
22
+ parse contents(filename), options.merge(:filename => filename)
21
23
  end
22
24
 
23
25
  #
@@ -66,7 +66,7 @@ module Tmx
66
66
 
67
67
  layer_hash["type"] = layer_attr(layer,"type",default: "tilelayer")
68
68
  layer_hash["opacity"] = layer_attr(layer,"opacity",default: 1.0).to_f
69
- layer_hash["visible"] = (layer.xpath("@visible").text =~ /^false$/ ? false : true)
69
+ layer_hash["visible"] = to_boolean(layer.xpath("@visible").text)
70
70
 
71
71
  layer_hash["x"] = layer.xpath("@x").text.to_i
72
72
  layer_hash["y"] = layer.xpath("@y").text.to_i
@@ -118,12 +118,29 @@ module Tmx
118
118
  data.unpack("V" * (data.length / 4))
119
119
  end
120
120
 
121
+ def to_boolean(text)
122
+ ![ "false", "0" ].include?(text)
123
+ end
124
+
121
125
  def map_tilesets(xml)
122
126
  xml.xpath("map/tileset").map do |tileset|
127
+ # Firstgid is usually set in the main file,
128
+ # even if a tileset is read from a separate file.
129
+ firstgid = tileset.xpath("@firstgid").text.to_i
130
+
131
+ source = tileset.xpath("@source")
132
+ if source && source.size > 0
133
+ this_dir = @options[:filename] ? File.dirname(@options[:filename]) : "."
134
+ tileset_path = File.join(this_dir, source.text)
135
+ contents = File.read(tileset_path)
136
+ results = Nokogiri::XML(contents)
137
+ tileset = results.xpath("tileset")
138
+ end
139
+
123
140
  image = tileset.xpath("image")
124
141
 
125
142
  properties = {
126
- "firstgid" => tileset.xpath("@firstgid").text.to_i,
143
+ "firstgid" => firstgid || tileset.xpath("@firstgid").text.to_i,
127
144
  "name" => tileset.xpath("@name").text,
128
145
  "tilewidth" => tileset.xpath("@tilewidth").text.to_i,
129
146
  "tileheight" => tileset.xpath("@tileheight").text.to_i,
@@ -132,6 +149,8 @@ module Tmx
132
149
  "image" => image.xpath("@source").text,
133
150
  "imageheight" => image.xpath("@height").text.to_i,
134
151
  "imagewidth" => image.xpath("@width").text.to_i,
152
+ # "imagetrans" is a color to treat as transparent, like "ff00ff" for magenta.
153
+ "imagetrans" => image.xpath("@trans").text,
135
154
  "properties" => properties(xml)
136
155
  }
137
156
  end
@@ -148,7 +167,7 @@ module Tmx
148
167
  "y" => object.xpath("@y").text.to_i,
149
168
  "width" => object.xpath("@width").text.to_i,
150
169
  "height" => object.xpath("@height").text.to_i,
151
- "visible" => (object.xpath("@visible").text =~ /^false$/ ? false : true),
170
+ "visible" => to_boolean(object.xpath("@visible").text),
152
171
  "properties" => properties(object)
153
172
  }
154
173
 
@@ -1,3 +1,3 @@
1
1
  module Tmx
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tmx, "Map with Source Tileset" do
4
+
5
+ let(:fixture_file) { File.join File.dirname(__FILE__), "..", "fixtures", "map-source-tileset.tmx" }
6
+
7
+ let(:map) do
8
+ described_class.load(fixture_file)
9
+ end
10
+
11
+ let(:subject) { map }
12
+
13
+ its(:width) { should eq 10 }
14
+ its(:height) { should eq 20 }
15
+ its(:tilewidth) { should eq 32 }
16
+ its(:tileheight) { should eq 32 }
17
+
18
+ describe '#layers' do
19
+ it "has the correct number of layers" do
20
+ expect(subject.layers).to have(1).item
21
+ end
22
+ end
23
+
24
+ describe '#tilesets' do
25
+ it "has the correct number of tilesets" do
26
+ expect(subject.tilesets).to have(1).item
27
+ end
28
+
29
+ context "when evaluating the first tileset" do
30
+ let(:subject) { map.tilesets.first }
31
+
32
+ its(:firstgid) { should eq 1 }
33
+ its(:image) { should eq "tiles.png" }
34
+ its(:imageheight) { should eq 400 }
35
+ its(:imagewidth) { should eq 640 }
36
+ its(:margin) { should eq 0 }
37
+ its(:spacing) { should eq 2 }
38
+ its(:tileheight) { should eq 32 }
39
+ its(:tilewidth) { should eq 32 }
40
+ its(:properties) { should eq({}) }
41
+ end
42
+ end
43
+
44
+
45
+ end
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <map version="1.0" orientation="orthogonal" width="10" height="20" tilewidth="32" tileheight="32">
3
+ <tileset firstgid="1" source="tileset.tsx"> </tileset>
4
+ <layer name="Tile Layer 1" width="10" height="20">
5
+ <data encoding="base64" compression="zlib">
6
+ eJxjZmBgYIZiRjTMhISZR9WNqhuB6gBbPgF9
7
+ </data>
8
+ </layer>
9
+ </map>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <tileset name="terrain" tilewidth="32" tileheight="32" spacing="2">
3
+ <image source="tiles.png" width="640" height="400"/>
4
+ </tileset
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tmx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
5
- prerelease:
4
+ version: 0.1.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Shawn Anderson
@@ -10,12 +9,11 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-11-22 00:00:00.000000000 Z
12
+ date: 2013-12-10 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: multi_json
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - ~>
21
19
  - !ruby/object:Gem::Version
@@ -23,7 +21,6 @@ dependencies:
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - ~>
29
26
  - !ruby/object:Gem::Version
@@ -31,7 +28,6 @@ dependencies:
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: nokogiri
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
32
  - - ~>
37
33
  - !ruby/object:Gem::Version
@@ -39,7 +35,6 @@ dependencies:
39
35
  type: :runtime
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
39
  - - ~>
45
40
  - !ruby/object:Gem::Version
@@ -78,11 +73,13 @@ files:
78
73
  - spec/features/xml_format_spec.rb
79
74
  - spec/features/xml_isometric_spec.rb
80
75
  - spec/features/xml_isometric_staggered_spec.rb
76
+ - spec/features/xml_source_tileset_spec.rb
81
77
  - spec/fixtures/iso.png
82
78
  - spec/fixtures/map-isometric-staggered.json
83
79
  - spec/fixtures/map-isometric-staggered.tmx
84
80
  - spec/fixtures/map-isometric.json
85
81
  - spec/fixtures/map-isometric.tmx
82
+ - spec/fixtures/map-source-tileset.tmx
86
83
  - spec/fixtures/map.json
87
84
  - spec/fixtures/map_csv.tmx
88
85
  - spec/fixtures/map_gzip.tmx
@@ -90,32 +87,32 @@ files:
90
87
  - spec/fixtures/map_xml.tmx
91
88
  - spec/fixtures/map_zlib.tmx
92
89
  - spec/fixtures/tiles.png
90
+ - spec/fixtures/tileset.tsx
93
91
  - spec/spec_helper.rb
94
92
  - tmx.gemspec
95
93
  homepage: https://github.com/shawn42/tmx
96
94
  licenses:
97
95
  - MIT
96
+ metadata: {}
98
97
  post_install_message:
99
98
  rdoc_options: []
100
99
  require_paths:
101
100
  - lib
102
101
  required_ruby_version: !ruby/object:Gem::Requirement
103
- none: false
104
102
  requirements:
105
- - - ! '>='
103
+ - - '>='
106
104
  - !ruby/object:Gem::Version
107
105
  version: '0'
108
106
  required_rubygems_version: !ruby/object:Gem::Requirement
109
- none: false
110
107
  requirements:
111
- - - ! '>='
108
+ - - '>='
112
109
  - !ruby/object:Gem::Version
113
110
  version: '0'
114
111
  requirements: []
115
112
  rubyforge_project:
116
- rubygems_version: 1.8.25
113
+ rubygems_version: 2.1.9
117
114
  signing_key:
118
- specification_version: 3
115
+ specification_version: 4
119
116
  summary: A library for parsing the Tiled Map Editor file format.
120
117
  test_files:
121
118
  - spec/features/json_format_spec.rb
@@ -125,11 +122,13 @@ test_files:
125
122
  - spec/features/xml_format_spec.rb
126
123
  - spec/features/xml_isometric_spec.rb
127
124
  - spec/features/xml_isometric_staggered_spec.rb
125
+ - spec/features/xml_source_tileset_spec.rb
128
126
  - spec/fixtures/iso.png
129
127
  - spec/fixtures/map-isometric-staggered.json
130
128
  - spec/fixtures/map-isometric-staggered.tmx
131
129
  - spec/fixtures/map-isometric.json
132
130
  - spec/fixtures/map-isometric.tmx
131
+ - spec/fixtures/map-source-tileset.tmx
133
132
  - spec/fixtures/map.json
134
133
  - spec/fixtures/map_csv.tmx
135
134
  - spec/fixtures/map_gzip.tmx
@@ -137,5 +136,5 @@ test_files:
137
136
  - spec/fixtures/map_xml.tmx
138
137
  - spec/fixtures/map_zlib.tmx
139
138
  - spec/fixtures/tiles.png
139
+ - spec/fixtures/tileset.tsx
140
140
  - spec/spec_helper.rb
141
- has_rdoc: