Class: Miyako::MapChipFactory

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

Overview

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

Class Method Summary collapse

Class Method Details

.all_access_tableObject

全方向移動可能なAccessTableを作成

要素がすべてtrueの配列を生成する

返却値

生成した配列


111
112
113
# File 'lib/Miyako/API/map_struct.rb', line 111

def MapChipFactory.all_access_table
  [true] * 8
end

.create(sprite, access_types = 1) ⇒ Object

スプライトからMapChip構造体を生成する

CSVファイルからではなく、独自に用意したデータからMapChip構造体を生成する このとき、マップチップの大きさは、引数として渡すスプライトのow,ohから算出する collision_tableは、すべてのチップでとして生成する access_tableは、すべての方向でtrueとして設定する

sprite

マップチップが描かれているスプライト

access_types

アクセス形式の数。0以下の時はMiyakoValueErrorが発生する。省略時は1

返却値

MapChip構造体

Raises:

  • (MiyakoValueErro)

79
80
81
82
83
84
85
86
87
# File 'lib/Miyako/API/map_struct.rb', line 79

def MapChipFactory.create(sprite, access_types = 1)
  raise MiyakoValueErro, "illegal access types! needs >1 : #{access_types}" if access_types < 1
  chip_size = Size.new(sprite.ow, sprite.oh)
  size = Size.new(sprite.w / chip_size.w, sprite.h / chip_size.h)
  chips = size.w * size.h
  ctable = Array.new(access_types){|at| Array.new(chips){|n| Collision.new([0,0,chip_size.w,chip_size.h]) } }
  atable = Array.new(access_types){|at| Array.new(chips){|n| [true] * 8 } }
  return MapChip.new(sprite, chips, size, chip_size, access_types, ctable, atable)
end

.create_with_size(sprite, size, access_types = 1) ⇒ Object

スプライトからMapChip構造体を生成する

CSVファイルからではなく、独自に用意したデータからMapChip構造体を生成する このとき、マップチップの大きさは、引数sizeを使用する collision_tableは、すべてのチップでとして生成する access_tableは、すべての方向でtrueとして設定する

sprite

マップチップが描かれているスプライト

size

マップチップの大きさ(Size構造体)

access_types

アクセス形式の数。0以下の時はMiyakoValueErrorが発生する。省略時は1

返却値

MapChip構造体

Raises:

  • (MiyakoValueErro)

98
99
100
101
102
103
104
105
106
# File 'lib/Miyako/API/map_struct.rb', line 98

def MapChipFactory.create_with_size(sprite, size, access_types = 1)
  raise MiyakoValueErro, "illegal access types! needs >1 : #{access_types}" if access_types < 1
  chip_size = Size.new(size[0], size[1])
  size = Size.new(sprite.w / chip_size.w, sprite.h / chip_size.h)
  chips = size.w * size.h
  ctable = Array.new(access_types){|at| Array.new(chips){|n| Collision.new([0,0,chip_size.w,chip_size.h]) } }
  atable = Array.new(access_types){|at| Array.new(chips){|n| [true] * 8 } }
  return MapChip.new(sprite, chips, size, chip_size, access_types, ctable, atable)
end

.load(csv_filename, use_alpha = true) ⇒ Object

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

csv_filename

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

use_alpha

画像にαチャネルを使うかどうかのフラグ。trueのときは画像のαチャネルを使用、falseのときはカラーキーを使用。デフォルトはtrue

返却値

MapChip構造体


44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/Miyako/API/map_struct.rb', line 44

def MapChipFactory.load(csv_filename, use_alpha = true)
  raise MiyakoIOError.no_file(csv_filename) unless File.exist?(csv_filename)
  lines = CSV.read(csv_filename)
  raise MiyakoFileFormatError, "This file is not Miyako Map Chip file! : #{csv_filename}" unless lines.shift[0] == "Miyako Mapchip"
  spr = use_alpha ? Sprite.new({:filename => lines.shift[0], :type => :alpha_channel}) : Sprite.new({:file_name => lines.shift[0], :type => :color_key})
  tmp = lines.shift
  chip_size = Size.new(tmp[0].to_i, tmp[1].to_i)
  size = Size.new(spr.w / chip_size.w, spr.h / chip_size.h)
  chips = size.w * size.h
  access_types = lines.shift[0].to_i
  collision_table = Array.new(access_types){|at|
    Array.new(chips){|n| Collision.new(lines.shift.map{|s| s.to_i}) }
  }
  access_table = Array.new(access_types){|at|
    Array.new(chips){|n|
      lines.shift.map{|s|
        v = eval(s)
        next v if (v == true || v == false)
        v = v.to_i
        next false if v == 0
        true
      }
    }
  }
  return MapChip.new(spr, chips, size, chip_size, access_types, collision_table, access_table)
end

.not_access_tableObject

完全に移動不可なAccessTableを作成

要素がすべてfalseの配列を生成する

返却値

生成した配列


118
119
120
# File 'lib/Miyako/API/map_struct.rb', line 118

def MapChipFactory.not_access_table
  [false] * 8
end