ruby-miyako 2.1.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/README +275 -20
  2. data/extern.h +21 -1
  3. data/install_miyako.rb +5 -3
  4. data/lib/Miyako/API/audio.rb +11 -6
  5. data/lib/Miyako/API/basic_data.rb +0 -985
  6. data/lib/Miyako/API/bitmap.rb +19 -22
  7. data/lib/Miyako/API/choices.rb +203 -69
  8. data/lib/Miyako/API/collision.rb +451 -9
  9. data/lib/Miyako/API/color.rb +177 -0
  10. data/lib/Miyako/API/diagram.rb +18 -20
  11. data/lib/Miyako/API/fixedmap.rb +207 -73
  12. data/lib/Miyako/API/font.rb +111 -18
  13. data/lib/Miyako/API/i_yuki.rb +1201 -0
  14. data/lib/Miyako/API/input.rb +65 -0
  15. data/lib/Miyako/API/layout.rb +41 -29
  16. data/lib/Miyako/API/map.rb +202 -157
  17. data/lib/Miyako/API/map_event.rb +86 -19
  18. data/lib/Miyako/API/map_struct.rb +268 -0
  19. data/lib/Miyako/API/modules.rb +136 -37
  20. data/lib/Miyako/API/movie.rb +8 -8
  21. data/lib/Miyako/API/parts.rb +63 -20
  22. data/lib/Miyako/API/plane.rb +4 -4
  23. data/lib/Miyako/API/screen.rb +16 -8
  24. data/lib/Miyako/API/sprite.rb +290 -23
  25. data/lib/Miyako/API/sprite_animation.rb +23 -11
  26. data/lib/Miyako/API/sprite_list.rb +406 -183
  27. data/lib/Miyako/API/story.rb +4 -65
  28. data/lib/Miyako/API/struct_point.rb +157 -0
  29. data/lib/Miyako/API/struct_rect.rb +233 -0
  30. data/lib/Miyako/API/struct_segment.rb +641 -0
  31. data/lib/Miyako/API/struct_size.rb +158 -0
  32. data/lib/Miyako/API/struct_square.rb +253 -0
  33. data/lib/Miyako/API/textbox.rb +49 -35
  34. data/lib/Miyako/API/viewport.rb +5 -5
  35. data/lib/Miyako/API/wait_counter.rb +350 -0
  36. data/lib/Miyako/API/yuki.rb +95 -60
  37. data/lib/Miyako/EXT/raster_scroll.rb +30 -8
  38. data/lib/Miyako/EXT/slides.rb +6 -6
  39. data/lib/Miyako/miyako.rb +25 -11
  40. data/lib/miyako.rb +28 -0
  41. data/lib/miyako_require_only.rb +35 -0
  42. data/miyako_basicdata.c +201 -17
  43. data/miyako_collision.c +315 -6
  44. data/miyako_diagram.c +331 -0
  45. data/miyako_drawing.c +26 -7
  46. data/miyako_font.c +259 -129
  47. data/miyako_input_audio.c +24 -14
  48. data/miyako_layout.c +106 -8
  49. data/miyako_no_katana.c +398 -171
  50. data/miyako_sprite2.c +275 -38
  51. data/miyako_transform.c +113 -107
  52. data/miyako_utility.c +34 -48
  53. data/miyako_yuki.c +241 -0
  54. data/sample/Diagram_sample/diagram_sample_yuki2.rb +30 -30
  55. data/sample/Room3/blue.rb +19 -19
  56. data/sample/Room3/green.rb +9 -9
  57. data/sample/Room3/main.rb +12 -12
  58. data/sample/Room3/red.rb +12 -12
  59. data/sample/Room3/title.rb +15 -10
  60. data/sample/collision_test2.rb +2 -1
  61. data/sample/fixed_map_test/fixed_map_sample.rb +7 -6
  62. data/sample/map_test/main_scene.rb +12 -10
  63. data/sample/map_test/map_manager.rb +14 -13
  64. data/sample/rasterscroll.rb +5 -5
  65. data/sample/takahashi.rb +3 -3
  66. data/sample/textbox_sample.rb +7 -6
  67. data/sample/transform.rb +2 -1
  68. data/uninstall_miyako.rb +4 -1
  69. data/win/miyako_no_katana.so +0 -0
  70. metadata +15 -4
  71. data/lib/Miyako/EXT/miyako_cairo.rb +0 -62
  72. data/sample/cairo_sample.rb +0 -25
@@ -70,6 +70,10 @@ module Miyako
70
70
  @@num2bsym = [:btn1, :btn2, :btn3, :btn4, :btn5, :btn6,
71
71
  :btn7, :btn8, :btn9, :btn10, :btn11, :btn12]
72
72
 
73
+ @@enable_keyboard = true
74
+ @@enable_joypad = true
75
+ @@enable_mouse = true
76
+
73
77
  def Input::create_btns #:nodoc:
74
78
  return {:btn1 => 0, :btn2 => 0, :btn3 => 0,
75
79
  :btn4 => 0, :btn5 => 0, :btn6 => 0,
@@ -116,21 +120,69 @@ module Miyako
116
120
  @@initialized = true
117
121
  end
118
122
 
123
+ #===キーボードを使用可能にする
124
+ def Input.keyboard_enable
125
+ @@enable_keyboard = true
126
+ end
127
+
128
+ #===キーボードを使用不可にする
129
+ def Input.keyboard_disable
130
+ @@enable_keyboard = false
131
+ end
132
+
133
+ #===キーボードを使用可能かどうか問い合わせる
134
+ def Input.keyboad_enable?
135
+ @@enable_keyboard
136
+ end
137
+
138
+ #===ゲームパッドを使用可能にする
139
+ def Input.joypad_enable
140
+ @@enable_joypad= true
141
+ end
142
+
143
+ #===ゲームパッドを使用不可にする
144
+ def Input.joypad_disable
145
+ @@enable_joypad = false
146
+ end
147
+
148
+ #===ゲームパッドを使用可能かどうか問い合わせる
149
+ def Input.joypad_enable?
150
+ @@enable_joypad
151
+ end
152
+
153
+ #===マウスを使用可能にする
154
+ def Input.mouse_enable
155
+ @@enable_mouse = true
156
+ end
157
+
158
+ #===マウスを使用不可にする
159
+ def Input.mouse_disable
160
+ @@enable_mouse = false
161
+ end
162
+
163
+ #===マウスを使用可能かどうか問い合わせる
164
+ def Input.mouse_enable?
165
+ @@enable_mouse
166
+ end
167
+
119
168
  def Input::process_quit(e) #:nodoc:
120
169
  @@quit = true
121
170
  end
122
171
 
123
172
  def Input::process_keydown(e) #:nodoc:
173
+ return unless @@enable_keyboard
124
174
  set_btn(@@btn2sym[e.sym]) if @@btn2sym.include?(e.sym)
125
175
  @@mods.each{|m| set_btn(@@btn2sym[m]) if e.mod & m == m}
126
176
  end
127
177
 
128
178
  def Input::process_keyup(e) #:nodoc:
179
+ return unless @@enable_keyboard
129
180
  reset_btn(@@btn2sym[e.sym]) if @@btn2sym.include?(e.sym)
130
181
  @@mods.each{|m| reset_btn(@@btn2sym[m]) if e.mod & m == m}
131
182
  end
132
183
 
133
184
  def Input::process_joyaxis(e) #:nodoc:
185
+ return unless @@enable_joypad
134
186
  if e.axis == 0
135
187
  if e.value >= 16384
136
188
  set_btn(:right)
@@ -153,14 +205,17 @@ module Miyako
153
205
  end
154
206
 
155
207
  def Input::process_joybuttondown(e) #:nodoc:
208
+ return unless @@enable_joypad
156
209
  set_btn(@@num2bsym[e.button]) if e.button < BTNS
157
210
  end
158
211
 
159
212
  def Input::process_joybuttonup(e) #:nodoc:
213
+ return unless @@enable_joypad
160
214
  reset_btn(@@num2bsym[e.button]) if e.button < BTNS
161
215
  end
162
216
 
163
217
  def Input::process_mousemotion(e) #:nodoc:
218
+ return unless @@enable_mouse
164
219
  @@mouse[:pos][:x] = e.x
165
220
  @@mouse[:pos][:y] = e.y
166
221
  @@mouse[:pos][:dx] = e.xrel
@@ -168,6 +223,7 @@ module Miyako
168
223
  end
169
224
 
170
225
  def Input::process_mousebuttondown(e) #:nodoc:
226
+ return unless @@enable_mouse
171
227
  set_mouse_button(:trigger, e.button)
172
228
  return unless @@mouse[:inner]
173
229
  click_mouse_button(:click, e.button)
@@ -178,6 +234,7 @@ module Miyako
178
234
  end
179
235
 
180
236
  def Input::process_mousebuttonup(e) #:nodoc:
237
+ return unless @@enable_mouse
181
238
  reset_mouse_button(:trigger, e.button)
182
239
  click_interval = SDL.getTicks - @@click_start_tick
183
240
  if click_interval < @@mouse[:click][:interval]
@@ -192,6 +249,7 @@ module Miyako
192
249
  end
193
250
 
194
251
  def Input::process_active(e) #:nodoc:
252
+ return unless @@enable_mouse
195
253
  @@mouse[:inner] = e.gain if e.state == 1
196
254
  end
197
255
 
@@ -352,6 +410,7 @@ module Miyako
352
410
  #原点は、画面領域の左上を{:x=>0,:y=>0}とする
353
411
  #返却値:: マウスカーソルの位置を示すPoint構造体
354
412
  def Input::get_mouse_position
413
+ return Point.new(-1,-1) unless @@enable_mouse
355
414
  return Point.new(@@mouse[:pos][:x],@@mouse[:pos][:y])
356
415
  end
357
416
 
@@ -360,6 +419,7 @@ module Miyako
360
419
  #移動量は、右下方向を正とする
361
420
  #返却値:: マウスカーソルの移動量を示すSize構造体
362
421
  def Input::get_mouse_amount
422
+ return Size.new(0,0) unless @@enable_mouse
363
423
  return Size.new(@@mouse[:pos][:dx],@@mouse[:pos][:dy])
364
424
  end
365
425
 
@@ -375,6 +435,7 @@ module Miyako
375
435
  #_btn_:: 問い合わせるボタンを示すシンボル(可変個)
376
436
  #返却値:: ボタンが押されていれば true を返す
377
437
  def Input::click?(btn)
438
+ return false unless @@enable_mouse
378
439
  btns = (btn == :any ? [:left, :middle, :right] : [btn])
379
440
  ret = btns.inject(false){|r, f| r |= @@mouse[:click][f]}
380
441
  return ret
@@ -391,6 +452,7 @@ module Miyako
391
452
  #_btn_:: 問い合わせるボタンを示すシンボル(可変個)
392
453
  #返却値:: ボタンが押されていれば true を返す
393
454
  def Input::mouse_trigger?(btn)
455
+ return false unless @@enable_mouse
394
456
  return btn == :any ? (@@mouse[:trigger][:left] || @@mouse[:trigger][:middle] || @@mouse[:trigger][:right]) : @@mouse[:trigger][btn]
395
457
  end
396
458
 
@@ -406,6 +468,7 @@ module Miyako
406
468
  #_btn_:: 問い合わせるボタンを示すシンボル(可変個)
407
469
  #返却値:: ドラッグアンドドロップが成功していれば、true を返す
408
470
  def Input::drag_and_drop?(btn)
471
+ return false unless @@enable_mouse
409
472
  return @@mouse[:drop][:succeed] && (btn == :any ? (@@mouse[:drop][:left] || @@mouse[:drop][:middle] || @@mouse[:drop][:right]) : @@mouse[:click][btn])
410
473
  end
411
474
 
@@ -414,6 +477,7 @@ module Miyako
414
477
  #{:drag_x => ドラッグが行われた x 座標, :drag_y => ドラッグが行われた y 座標, :drop_x => ドロップが行われた x 座業, :drop_y => ドロップが行われた y 座標}
415
478
  #返却値:: ドラッグアンドドロップが成功していれば、移動範囲を示すハッシュ、失敗していれば nil を返す
416
479
  def Input::get_drag_and_drop_range
480
+ return nil unless @@enable_mouse
417
481
  return @@mouse[:drop][:succeed] ? {:drag_x => @@mouse[:drag][:x], :drag_y => @@mouse[:drag][:y], :drop_x => @@mouse[:pos][:x], :drop_y => @@mouse[:pos][:y]} : nil
418
482
  end
419
483
 
@@ -434,6 +498,7 @@ module Miyako
434
498
  #===マウスカーソルが画面の内側に有るかどうかを問い合わせる
435
499
  #返却値:: マウスカーソルが画面内ならtrueを返す
436
500
  def Input::mouse_cursor_inner?
501
+ return false unless @@enable_mouse
437
502
  return @@mouse[:inner]
438
503
  end
439
504
 
@@ -275,7 +275,7 @@ module Miyako
275
275
  middle!
276
276
  return self
277
277
  end
278
-
278
+
279
279
  #===mixinしたインスタンスの位置を左端(x軸)に移動させたときの位置を返す
280
280
  #但し、移動したときの位置を返すだけで、自身の位置は変わらない
281
281
  #基準となる空間の内側に設置されたとして算出する
@@ -445,27 +445,21 @@ module Miyako
445
445
  #=== mixin されたインスタンスの位置情報(x,yの値)を取得する
446
446
  #返却値:: インスタンスの位置情報(@layout[:pos]の値)
447
447
  def pos
448
- return @layout.pos.dup
448
+ return @layout.pos
449
449
  end
450
-
450
+
451
+ #alias: layout_pos: posメソッドの別名。mixinのときに、posメソッドが再定義された場合に使う
452
+ alias :layout_pos :pos
453
+
451
454
  #=== mixin されたインスタンスのサイズ情報(w,hの値)を取得する
452
455
  #返却値:: インスタンスのサイズ情報(@layout[:size]の値)
453
456
  def size
454
- return @layout.size.dup
455
- end
456
-
457
- #=== mixin されたインスタンスの表示上の幅を取得する
458
- #返却値:: インスタンスの幅(@layout[:size][0]の値)
459
- def ow
460
- return @layout.size[0]
461
- end
462
-
463
- #=== mixin されたインスタンスの表示上の高さを取得する
464
- #返却値:: インスタンスの高さ(@layout[:size][0]の値)
465
- def oh
466
- return @layout.size[1]
457
+ return @layout.size
467
458
  end
468
459
 
460
+ #alias: layout_size: sizeメソッドの別名。mixinのときに、sizeメソッドが再定義された場合に使う
461
+ alias :layout_size :size
462
+
469
463
  #===インスタンスのサイズをレイアウト情報に反映させる
470
464
  #このメソッドが呼び出されると、スナップ先のインスタンスの位置情報がリセットされることに注意
471
465
  #_w_:: インスタンスの幅(たとえば、Sprite#ow の値)
@@ -492,6 +486,12 @@ module Miyako
492
486
  return Rect.new(@layout.pos[0], @layout.pos[1], @layout.size[0], @layout.size[1])
493
487
  end
494
488
 
489
+ #===領域の最大矩形を取得するメソッドのテンプレート
490
+ #返却値:: Rect構造体インスタンス(デフォルトはnil)
491
+ def broad_rect
492
+ return self.rect
493
+ end
494
+
495
495
  #===インスタンスのレイアウトを指定の別のインスタンスに依存(スナップ)させる
496
496
  #引数 spr で指定したインスタンスのレイアウト情報は、レシーバのレイアウト情報に依存した位置情報を算出される
497
497
  #デフォルトでは、画面にスナップされている状態になっている
@@ -506,7 +506,7 @@ module Miyako
506
506
  @layout.base = @layout.snap.sprite || Screen
507
507
  return self
508
508
  end
509
-
509
+
510
510
  #===すべてのインスタンスとの依存関係を解消する
511
511
  #このメソッドが呼び出されると、スナップ先のインスタンスの位置情報がリセットされることに注意
512
512
  #返却値:: 自分自身を返す
@@ -516,24 +516,24 @@ module Miyako
516
516
  @layout.snap.children = Array.new
517
517
  return self
518
518
  end
519
-
519
+
520
520
  #===すでに指定したスプライトがスナップ元として登録されているかどうか確認する
521
521
  #返却値:: スナップ元として登録されていればtrue、登録されていなければfalse
522
522
  def include_snap_child?(spr)
523
523
  @layout.snap.children.include?(spr)
524
524
  return self
525
525
  end
526
-
526
+
527
527
  def add_snap_child(spr) #:nodoc:
528
528
  @layout.snap.children << spr unless @layout.snap.children.include?(spr)
529
529
  return self
530
530
  end
531
-
531
+
532
532
  def delete_snap_child(spr) #:nodoc:
533
533
  spr.each{|s| @layout.snap.children.delete(s) }
534
534
  return self
535
535
  end
536
-
536
+
537
537
  def get_snap_children #:nodoc:
538
538
  return @layout.snap.children
539
539
  end
@@ -572,6 +572,14 @@ module Miyako
572
572
  def move_to!(x, y, &block)
573
573
  end
574
574
 
575
+ #===相対座標でインスタンスを指定の位置に移動させる
576
+ #スナップ先の左上位置を[0,0]としたときの座標(相対座標)で、指定の位置に移動する
577
+ #_x_:: 移動後の x 座標の位置
578
+ #_y_:: 移動後の y 座標の位置
579
+ #返却値:: 自分自身を返す
580
+ def relative_move_to!(x, y)
581
+ end
582
+
575
583
  #===インスタンスを指定の移動量で移動させた位置を返す
576
584
  #引数で指定したぶん移動させたときの位置を新しくインスタンスを生成して返す
577
585
  #自分自身の位置は変わらない
@@ -594,6 +602,17 @@ module Miyako
594
602
  ret.move_to!(x,y)
595
603
  end
596
604
 
605
+ #===相対座標でインスタンスを指定の位置に移動させた位置を返す
606
+ #スナップ先の左上位置を[0,0]としたときの座標(相対座標)で、指定の位置に移動したときの
607
+ #位置を新しくインスタンスを生成して返す
608
+ #_x_:: 移動後の x 座標の位置
609
+ #_y_:: 移動後の y 座標の位置
610
+ #返却値:: 更新後の位置を設定したインスタンス(Size構造体)
611
+ def relative_move_to(x, y)
612
+ bpos = @layout.base.pos
613
+ Point.new(bpos.x+x,bpos.y+y)
614
+ end
615
+
597
616
  #===Segment構造体を生成する
598
617
  # 生成される線分は、x方向が[pos.x,pos.x+ow-1]、y方向が[pos.y,pos.y+oh-1]となる
599
618
  #返却値:: 生成したSegments構造体インスタンス
@@ -624,18 +643,11 @@ module Miyako
624
643
  init_layout
625
644
  set_layout_size(*(size.to_a))
626
645
  end
627
-
646
+
628
647
  def initialize_copy(obj) #:nodoc:
629
648
  copy_layout
630
649
  end
631
650
 
632
- #===現在の画面の最大の大きさを矩形で取得する
633
- #但し、LayoutSpaceの場合は最大の大きさ=スプライトの大きさなので、rectと同じ値が得られる
634
- #返却値:: 生成された矩形(Rect構造体のインスタンス)
635
- def broad_rect
636
- return self.rect
637
- end
638
-
639
651
  #===インスタンスを解放させる
640
652
  def dispose
641
653
  layout_dispose