Class: Miyako::FixedMap

Inherits:
Object show all
Includes:
Animation, Layout, SpriteBase
Defined in:
lib/Miyako/API/fixedmap.rb

Overview

スクロールしないマップクラス

Defined Under Namespace

Classes: FixedMapLayer

Constant Summary collapse

@@idx_ix =
[-1, 2, 4]
@@idx_iy =
[-1, 0, 6]

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Layout

#add_snap_child, #bottom, #bottom!, #center, #center!, #centering, #centering!, #copy_layout, #delete_snap_child, #get_snap_children, #get_snap_sprite, #h, #include_snap_child?, #init_layout, #layout_dispose, #left, #left!, #middle, #middle!, #move, #move!, #move_to, #move_to!, #on_move, #outside_bottom, #outside_bottom!, #outside_left, #outside_left!, #outside_right, #outside_right!, #outside_top, #outside_top!, #pos, #rect, #relative_move_to, #relative_move_to!, #reset_snap, #right, #right!, #segment, #set_layout_size, #set_snap_children, #set_snap_sprite, #size, #snap, #top, #top!, #update_layout, #w, #x, #y

Methods included from Animation

[], []=, anim_hash, #reset, reset, start, #start, #stop, stop, update, update_animation, #update_animation

Methods included from SpriteBase

#bitmap, #hide, #image_rect, #image_size, #oh, #oh=, #ow, #ow=, #ox, #ox=, #oy, #oy=, #part_rect, #rect, #render_d, #render_xy, #render_xy_to, #show, #update

Constructor Details

#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

Instance Attribute Details

#map_hObject (readonly)

Returns the value of attribute map_h.



34
35
36
# File 'lib/Miyako/API/fixedmap.rb', line 34

def map_h
  @map_h
end

#map_layersObject (readonly)

Returns the value of attribute map_layers.



34
35
36
# File 'lib/Miyako/API/fixedmap.rb', line 34

def map_layers
  @map_layers
end

#map_sizeObject (readonly)

Returns the value of attribute map_size.



34
35
36
# File 'lib/Miyako/API/fixedmap.rb', line 34

def map_size
  @map_size
end

#map_wObject (readonly)

Returns the value of attribute map_w.



34
35
36
# File 'lib/Miyako/API/fixedmap.rb', line 34

def map_w
  @map_w
end

#mapchipsObject (readonly)

Returns the value of attribute mapchips.



34
35
36
# File 'lib/Miyako/API/fixedmap.rb', line 34

def mapchips
  @mapchips
end

#nameObject (readonly)

Returns the value of attribute name.



34
35
36
# File 'lib/Miyako/API/fixedmap.rb', line 34

def name
  @name
end

#visibleObject

レンダリングの可否(true->描画 false->非描画)



33
34
35
# File 'lib/Miyako/API/fixedmap.rb', line 33

def visible
  @visible
end

Instance Method Details

#[](idx) ⇒ Object

:nodoc:



478
479
480
# File 'lib/Miyako/API/fixedmap.rb', line 478

def [](idx) #:nodoc:
  return @map_layers[idx]
end

#add_event(idx, code, x, y) ⇒ Object

マップにイベントを追加する

イベントレイヤーでの番号はイベント番号と一致する ブロックを渡すと、求めたマップチップ番号をブロック引数として受け取る評価を行える

idx

追加するイベントレイヤの指標

code

イベント番号(Map.newメソッドで渡したイベント番号に対応)

x

マップ上の位置(x方向)

y

マップ常温位置(y方向)

返却値

自分自身を返す



352
353
354
355
356
357
# File 'lib/Miyako/API/fixedmap.rb', line 352

def add_event(idx, code, x, y)
  raise MiyakoError "Event Manager is not registered!" unless @em
  raise MiyakoError "Unregisted event code! : #{code}" unless @em.include?(code)
  @event_layers[idx].push(@em.create(code, x, y))
  return self
end

#all_event_move!(dx, dy, *params) ⇒ Object

全てのイベントに対してmove!メソッドを呼び出す

全レイヤーのイベントを呼び出すことに注意

dx

x座標の移動量

dy

y座標の移動量

params

イベントのmove!メソッドを呼び出すときに渡す引数。可変個数

返却値

レシーバ



423
424
425
426
# File 'lib/Miyako/API/fixedmap.rb', line 423

def all_event_move!(dx, dy, *params)
  @event_layers.each{|el| el.each{|event| event.move!(dx, dy, *params) } }
  self
end

#all_event_pos_move!(dx, dy, *params) ⇒ Object

全てのイベントに対してsprite_move!メソッドを呼び出す

全レイヤーのイベントを呼び出すことに注意

dx

x座標の移動量

dy

y座標の移動量

params

イベントのmove!メソッドを呼び出すときに渡す引数。可変個数

返却値

レシーバ



469
470
471
472
# File 'lib/Miyako/API/fixedmap.rb', line 469

def all_event_pos_move!(dx, dy, *params)
  @event_layers.each{|el| el.each{|event| event.pos_move!(dx, dy, *params) } }
  self
end

#all_event_sprite_move!(dx, dy, *params) ⇒ Object

全てのイベントに対してsprite_move!メソッドを呼び出す

全レイヤーのイベントを呼び出すことに注意

dx

x座標の移動量

dy

y座標の移動量

params

イベントのmove!メソッドを呼び出すときに渡す引数。可変個数

返却値

レシーバ



446
447
448
449
# File 'lib/Miyako/API/fixedmap.rb', line 446

def all_event_sprite_move!(dx, dy, *params)
  @event_layers.each{|el| el.each{|event| event.sprite_move!(dx, dy, *params) } }
  self
end

#all_event_update(*params) ⇒ Object

全てのイベントに対してupdateメソッドを呼び出す

全レイヤーのイベントを呼び出すことに注意

params

イベントのupdateメソッドを呼び出すときに渡す引数。可変個数



382
383
384
385
# File 'lib/Miyako/API/fixedmap.rb', line 382

def all_event_update(*params)
  @event_layers.each{|el| el.each{|event| event.update(self, el, *params) } }
  self
end

#all_event_update2(*params) ⇒ Object

全てのイベントに対してupdate2メソッドを呼び出す

全レイヤーのイベントを呼び出すことに注意

params

イベントのupdate2メソッドを呼び出すときに渡す引数。可変個数



400
401
402
403
# File 'lib/Miyako/API/fixedmap.rb', line 400

def all_event_update2(*params)
  @event_layers.each{|el| el.each{|event| event.update2(*params) } }
  self
end

#append_event(idx, event) ⇒ Object

マップに生成済みのイベントを追加する

idx

追加するイベントレイヤの指標

event

イベント番号(Map.newメソッドで渡したイベント番号に対応)

返却値

自分自身を返す



363
364
365
366
# File 'lib/Miyako/API/fixedmap.rb', line 363

def append_event(idx, event)
  @event_layers[idx].push(event)
  return self
end

#broad_rectObject

現在の画面の最大の大きさを矩形で取得する

但し、FixedMapの場合は最大の大きさ=画面の大きさなので、rectと同じ値が得られる

返却値

画像の大きさ(Rect構造体のインスタンス)



508
509
510
# File 'lib/Miyako/API/fixedmap.rb', line 508

def broad_rect
  return self.rect
end

#chipSizeObject

マップチップ1枚の大きさを取得する

マップチップの大きさが32×32ピクセルの場合は、のSize構造体が返る

返却値

マップチップのサイズ(Size構造体)



536
537
538
# File 'lib/Miyako/API/fixedmap.rb', line 536

def chipSize
  return @mapchips.first.chip_size
end

#disposeObject

マップ情報を解放する



547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
# File 'lib/Miyako/API/fixedmap.rb', line 547

def dispose
  @map_layers.each{|l|
    l.dispose
    l = nil
  }
  @map_layers = Array.new

  @event_layers.each{|ee|
    ee.each{|e| e.dispose }
    ee.clear
  }
  @event_layers.clear

  @mapchips.clear
  @mapchips = nil
end

#event_move!(idx, dx, dy, *params) ⇒ Object

指定のレイヤーのイベントに対してmove!メソッドを呼び出す

イベントレイヤーidxの全てのイベントに対してmove!メソッドを呼び出す

idx

更新するイベントレイヤーの番号

dx

x座標の移動量

dy

y座標の移動量

params

イベントのmove!メソッドを呼び出すときに渡す引数。可変個数

返却値

レシーバ



412
413
414
415
# File 'lib/Miyako/API/fixedmap.rb', line 412

def event_move!(idx, dx, dy, *params)
  @event_layers[idx].each{|event| event.move!(dx, dy, *params) }
  self
end

#event_pos_move!(idx, dx, dy, *params) ⇒ Object

指定のレイヤーのイベントに対してsprite_move!メソッドを呼び出す

イベントレイヤーidxの全てのイベントに対してsprite_move!メソッドを呼び出す

idx

更新するイベントレイヤーの番号

dx

x座標の移動量

dy

y座標の移動量

params

イベントのmove!メソッドを呼び出すときに渡す引数。可変個数

返却値

レシーバ



458
459
460
461
# File 'lib/Miyako/API/fixedmap.rb', line 458

def event_pos_move!(idx, dx, dy, *params)
  @event_layers[idx].each{|event| event.pos_move!(dx, dy, *params) }
  self
end

#event_sprite_move!(idx, dx, dy, *params) ⇒ Object

指定のレイヤーのイベントに対してsprite_move!メソッドを呼び出す

イベントレイヤーidxの全てのイベントに対してsprite_move!メソッドを呼び出す

idx

更新するイベントレイヤーの番号

dx

x座標の移動量

dy

y座標の移動量

params

イベントのmove!メソッドを呼び出すときに渡す引数。可変個数

返却値

レシーバ



435
436
437
438
# File 'lib/Miyako/API/fixedmap.rb', line 435

def event_sprite_move!(idx, dx, dy, *params)
  @event_layers[idx].each{|event| event.sprite_move!(dx, dy, *params) }
  self
end

#event_update(idx, *params) ⇒ Object

指定のレイヤーのイベントに対してupdateメソッドを呼び出す

イベントレイヤーidxの全てのイベントに対してupdateメソッドを呼び出す

idx

更新するイベントレイヤーの番号

params

イベントのupdateメソッドを呼び出すときに渡す引数。可変個数

返却値

レシーバ



374
375
376
377
# File 'lib/Miyako/API/fixedmap.rb', line 374

def event_update(idx, *params)
  @event_layers[idx].each{|event| event.update(self, @event_layers[idx], *params) }
  self
end

#event_update2(idx, *params) ⇒ Object

指定のレイヤーのイベントに対してupdate2メソッドを呼び出す

イベントレイヤーidxの全てのイベントに対してupdateメソッドを呼び出す

idx

更新するイベントレイヤーの番号

params

イベントのupdateメソッドを呼び出すときに渡す引数。可変個数

返却値

レシーバ



392
393
394
395
# File 'lib/Miyako/API/fixedmap.rb', line 392

def event_update2(idx, *params)
  @event_layers[idx].each{|event| event.update2(*params) }
  self
end

#eventsObject

マップに登録しているイベントインスタンス(マップイベント)を取得する

返却値

マップイベントの配列



566
567
568
# File 'lib/Miyako/API/fixedmap.rb', line 566

def events
  return @event_layers
end

#finalObject

すべてのマップイベントを終了させる

マップに登録しているイベントすべてのfinalメソッドを呼び出す



542
543
544
# File 'lib/Miyako/API/fixedmap.rb', line 542

def final
  @event_layers.each{|ee| ee.each{|e| e.final }}
end

#get_code(idx, x = 0, y = 0) {|code| ... } ⇒ Object

実座標を使用して、指定のレイヤー・位置のマップチップ番号を取得

イベントレイヤーでの番号はイベント番号と一致する ブロックを渡すと、求めたマップチップ番号をブロック引数として受け取る評価を行える

idx

マップレイヤー配列のインデックス

x

マップチップ単位での位置(ピクセル単位)

y

マップチップ単位での位置(ピクセル単位)

返却値

マップチップ番号(マップチップが設定されている時は0以上の整数、設定されていない場合は-1が返る)

Yields:

  • (code)


489
490
491
492
493
# File 'lib/Miyako/API/fixedmap.rb', line 489

def get_code(idx, x = 0, y = 0)
  code = @map_layers[idx].get_code(x, y)
  yield code if block_given?
  return code
end

#initialize_copy(obj) ⇒ Object

:nodoc:



335
336
337
338
339
340
341
342
# File 'lib/Miyako/API/fixedmap.rb', line 335

def initialize_copy(obj) #:nodoc:
  @map_layers = @map_layers.dup
  @event_layers = @event_layers.dup
  @em = @em.dup if @em
  @mapchips = @mapchips.dup
  @map_size = @map_size.dup
  copy_layout
end

#renderObject

マップを画面に描画する

すべてのマップチップを画面に描画する 各レイヤ-を、レイヤーインデックス番号の若い順に描画する 但し、マップイベントは描画しない ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る) (ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない) ブロックの引数は、|画面のSpriteUnit|となる。 visibleメソッドの値がfalseのときは描画されない。

返却値

自分自身を返す



579
580
# File 'lib/Miyako/API/fixedmap.rb', line 579

def render
end

#render_to(dst) ⇒ Object

マップレイヤーを画像に転送する

すべてのマップチップを画像に描画する ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る) (ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない) ブロックの引数は、|転送先のSpriteUnit|となる。 visibleメソッドの値がfalseのときは描画されない。

dst

転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)

返却値

自分自身を返す



590
591
# File 'lib/Miyako/API/fixedmap.rb', line 590

def render_to(dst)
end

#set_mapchip_base(idx, code, base) ⇒ Object

対象のマップチップ番号の画像を置き換える

idx

置き換えるマップチップレイヤー番号

code

置き換えるマップチップ番号

base

置き換え対象の画像・アニメーション

返却値

自分自身を返す



500
501
502
503
# File 'lib/Miyako/API/fixedmap.rb', line 500

def set_mapchip_base(idx, code, base)
  @map_layers[idx].mapchip_units[code] = base
  return self
end

#to_sprite {|sprite| ... } ⇒ Object

スプライトに変換した画像を表示する

すべてのパーツを貼り付けた、1枚のスプライトを返す 引数1個のブロックを渡せば、スプライトに補正をかけることが出来る

返却値

描画したスプライト

Yields:

  • (sprite)


516
517
518
519
520
521
522
523
524
# File 'lib/Miyako/API/fixedmap.rb', line 516

def to_sprite
  rect = self.broad_rect
  sprite = Sprite.new(:size=>rect.to_a[2,2], :type=>:ac)
  Drawing.fill(sprite, [0,0,0])
  Bitmap.ck_to_ac!(sprite, [0,0,0])
  self.render_to(sprite){|sunit, dunit| sunit.x -= rect.x; sunit.y -= rect.y }
  yield sprite if block_given?
  return sprite
end

#to_unitObject

SpriteUnit構造体を生成する

いったんSpriteインスタンスを作成し、それをもとにSpriteUnit構造体を生成する。

返却値

生成したSpriteUnit構造体



529
530
531
# File 'lib/Miyako/API/fixedmap.rb', line 529

def to_unit
  return self.to_sprite.to_unit
end

#update_layout_positionObject

:nodoc:



474
475
476
# File 'lib/Miyako/API/fixedmap.rb', line 474

def update_layout_position #:nodoc:
  @map_layers.each{|ml| ml.pos.move_to!(*@layout.pos) }
end