Method: Miyako::FixedMap#initialize

Defined in:
lib/Miyako/API/fixedmap.rb

#initialize(mapchips, map_struct, event_manager = nil) ⇒ FixedMap

インスタンスを生成する

各レイヤにMapChip構造体を渡す但し、すべてのレイヤーに同一のMapChip構造体を使うときは、単体で渡すことも可能第1引数にto_aメソッドが実装されていれば、配列化した要素をMapChip構造体として各レイヤに渡すまた、各レイヤにMapChip構造体を渡すとき、レイヤ数より要素数が少ないときは、先頭に戻って繰り返し渡す仕様になっている各MapChip構造体のマップチップの大きさを同じにしておく必要がある

mapchips

マップチップ構造体群(MapChip構造体単体もしくは配列)

map_struct

MapStruct構造体のインスタンス

event_manager

MapEventManagerクラスのインスタンス。省略時(イベントを使わない時)はnil

返却値

生成したインスタンス



292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
# File 'lib/Miyako/API/fixedmap.rb', line 292

def initialize(mapchips, map_struct, event_manager=nil)
  init_layout
  @visible = true
  if event_manager
    @em = event_manager.dup
    @em.set(self)
  else
    @em = nil
  end
  @mapchips = mapchips.to_a

  @map_size = map_struct.size
  @map_w = @map_size.w * @mapchips.first.chip_size.w
  @map_h = @map_size.h * @mapchips.first.chip_size.h

  @event_layers = []

  if map_struct.elayers
    raise MiyakoError "Event Manager is not registered!" unless @em
    map_struct.elayers.each{|events|
      event_layer = Array.new
      events.each_with_index{|ly, y|
        ly.each_with_index{|code, x|
          next unless @em.include?(code)
          event_layer.push(@em.create(code, x * @mapchips.first.chip_size.w, y * @mapchips.first.chip_size.h))
        }
      }
      @event_layers << event_layer
    }
  end

  @event_layers << [] if @event_layers.empty?

  mc = @mapchips.cycle
  @mapchips = mc.take(map_struct.layer_num)
  @map_layers = []
  map_struct.layers.each{|br|
    br = br.map{|b| b.map{|bb| bb >= @mapchips.first.chips ? -1 : bb } }
    @map_layers.push(FixedMapLayer.new(mc.next, br, @map_size))
  }
  set_layout_size(@map_w, @map_h)
end