retmx 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/retmx.rb +29 -15
  2. data/lib/retmx_sdl.rb +13 -5
  3. metadata +3 -3
data/lib/retmx.rb CHANGED
@@ -12,8 +12,7 @@ module RETMX
12
12
  include REXML
13
13
 
14
14
  def RETMX.load(file)
15
- doc = Document.new (File.new(file))
16
- m = Map.new(doc.root)
15
+ m = Map.new(file)
17
16
  end
18
17
 
19
18
 
@@ -75,10 +74,19 @@ module RETMX
75
74
 
76
75
  #Properties on map
77
76
  attr_reader :property
78
-
77
+
78
+ #File where get map
79
+ attr_reader :file
80
+
79
81
  #REXML internal
80
82
  attr_reader :xml
81
- def initialize(doc)
83
+ def initialize(file)
84
+
85
+ raise RuntimeError, "Need a .tmx" unless File.exists? file
86
+ doc = REXML::Document.new(File.new(file)).root
87
+
88
+
89
+ @file = file
82
90
  @version = doc.attributes['version']
83
91
  @orientation = doc.attributes['orientation']
84
92
  @width = doc.attributes['width'].to_i
@@ -223,28 +231,29 @@ When the object has a gid set, then it is represented by the image of the tile w
223
231
  #REXML internal
224
232
  attr_reader :xml
225
233
  def initialize(map, xml)
226
-
234
+ @map = map
227
235
  @name = xml.attributes['name']
228
236
  @x = xml.attributes['x'].nil? ? 0 : xml.attributes['x']
229
237
  @y = xml.attributes['y'].nil? ? 0 : xml.attributes['y']
230
- @width = xml.attributes['width'].nil? ? xml.parent.attributes['width'].to_i : xml.attributes['width'].to_i
231
- @height = xml.attributes['height'].nil? ? xml.parent.attributes['height'].to_i : xml.attributes['height'].to_i
238
+ @width = xml.attributes['width'].nil? ? map.width : xml.attributes['width'].to_i
239
+ @height = xml.attributes['height'].nil? ? map.height : xml.attributes['height'].to_i
232
240
  @opacity = xml.attributes['opacity'].nil? ? 1 : xml.attributes['opacity'].to_i
233
241
  @visible = xml.attributes['visible'].nil? ? 1 : xml.attributes['visible'].to_i
234
242
  @opacity = xml.attributes['opacity'].nil? ? 1 : xml.attributes['opacity'].to_f
235
243
  @data = nil
236
- @map = map
237
244
  build(xml)
238
245
  end
239
246
 
240
247
 
241
248
  #This function is used for render the layer
242
249
  def render(&block) #:yields: block_y, block_x, tileset, index
250
+
243
251
  @height.times {|by| #block row
244
- @width.times {|bx| #block col
245
- cell = @data[(by * @height) + bx]
252
+ @width.times {|bx| #block col
253
+ cell = @data[(by * @width) + bx ]
246
254
  @map.tilesets.each {|k, t|
247
255
  if t.firstgid <= cell.gid
256
+ cell = cell.clone
248
257
  cell.gid -= t.firstgid
249
258
  block.call(self, bx, by, t, cell)
250
259
  break
@@ -252,6 +261,7 @@ When the object has a gid set, then it is represented by the image of the tile w
252
261
  }
253
262
  }
254
263
  }
264
+
255
265
  end
256
266
 
257
267
  #This function render partial of layer
@@ -262,9 +272,11 @@ When the object has a gid set, then it is represented by the image of the tile w
262
272
  def render_partial(x, y, w, h, &block)
263
273
  h.times {|by|
264
274
  w.times {|bx|
265
- cell = @data[((by + y ) * @height) + (bx + x)]
275
+ cell = @data[((by + y ) * w) + (bx + x)]
266
276
  @map.tilesets.each {|k, t|
277
+
267
278
  if t.firstgid <= cell.gid
279
+ cell = cell.clone
268
280
  cell.gid -= t.firstgid
269
281
  block.call(self, bx, by, t, cell)
270
282
  break
@@ -282,8 +294,8 @@ When the object has a gid set, then it is represented by the image of the tile w
282
294
 
283
295
  class Data
284
296
  include Enumerable
285
- GID_FLIP_X = 1.<< 31
286
- GID_FLIP_Y = 1.<< 30
297
+ GID_FLIP_X = 0x80000000
298
+ GID_FLIP_Y = 0x40000000
287
299
 
288
300
  #The encoding used to encode the tile layer data. When used, it can be "base64" and "csv" at the moment.
289
301
  attr_reader :encoding
@@ -307,7 +319,7 @@ When the object has a gid set, then it is represented by the image of the tile w
307
319
  @raw = []
308
320
  @raw_data = xml.text
309
321
  @data = []
310
-
322
+
311
323
  #decoding
312
324
  case @encoding
313
325
  when 'base64'
@@ -341,9 +353,11 @@ When the object has a gid set, then it is represented by the image of the tile w
341
353
  end
342
354
 
343
355
  get_data
344
-
345
356
  end
346
357
 
358
+ def size
359
+ @data.size
360
+ end
347
361
 
348
362
  def [] (i)
349
363
  @data[i]
data/lib/retmx_sdl.rb CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
 
22
22
  require 'sdl'
23
- require 'retmx'
23
+
24
24
 
25
25
  module RETMX
26
26
 
@@ -39,11 +39,12 @@ module RETMX
39
39
  raise RuntimeError, "Need a RETMX::Map or path to .tmx" unless tmx.kind_of? Map
40
40
  end
41
41
 
42
-
42
+ @data_dir = File.dirname(@tmx.file)
43
43
  @tileset_images = {}
44
44
  @tmx.tilesets.each {|k,t|
45
- if File.exists? t.image.source or !@tileset_imagen.include? t.name
46
- image = SDL::Surface.load(t.image.source)
45
+ fimage = File.join(@data_dir, t.image.source)
46
+ if File.exists? fimage or !@tileset_images.include? t.name
47
+ image = SDL::Surface.load(fimage)
47
48
  image.setColorKey(SDL::SRCCOLORKEY, t.image.trans.hex) unless t.image.trans.nil?
48
49
  @tileset_images[t.name] = image
49
50
  end
@@ -83,6 +84,12 @@ module RETMX
83
84
  }
84
85
  end
85
86
 
87
+ def blit_layers(sx, sy, sw, sh, surface, dx, dy)
88
+ @tmx.layers.each {|name, layer|
89
+ blit_layer(name, sx, sy, sw, sh, surface, dx, dy)
90
+ }
91
+ end
92
+
86
93
  #Perfoms a blit from layer at (+sx+,+sy+,+sw+,+sh+) to +surface+ at (+dx+, +dy)
87
94
  #:sx: on tiles
88
95
  #:sy: on tiles
@@ -123,8 +130,9 @@ if $0 == __FILE__
123
130
 
124
131
  $screen = SDL.setVideoMode(tmx.width * tmx.tilewidth, tmx.height * tmx.tileheight, 0, 0)
125
132
 
133
+
126
134
  #Blit specific layer
127
- #tmxsdl.blit_layer('Ground', 0,0,8,8, $screen, 0, 0)
135
+ #tmxsdl.blit_layers(0,0,9,8, $screen, 0, 0)
128
136
  tmxsdl.put_layers($screen, 0, 0)
129
137
  $screen.flip
130
138
  until $quit
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: retmx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,9 +9,9 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-10 00:00:00.000000000 Z
12
+ date: 2011-12-16 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description:
14
+ description: Library for work with .tmx of mapeditor.org, generic work, see doc
15
15
  email: info@manadalibre.org
16
16
  executables: []
17
17
  extensions: []