Class: Miyako::MapStructFactory
Overview
マップ作成ファクトリクラス
Class Method Summary collapse
-
.create(size, layers, elayers = nil) ⇒ Object
MapStruct構造体を生成する マップの大きさ・マップレイヤーを構成する配列・イベントレイヤーを構成する配列から MapChip構造体を生成する それぞれ構成を確認し、合致しないときはMiyakoErrorを返す.
-
.load(csv_filename) ⇒ Object
CSVファイルからMapStruct構造体を生成する csv_filename:: マップファイル名(CSVファイル) 返却値:: 生成したMapStruct構造体.
-
.undefined_layer(size) ⇒ Object
すべて未定義のマップレイヤー配列を作成する すべての要素の値が-1(未定義)のレイヤー配列を生成する。.
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構造体
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 |