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

Raises:



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]
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