cyross-ruby-miyako 2.0.5.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. data/README +1092 -929
  2. data/Rakefile +7 -7
  3. data/defines.h +144 -144
  4. data/extern.h +29 -29
  5. data/install_miyako.rb +87 -87
  6. data/lib/Miyako/API/audio.rb +572 -198
  7. data/lib/Miyako/API/basic_data.rb +825 -573
  8. data/lib/Miyako/API/bitmap.rb +534 -507
  9. data/lib/Miyako/API/choices.rb +481 -475
  10. data/lib/Miyako/API/collision.rb +486 -460
  11. data/lib/Miyako/API/diagram.rb +586 -561
  12. data/lib/Miyako/API/drawing.rb +151 -151
  13. data/lib/Miyako/API/exceptions.rb +105 -0
  14. data/lib/Miyako/API/fixedmap.rb +462 -428
  15. data/lib/Miyako/API/font.rb +430 -403
  16. data/lib/Miyako/API/input.rb +456 -447
  17. data/lib/Miyako/API/layout.rb +636 -433
  18. data/lib/Miyako/API/map.rb +583 -529
  19. data/lib/Miyako/API/map_event.rb +222 -198
  20. data/lib/Miyako/API/modules.rb +357 -109
  21. data/lib/Miyako/API/movie.rb +166 -154
  22. data/lib/Miyako/API/parts.rb +276 -189
  23. data/lib/Miyako/API/plane.rb +205 -166
  24. data/lib/Miyako/API/screen.rb +341 -325
  25. data/lib/Miyako/API/shape.rb +443 -443
  26. data/lib/Miyako/API/sprite.rb +771 -752
  27. data/lib/Miyako/API/sprite_animation.rb +490 -481
  28. data/lib/Miyako/API/sprite_list.rb +1135 -0
  29. data/lib/Miyako/API/spriteunit.rb +168 -147
  30. data/lib/Miyako/API/story.rb +350 -300
  31. data/lib/Miyako/API/textbox.rb +770 -725
  32. data/lib/Miyako/API/utility.rb +419 -388
  33. data/lib/Miyako/API/viewport.rb +189 -139
  34. data/lib/Miyako/API/yuki.rb +1226 -996
  35. data/lib/Miyako/EXT/miyako_cairo.rb +62 -62
  36. data/lib/Miyako/EXT/raster_scroll.rb +138 -138
  37. data/lib/Miyako/EXT/slides.rb +157 -157
  38. data/lib/Miyako/miyako.rb +201 -171
  39. data/lib/Miyako/miyako_require_only.rb +35 -0
  40. data/miyako_basicdata.c +590 -590
  41. data/miyako_bitmap.c +1225 -1225
  42. data/miyako_collision.c +403 -403
  43. data/miyako_drawing.c +187 -187
  44. data/miyako_font.c +334 -334
  45. data/miyako_hsv.c +830 -830
  46. data/miyako_input_audio.c +254 -0
  47. data/miyako_layout.c +191 -191
  48. data/miyako_no_katana.c +1078 -1074
  49. data/miyako_sprite2.c +431 -0
  50. data/miyako_transform.c +438 -438
  51. data/miyako_utility.c +288 -288
  52. data/sample/Animation1/m1ku.rb +68 -68
  53. data/sample/Animation2/lex.rb +96 -96
  54. data/sample/Diagram_sample/diagram_sample_yuki2.rb +328 -386
  55. data/sample/Room3/blue.rb +297 -297
  56. data/sample/Room3/ending.rb +180 -180
  57. data/sample/Room3/green.rb +220 -220
  58. data/sample/Room3/main.rb +119 -119
  59. data/sample/Room3/main_component.rb +59 -59
  60. data/sample/Room3/red.rb +227 -227
  61. data/sample/Room3/room3.rb +25 -27
  62. data/sample/Room3/title.rb +184 -184
  63. data/sample/ball_action_sample.rb +204 -204
  64. data/sample/blit_rop.rb +70 -70
  65. data/sample/cairo_sample.rb +25 -25
  66. data/sample/circle_collision_test.rb +66 -66
  67. data/sample/collision_test.rb +33 -33
  68. data/sample/collision_test2.rb +108 -108
  69. data/sample/fixed_map_test/fixed_map_sample.rb +140 -140
  70. data/sample/fixed_map_test/readme.txt +72 -72
  71. data/sample/map_test/chara.rb +58 -58
  72. data/sample/map_test/main_parts.rb +69 -69
  73. data/sample/map_test/main_scene.rb +153 -153
  74. data/sample/map_test/map_manager.rb +75 -75
  75. data/sample/map_test/map_test.rb +23 -23
  76. data/sample/map_test/oasis.rb +71 -71
  77. data/sample/map_test/readme.txt +89 -89
  78. data/sample/map_test/route.rb +157 -157
  79. data/sample/map_test/town.rb +74 -74
  80. data/sample/polygon_test.rb +35 -35
  81. data/sample/rasterscroll.rb +24 -24
  82. data/sample/takahashi.rb +42 -42
  83. data/sample/textbox_sample.rb +189 -189
  84. data/sample/transform.rb +54 -54
  85. data/sample/utility_test.rb +73 -73
  86. data/sample/utility_test2.rb +61 -61
  87. data/sample/utility_test3.rb +64 -64
  88. data/sample/utility_test4.rb +73 -73
  89. data/uninstall_miyako.rb +19 -19
  90. data/win/miyako_no_katana.so +0 -0
  91. metadata +7 -2
@@ -1,69 +1,69 @@
1
- # -*- encoding: utf-8 -*-
2
- #共通パーツクラス
3
- class CommonParts
4
- include Singleton
5
-
6
- attr_reader :box, :cbox
7
- attr_accessor :executing
8
-
9
- def initialize
10
- # create window
11
- font = Font.sans_serif
12
- font.size = 24
13
-
14
- cfont = Font.sans_serif
15
- cfont.size = 16
16
-
17
- wcs = Sprite.new({:file => "wait_cursor.png", :type => :ac})
18
- wcs.oh = wcs.w
19
- scs = Sprite.new({:file => "cursor.png", :type => :ac})
20
- scs.oh = scs.w
21
-
22
- wc = SpriteAnimation.new({:sprite => wcs, :wait => 0.2, :pattern_list => [0, 1, 2, 3, 2, 1]})
23
- sc = SpriteAnimation.new({:sprite => scs, :wait => 0.2, :pattern_list => [0, 1, 2, 3, 2, 1]})
24
- tb = TextBox.new({:size => [20, 4], :font => font, :wait_cursor => wc, :select_cursor => sc})
25
- tb.set_wait_cursor_position{|wc, tbox| wc.right.bottom }
26
-
27
- wc = SpriteAnimation.new({:sprite => wcs, :wait => 0.2, :pattern_list => [0, 1, 2, 3, 2, 1]})
28
- sc = SpriteAnimation.new({:sprite => scs, :wait => 0.2, :pattern_list => [0, 1, 2, 3, 2, 1]})
29
- cb = TextBox.new({:size => [8, 8], :font => cfont, :wait_cursor => wc, :select_cursor => sc})
30
-
31
- bg = Sprite.new({:size=>tb.size, :type=>:ac})
32
- bg.fill([0,0,255,64])
33
-
34
- cbg = Sprite.new({:size=>cb.size, :type=>:ac})
35
- cbg.fill([0,255,0,64])
36
-
37
- @box = Parts.new(bg.size)
38
- @box[:bg] = bg
39
- @box[:box] = tb
40
- @box.center.bottom{|body| wc.oh }
41
-
42
- @cbox = Parts.new(cbg.size)
43
- @cbox[:bg] = cbg
44
- @cbox[:box] = cb
45
- @cbox.right{|body| 2.percent(body) }.top{|body| 2.percent(body) }
46
-
47
- @executing = false
48
- end
49
-
50
- def start
51
- @box.start
52
- @cbox.start
53
- end
54
-
55
- def stop
56
- @box.stop
57
- @cbox.stop
58
- end
59
-
60
- def reset
61
- @box.reset
62
- @cbox.reset
63
- end
64
-
65
- def update_animation
66
- @box.update_animation
67
- @cbox.update_animation
68
- end
69
- end
1
+ # -*- encoding: utf-8 -*-
2
+ #共通パーツクラス
3
+ class CommonParts
4
+ include Singleton
5
+
6
+ attr_reader :box, :cbox
7
+ attr_accessor :executing
8
+
9
+ def initialize
10
+ # create window
11
+ font = Font.sans_serif
12
+ font.size = 24
13
+
14
+ cfont = Font.sans_serif
15
+ cfont.size = 16
16
+
17
+ wcs = Sprite.new({:file => "wait_cursor.png", :type => :ac})
18
+ wcs.oh = wcs.w
19
+ scs = Sprite.new({:file => "cursor.png", :type => :ac})
20
+ scs.oh = scs.w
21
+
22
+ wc = SpriteAnimation.new({:sprite => wcs, :wait => 0.2, :pattern_list => [0, 1, 2, 3, 2, 1]})
23
+ sc = SpriteAnimation.new({:sprite => scs, :wait => 0.2, :pattern_list => [0, 1, 2, 3, 2, 1]})
24
+ tb = TextBox.new({:size => [20, 4], :font => font, :wait_cursor => wc, :select_cursor => sc})
25
+ tb.set_wait_cursor_position{|wc, tbox| wc.right!.bottom! }
26
+
27
+ wc = SpriteAnimation.new({:sprite => wcs, :wait => 0.2, :pattern_list => [0, 1, 2, 3, 2, 1]})
28
+ sc = SpriteAnimation.new({:sprite => scs, :wait => 0.2, :pattern_list => [0, 1, 2, 3, 2, 1]})
29
+ cb = TextBox.new({:size => [8, 8], :font => cfont, :wait_cursor => wc, :select_cursor => sc})
30
+
31
+ bg = Sprite.new({:size=>tb.size, :type=>:ac})
32
+ bg.fill([0,0,255,64])
33
+
34
+ cbg = Sprite.new({:size=>cb.size, :type=>:ac})
35
+ cbg.fill([0,255,0,64])
36
+
37
+ @box = Parts.new(bg.size)
38
+ @box[:bg] = bg
39
+ @box[:box] = tb
40
+ @box.center!.bottom!{|body| wc.oh }
41
+
42
+ @cbox = Parts.new(cbg.size)
43
+ @cbox[:bg] = cbg
44
+ @cbox[:box] = cb
45
+ @cbox.right!{|body| 2.percent(body) }.top!{|body| 2.percent(body) }
46
+
47
+ @executing = false
48
+ end
49
+
50
+ def start
51
+ @box.start
52
+ @cbox.start
53
+ end
54
+
55
+ def stop
56
+ @box.stop
57
+ @cbox.stop
58
+ end
59
+
60
+ def reset
61
+ @box.reset
62
+ @cbox.reset
63
+ end
64
+
65
+ def update_animation
66
+ @box.update_animation
67
+ @cbox.update_animation
68
+ end
69
+ end
@@ -1,153 +1,153 @@
1
- # -*- encoding: utf-8 -*-
2
- class MainScene
3
- include Story::Scene
4
-
5
- def init
6
- @cnt = 0
7
- @amt = 4
8
- @a = [0,0]
9
- @d = [0,1]
10
-
11
- @map = MapManager.new
12
- @executing_flags = Array.new(@map.events[0].length){|n| false}
13
-
14
- # キャラクタの初期位置を指定([10,10]に位置)
15
- @chr = PChara.new("./chr1.png")
16
- @chr.position.move(@chr.size[0]*10, @chr.size[1]*10)
17
-
18
- # マップの表示開始位置を移動させる
19
- # キャラクタのグラフィックを真ん中に表示させるため、マージン分移動させる
20
- @map.move(*@chr.margin)
21
- # マップの実座標を設定する
22
- @map.move(*@chr.position)
23
-
24
- @parts = CommonParts.instance
25
- #Yukiの初期化
26
- @yuki = Yuki.new
27
- @yuki.select_textbox(@parts.box[:box])
28
- @yuki.select_commandbox(@parts.cbox[:box])
29
- end
30
-
31
- def setup
32
- @map.start
33
- @chr.start
34
- @parts.start
35
- end
36
-
37
- def update
38
- return nil if Input.quit_or_escape?
39
-
40
- @parts.update_animation
41
- @map.update
42
- @chr.update
43
-
44
- # 移動量が残っているときは移動を優先
45
- if @cnt > 0
46
- # 移動後のマップの実座標を計算
47
- @map.move(*@a)
48
- @cnt = @cnt - @amt
49
- elsif @yuki.executing?
50
- @yuki.update
51
- elsif @executing_flags.none?
52
- if Input.pushed_any?(:btn1) || Input.click?(:left)
53
- #1ボタンを押したとき、キャラの立ち位置が、イベントの位置にに重なっていればマップイベントを実行、
54
- #外れていれば、コマンドウィンドウを開く
55
- event_flags = @map.events[0].map{|e| e.met?(collision: @chr.collision, pos: @chr.position)}
56
- if event_flags.none?
57
- #標準のコマンドを表示
58
- @yuki.vars[:now] = @now
59
- @yuki.vars[:talk] = talk
60
- @yuki.vars[:check] = check
61
- @yuki.start_plot(command_plot)
62
- else
63
- #キャラの立ち位置が重なっているイベントを起動
64
- @map.events[0].zip(event_flags){|ef| ef[0].start(@parts) if ef[1]}
65
- end
66
- elsif Input::trigger_any?(:down, :up, :left, :right)
67
- # 0:down 1:left 2:right 3:up
68
- @d = Input::trigger_amount
69
- @d[1] = 0 if @d[0] != 0 && @d[1] != 0 # 移動を横方向優先に
70
- #キャラクタの向きを変更
71
- @chr.turn(@d)
72
- #動けるかどうか判定
73
- #(現在の位置から移動したときに、そこが移動可能なマップチップかどうか判別する)
74
- if @map[0].can_access?(0, :in, @chr.position, @d[0]*@chr.size.w, @d[1]*@chr.size.h)
75
- #移動可能なら、移動量を設定する
76
- @a = @d.map{|d| d * @amt}
77
- @chr.position.move(@d[0]*@map[0].mapchip.chip_size.w, @d[1]*@map[0].mapchip.chip_size.h)
78
- #1フレームごとに一定ピクセル移動する(移動中は操作不可)
79
- @cnt = @d[0] != 0 ? @map[0].mapchip.chip_size.w : @map[0].mapchip.chip_size.h
80
- end
81
- end
82
- end
83
-
84
- # イベントの終了チェック
85
- @map.events[0].zip(@executing_flags){|ef|
86
- if ef[1]
87
- # 2ボタンを押したときにイベントを中止する
88
- if Input.pushed_any?(:btn2)
89
- ef[0].stop
90
- else
91
- ef[0].update(nil, nil, nil)
92
- end
93
- end
94
- }
95
- @executing_flags = @map.events[0].map{|e| e.executing? }
96
-
97
- #コマンド選択の結果、イベントが実行されたときは、結果として@nowを返す
98
- return @now unless @yuki.is_scene?(@yuki.result)
99
- return @yuki.result || @now
100
- end
101
-
102
- def render
103
- @map.render
104
- @map.render_event
105
- @chr.render
106
- @map.render_event_box
107
- if @yuki.executing?
108
- @parts.box.render
109
- @parts.cbox.render if @yuki.selecting?
110
- end
111
- end
112
-
113
- def command_plot
114
- yuki_plot do
115
- command([Yuki::Command.new("話す", "話す", nil, vars[:talk]),
116
- Yuki::Command.new("調べる", "調べる", nil, vars[:check])], vars[:now])
117
- call_plot(select_result) if is_scenario?(select_result)
118
- vars[:now]
119
- end
120
- end
121
- #コマンドウィンドウの「調べる」を選んだときの処理
122
- def check
123
- yuki_plot do
124
- text "あなたは、足下を調べた。"
125
- pause
126
- text "しかし、何も無かった。"
127
- pause
128
- clear
129
- end
130
- end
131
-
132
- #コマンドウィンドウの「話す」を選んだときの処理
133
- def talk
134
- yuki_plot do
135
- text "話をしようとしたが"
136
- cr
137
- text "あなたの周りには誰もいない。"
138
- pause
139
- clear
140
- end
141
- end
142
-
143
- def final
144
- @parts.stop
145
- @map.stop
146
- @chr.stop
147
- end
148
-
149
- def dispose
150
- @map.dispose
151
- @chr.dispose
152
- end
153
- end
1
+ # -*- encoding: utf-8 -*-
2
+ class MainScene
3
+ include Story::Scene
4
+
5
+ def init
6
+ @cnt = 0
7
+ @amt = 4
8
+ @a = [0,0]
9
+ @d = [0,1]
10
+
11
+ @map = MapManager.new
12
+ @executing_flags = Array.new(@map.events[0].length){|n| false}
13
+
14
+ # キャラクタの初期位置を指定([10,10]に位置)
15
+ @chr = PChara.new("./chr1.png")
16
+ @chr.position.move!(@chr.size[0]*10, @chr.size[1]*10)
17
+
18
+ # マップの表示開始位置を移動させる
19
+ # キャラクタのグラフィックを真ん中に表示させるため、マージン分移動させる
20
+ @map.move!(*@chr.margin)
21
+ # マップの実座標を設定する
22
+ @map.move!(*@chr.position)
23
+
24
+ @parts = CommonParts.instance
25
+ #Yukiの初期化
26
+ @yuki = Yuki.new
27
+ @yuki.select_textbox(@parts.box[:box])
28
+ @yuki.select_commandbox(@parts.cbox[:box])
29
+ end
30
+
31
+ def setup
32
+ @map.start
33
+ @chr.start
34
+ @parts.start
35
+ end
36
+
37
+ def update
38
+ return nil if Input.quit_or_escape?
39
+
40
+ @parts.update_animation
41
+ @map.update
42
+ @chr.update
43
+
44
+ # 移動量が残っているときは移動を優先
45
+ if @cnt > 0
46
+ # 移動後のマップの実座標を計算
47
+ @map.move!(*@a)
48
+ @cnt = @cnt - @amt
49
+ elsif @yuki.executing?
50
+ @yuki.update
51
+ elsif @executing_flags.none?
52
+ if Input.pushed_any?(:btn1) || Input.click?(:left)
53
+ #1ボタンを押したとき、キャラの立ち位置が、イベントの位置にに重なっていればマップイベントを実行、
54
+ #外れていれば、コマンドウィンドウを開く
55
+ event_flags = @map.events[0].map{|e| e.met?(collision: @chr.collision, pos: @chr.position)}
56
+ if event_flags.none?
57
+ #標準のコマンドを表示
58
+ @yuki.vars[:now] = @now
59
+ @yuki.vars[:talk] = talk
60
+ @yuki.vars[:check] = check
61
+ @yuki.start_plot(command_plot)
62
+ else
63
+ #キャラの立ち位置が重なっているイベントを起動
64
+ @map.events[0].zip(event_flags){|ef| ef[0].start(@parts) if ef[1]}
65
+ end
66
+ elsif Input::trigger_any?(:down, :up, :left, :right)
67
+ # 0:down 1:left 2:right 3:up
68
+ @d = Input::trigger_amount
69
+ @d[1] = 0 if @d[0] != 0 && @d[1] != 0 # 移動を横方向優先に
70
+ #キャラクタの向きを変更
71
+ @chr.turn(@d)
72
+ #動けるかどうか判定
73
+ #(現在の位置から移動したときに、そこが移動可能なマップチップかどうか判別する)
74
+ if @map[0].can_access?(0, :in, @chr.position, @d[0]*@chr.size.w, @d[1]*@chr.size.h)
75
+ #移動可能なら、移動量を設定する
76
+ @a = @d.map{|d| d * @amt}
77
+ @chr.position.move!(@d[0]*@map[0].mapchip.chip_size.w, @d[1]*@map[0].mapchip.chip_size.h)
78
+ #1フレームごとに一定ピクセル移動する(移動中は操作不可)
79
+ @cnt = @d[0] != 0 ? @map[0].mapchip.chip_size.w : @map[0].mapchip.chip_size.h
80
+ end
81
+ end
82
+ end
83
+
84
+ # イベントの終了チェック
85
+ @map.events[0].zip(@executing_flags){|ef|
86
+ if ef[1]
87
+ # 2ボタンを押したときにイベントを中止する
88
+ if Input.pushed_any?(:btn2)
89
+ ef[0].stop
90
+ else
91
+ ef[0].update(nil, nil, nil)
92
+ end
93
+ end
94
+ }
95
+ @executing_flags = @map.events[0].map{|e| e.executing? }
96
+
97
+ #コマンド選択の結果、イベントが実行されたときは、結果として@nowを返す
98
+ return @now unless @yuki.is_scene?(@yuki.result)
99
+ return @yuki.result || @now
100
+ end
101
+
102
+ def render
103
+ @map.render
104
+ @map.render_event
105
+ @chr.render
106
+ @map.render_event_box
107
+ if @yuki.executing?
108
+ @parts.box.render
109
+ @parts.cbox.render if @yuki.selecting?
110
+ end
111
+ end
112
+
113
+ def command_plot
114
+ yuki_plot do
115
+ command([Yuki::Command.new("話す", "話す", nil, vars[:talk]),
116
+ Yuki::Command.new("調べる", "調べる", nil, vars[:check])], vars[:now])
117
+ call_plot(select_result) if is_scenario?(select_result)
118
+ vars[:now]
119
+ end
120
+ end
121
+ #コマンドウィンドウの「調べる」を選んだときの処理
122
+ def check
123
+ yuki_plot do
124
+ text "あなたは、足下を調べた。"
125
+ pause
126
+ text "しかし、何も無かった。"
127
+ pause
128
+ clear
129
+ end
130
+ end
131
+
132
+ #コマンドウィンドウの「話す」を選んだときの処理
133
+ def talk
134
+ yuki_plot do
135
+ text "話をしようとしたが"
136
+ cr
137
+ text "あなたの周りには誰もいない。"
138
+ pause
139
+ clear
140
+ end
141
+ end
142
+
143
+ def final
144
+ @parts.stop
145
+ @map.stop
146
+ @chr.stop
147
+ end
148
+
149
+ def dispose
150
+ @map.dispose
151
+ @chr.dispose
152
+ end
153
+ end
@@ -1,75 +1,75 @@
1
- # -*- encoding: utf-8 -*-
2
- #�}�b�v�Ǘ��N���X
3
- class MapManager
4
- extend Forwardable
5
-
6
- attr_reader :mapchip
7
-
8
- def initialize
9
- @moving = false
10
-
11
- #�}�b�v�`�b�v�C���X�^���X�̍쐬
12
- @mapchip = MapChipFactory.load("./mapchip.csv")
13
-
14
- #�C�x���g��o�^
15
- em = MapEventManager.new
16
- em.add(3, EventRouteMarker).
17
- add(7, EventRouteMarker2).
18
- add(8, EventTown).
19
- add(16, EventOasis)
20
-
21
- #�}�b�v�̍쐬
22
- @map = Map.new(@mapchip, "./map_layer.csv", em)
23
-
24
- #�C�̃}�b�v�`�b�v��g���A�j���[�V��������摜�ɒu������
25
- @sp = Sprite.new(:file=>"sea.png", :type=>:as)
26
- @sp.oh = @sp.w
27
- @ar = SpriteAnimation.new(:sprite=>@sp, :wait=>0.4)
28
- @map.set_mapchip_base(0, 3, @ar)
29
- end
30
-
31
- def move(dx, dy)
32
- @map.move(dx, dy)
33
- @map.events[0].each{|e| e.move(dx, dy) }
34
- end
35
-
36
- def move_to(x, y)
37
- @map.events[0].each{|e| e.move(x-@map.pos.x, y-@map.pos.y) }
38
- @map.move_to(x, y)
39
- end
40
-
41
- def start
42
- @ar.start
43
- end
44
-
45
- def update
46
- @ar.update_animation
47
- @map.events[0].each{|e| e.update(@map, @map.events, nil) }
48
- end
49
-
50
- def render
51
- @map.render
52
- end
53
-
54
- def render_event
55
- @map.events[0].each{|e| e.render }
56
- end
57
-
58
- def render_event_box
59
- @map.events[0].each{|e| e.render_box }
60
- end
61
-
62
- def stop
63
- @ar.stop
64
- end
65
-
66
- def dispose
67
- @map.dispose
68
- @ar.dispose
69
- @sp.dispose
70
- end
71
-
72
- def_delegators(:@map, :w, :h, :get_code, :get_code_real, :margin, :mapchips, :[])
73
- def_delegators(:@map, :collision?, :meet?, :cover?, :events)
74
- def_delegators(:@mapchip, :collision_table, :access_table)
75
- end
1
+ # -*- encoding: utf-8 -*-
2
+ #�}�b�v�Ǘ��N���X
3
+ class MapManager
4
+ extend Forwardable
5
+
6
+ attr_reader :mapchip
7
+
8
+ def initialize
9
+ @moving = false
10
+
11
+ #�}�b�v�`�b�v�C���X�^���X�̍쐬
12
+ @mapchip = MapChipFactory.load("./mapchip.csv")
13
+
14
+ #�C�x���g��o�^
15
+ em = MapEventManager.new
16
+ em.add(3, EventRouteMarker).
17
+ add(7, EventRouteMarker2).
18
+ add(8, EventTown).
19
+ add(16, EventOasis)
20
+
21
+ #�}�b�v�̍쐬
22
+ @map = Map.new(@mapchip, "./map_layer.csv", em)
23
+
24
+ #�C�̃}�b�v�`�b�v��g���A�j���[�V��������摜�ɒu������
25
+ @sp = Sprite.new(:file=>"sea.png", :type=>:as)
26
+ @sp.oh = @sp.w
27
+ @ar = SpriteAnimation.new(:sprite=>@sp, :wait=>0.4)
28
+ @map.set_mapchip_base(0, 3, @ar)
29
+ end
30
+
31
+ def move!(dx, dy)
32
+ @map.move!(dx, dy)
33
+ @map.events[0].each{|e| e.move!(dx, dy) }
34
+ end
35
+
36
+ def move_to!(x, y)
37
+ @map.events[0].each{|e| e.move!(x-@map.pos.x, y-@map.pos.y) }
38
+ @map.move_to!(x, y)
39
+ end
40
+
41
+ def start
42
+ @ar.start
43
+ end
44
+
45
+ def update
46
+ @ar.update_animation
47
+ @map.events[0].each{|e| e.update(@map, @map.events, nil) }
48
+ end
49
+
50
+ def render
51
+ @map.render
52
+ end
53
+
54
+ def render_event
55
+ @map.events[0].each{|e| e.render }
56
+ end
57
+
58
+ def render_event_box
59
+ @map.events[0].each{|e| e.render_box }
60
+ end
61
+
62
+ def stop
63
+ @ar.stop
64
+ end
65
+
66
+ def dispose
67
+ @map.dispose
68
+ @ar.dispose
69
+ @sp.dispose
70
+ end
71
+
72
+ def_delegators(:@map, :w, :h, :get_code, :get_code_real, :margin, :mapchips, :[])
73
+ def_delegators(:@map, :collision?, :meet?, :cover?, :events)
74
+ def_delegators(:@mapchip, :collision_table, :access_table)
75
+ end