Class: Miyako::Map

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

Overview

マップ定義クラス

Defined Under Namespace

Classes: MapLayer

Constant Summary collapse

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

Instance Attribute Summary collapse

Instance Method Summary collapse

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, #render_d, #render_xy, #render_xy_to, #show, #update

Constructor Details

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

インスタンスを生成する

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

mapchips

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

map_struct

MapStruct構造体のインスタンス

event_manager

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

返却値

生成したインスタンス


281
282
283
284
285
286
287
288
289
290
291
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
# File 'lib/Miyako/API/map.rb', line 281

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

  @size = map_struct.size
  @w = @size.w
  @h = @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(MapLayer.new(mc.next, br, @size))
  }
end

Instance Attribute Details

#hObject (readonly) Also known as: map_h

Returns the value of attribute h


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

def h
  @h
end

#map_layersObject (readonly)

Returns the value of attribute map_layers


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

def map_layers
  @map_layers
end

#mapchipsObject (readonly)

Returns the value of attribute mapchips


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

def mapchips
  @mapchips
end

#posObject (readonly)

Returns the value of attribute pos


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

def pos
  @pos
end

#sizeObject (readonly) Also known as: map_size

Returns the value of attribute size


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

def size
  @size
end

#visibleObject

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


32
33
34
# File 'lib/Miyako/API/map.rb', line 32

def visible
  @visible
end

#wObject (readonly) Also known as: map_w

Returns the value of attribute w


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

def w
  @w
end

Instance Method Details

#[](idx) ⇒ Object

設定したマージンを各レイヤーに同期させる

マージンを設定した後は必ずこのメソッドを呼び出すこと

返却値

自分自身を返す


430
431
432
# File 'lib/Miyako/API/map.rb', line 430

def [](idx)
  return @map_layers[idx]
end

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

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

EventManagerが登録されていないときや登録されていないイベント番号で追加したときは例外を返す

idx

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

code

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

x

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

y

マップ上の初期位置(y方向)

返却値

自分自身を返す


338
339
340
341
342
343
# File 'lib/Miyako/API/map.rb', line 338

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!メソッドを呼び出すときに渡す引数。可変個数

返却値

レシーバ


550
551
552
553
# File 'lib/Miyako/API/map.rb', line 550

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!メソッドを呼び出すときに渡す引数。可変個数

返却値

レシーバ


596
597
598
599
# File 'lib/Miyako/API/map.rb', line 596

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!メソッドを呼び出すときに渡す引数。可変個数

返却値

レシーバ


573
574
575
576
# File 'lib/Miyako/API/map.rb', line 573

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メソッドを呼び出す

全レイヤーのイベントを呼び出すことに注意 updateメソッドに渡されるレイヤーは、そのイベントが登録されているレイヤーのみ渡される

params

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


509
510
511
512
# File 'lib/Miyako/API/map.rb', line 509

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メソッドを呼び出すときに渡す引数。可変個数


527
528
529
530
# File 'lib/Miyako/API/map.rb', line 527

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メソッドで渡したイベント番号に対応)

返却値

自分自身を返す


349
350
351
352
# File 'lib/Miyako/API/map.rb', line 349

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

#broad_rectObject

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

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

返却値

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


402
403
404
# File 'lib/Miyako/API/map.rb', line 402

def broad_rect
  return self.rect
end

#chip_sizeObject

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

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

返却値

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


460
461
462
# File 'lib/Miyako/API/map.rb', line 460

def chip_size
  return @mapchips.first.chip_size
end

#disposeObject

マップ情報を解放する


471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
# File 'lib/Miyako/API/map.rb', line 471

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!メソッドを呼び出すときに渡す引数。可変個数

返却値

レシーバ


539
540
541
542
# File 'lib/Miyako/API/map.rb', line 539

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!メソッドを呼び出すときに渡す引数。可変個数

返却値

レシーバ


585
586
587
588
# File 'lib/Miyako/API/map.rb', line 585

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!メソッドを呼び出すときに渡す引数。可変個数

返却値

レシーバ


562
563
564
565
# File 'lib/Miyako/API/map.rb', line 562

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メソッドを呼び出す ただし、updateメソッドに渡されるレイヤーは、idxで指定したレイヤーのイベントのみ渡される

idx

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

params

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

返却値

レシーバ


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

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メソッドを呼び出すときに渡す引数。可変個数

返却値

レシーバ


519
520
521
522
# File 'lib/Miyako/API/map.rb', line 519

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

#eventsObject

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

返却値

マップイベントの配列


490
491
492
# File 'lib/Miyako/API/map.rb', line 490

def events
  return @event_layers
end

#finalObject

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

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


466
467
468
# File 'lib/Miyako/API/map.rb', line 466

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)

441
442
443
444
445
# File 'lib/Miyako/API/map.rb', line 441

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:


322
323
324
325
326
327
328
329
# File 'lib/Miyako/API/map.rb', line 322

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

#move(dx, dy) ⇒ Object

マップを移動(移動量指定)位置を求める

ただし、自分自身の位置は変わらない

dx

移動量(x方向)

dy

移動量(y方向)

返却値

変更した位置のインスタンス(Position構造体)


379
380
381
# File 'lib/Miyako/API/map.rb', line 379

def move(dx,dy)
  @pos.move(dx, dy)
end

#move!(dx, dy) ⇒ Object

マップを移動(移動量指定)

dx

移動量(x方向)

dy

移動量(y方向)

返却値

自分自身を返す


358
359
360
361
362
# File 'lib/Miyako/API/map.rb', line 358

def move!(dx,dy)
  @pos.move!(dx, dy)
  @map_layers.each{|l| l.pos.move!(dx, dy) }
  return self
end

#move_to(x, y) ⇒ Object

マップを移動(移動先指定)位置を求める

ただし、自分自身の位置は変わらない

dx

移動先(x方向)

dy

移動先(y方向)

返却値

変更した位置のインスタンス(Position構造体)


388
389
390
# File 'lib/Miyako/API/map.rb', line 388

def move_to(x,y)
  @pos.move_to(x, y)
end

#move_to!(x, y) ⇒ Object

マップを移動(移動先指定)

dx

移動先(x方向)

dy

移動先(y方向)

返却値

自分自身を返す


368
369
370
371
372
# File 'lib/Miyako/API/map.rb', line 368

def move_to!(x,y)
  @pos.move_to!(x, y)
  @map_layers.each{|l| l.pos.move_to!(x, y) }
  return self
end

#rectObject

画像の表示矩形を取得する

Mapの大きさを矩形で取得する。値は、Screen.rectメソッドの値と同じ。

返却値

生成された矩形


395
396
397
# File 'lib/Miyako/API/map.rb', line 395

def rect
  return Screen.rect
end

#renderObject

マップを画面に描画する

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

返却値

自分自身を返す


610
611
# File 'lib/Miyako/API/map.rb', line 610

def render
end

#render_to(dst) ⇒ Object

マップを画像に描画する

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

dst

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

返却値

自分自身を返す


623
624
# File 'lib/Miyako/API/map.rb', line 623

def render_to(dst)
end

#set_mapchip_base(idx, code, base) ⇒ Object

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

idx

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

code

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

base

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

返却値

自分自身を返す


452
453
454
455
# File 'lib/Miyako/API/map.rb', line 452

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)

410
411
412
413
414
415
416
417
418
# File 'lib/Miyako/API/map.rb', line 410

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構造体


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

def to_unit
  return self.to_sprite.to_unit
end