Class: Miyako::MapStructFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/Miyako/API/map_struct.rb

Overview

マップ作成ファクトリクラス

Class Method Summary collapse

Class Method Details

.create(size, layers, elayers = nil) ⇒ Object

MapStruct構造体を生成する

マップの大きさ・マップレイヤーを構成する配列・イベントレイヤーを構成する配列から MapChip構造体を生成する それぞれ構成を確認し、合致しないときはMiyakoErrorを返す

(例)access_type数2、レイヤー階層1層、縦5、横6のとき [[[-1,-1,-1,-1,-1,-1],

[-1, 1, 1, 1, 1,-1],
[-1, 1, 0, 0, 1,-1],
[-1, 1, 1, 1, 1,-1],
[-1,-1,-1,-1,-1,-1]]

[[-1,-1,-1,-1,-1,-1],

[-1,-1, 2, 2,-1,-1],
[-1, 2, 1, 1, 2,-1],
[-1,-1, 2, 2,-1,-1],
[-1,-1,-1,-1,-1,-1]]]
size

マップの大きさ。マップチップ単位・Size構造体インスタンスを渡す

layers

マップチップIDの並びを示す配列

elayers

イベントIDの並びを示す配列。使用しないときは省略(nilを渡す)

返却値

生成したMapStruct構造体

Raises:



193
194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'lib/Miyako/API/map_struct.rb', line 193

def MapStructFactory.create(size, layers, elayers=nil)
  raise MiyakoError, "layer access types and event layer access types is not equal." if elayers && layers.length != elayers.length
  layers.each{|layer|
    raise MiyakoError, "layer height and size.h is not equal." if layer.length != size[1]
    layer.each{|line| raise MiykaoError, "layer width and size.w is not equal." if line.length != size[0] }
  }
  if elayers
    elayers.each{|layer|
      raise MiyakoError, "event layer height and size.h is not equal." if layer.length != size[1]
      layer.each{|line| raise MiykaoError, "event layer width and size.w is not equal." if line.length != size[0] }
    }
  end
  return MapStruct.new(Size.new(*size), layers.length, layers, elayers ? elayers.length : 0, elayers)
end

.load(csv_filename) ⇒ Object

CSVファイルからMapStruct構造体を生成する

csv_filename

マップファイル名(CSVファイル)

返却値

生成したMapStruct構造体



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/Miyako/API/map_struct.rb', line 142

def MapStructFactory.load(csv_filename)
  raise MiyakoIOError.no_file(csv_filename) unless File.exist?(csv_filename)
  layer_data = CSV.readlines(csv_filename)
  raise MiyakoFileFormatError, "This file is not Miyako Map Layer file! : #{csv_filename}" unless layer_data.shift[0] == "Miyako Maplayer"

  tmp = layer_data.shift # 空行の空読み込み

  size = Size.new(*(tmp[0..1].map{|v| v.to_i}))

  layers = layer_data.shift[0].to_i

  elayer = []
  layer  = []
  layers.times{|n|
    name = layer_data.shift[0]
    values = []
    size.h.times{|y|
      values << layer_data.shift.map{|m| m.to_i}
    }
    if name == "<event>"
      elayer << values
    else
      layer << values
    end
  }

  return MapStruct.new(size, layer.length, layer, elayer.length, elayer)
end

.undefined_layer(size) ⇒ Object

すべて未定義のマップレイヤー配列を作成する

すべての要素の値が-1(未定義)のレイヤー配列を生成する。

(例)縦5、横6(MapStructFactory.undefined_layer()のとき [[-1,-1,-1,-1,-1,-1], [-1,-1,-1,-1,-1,-1], [-1,-1,-1,-1,-1,-1], [-1,-1,-1,-1,-1,-1],

-1,-1,-1,-1,-1,-1]
size

マップの大きさ。マップチップ単位・Size構造体インスタンスを渡す

返却値

生成したレイヤー配列



220
221
222
# File 'lib/Miyako/API/map_struct.rb', line 220

def MapStructFactory.undefined_layer(size)
  return Array.new(size[1]){ Array.new(size[0]){ -1 }}
end