cyross-ruby-miyako 2.0.0 → 2.0.5.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 (102) hide show
  1. data/README +106 -154
  2. data/defines.h +144 -0
  3. data/{miyako_no_katana/extconf.rb → extconf.rb} +10 -0
  4. data/extern.h +29 -0
  5. data/install_miyako.rb +26 -14
  6. data/lib/Miyako/API/audio.rb +2 -2
  7. data/lib/Miyako/API/basic_data.rb +183 -41
  8. data/lib/Miyako/API/bitmap.rb +474 -2
  9. data/lib/Miyako/API/choices.rb +215 -48
  10. data/lib/Miyako/API/collision.rb +267 -251
  11. data/lib/Miyako/API/diagram.rb +58 -70
  12. data/lib/Miyako/API/drawing.rb +93 -52
  13. data/lib/Miyako/API/fixedmap.rb +233 -120
  14. data/lib/Miyako/API/font.rb +59 -40
  15. data/lib/Miyako/API/input.rb +34 -27
  16. data/lib/Miyako/API/layout.rb +154 -172
  17. data/lib/Miyako/API/map.rb +285 -159
  18. data/lib/Miyako/API/map_event.rb +4 -4
  19. data/lib/Miyako/API/modules.rb +1 -1
  20. data/lib/Miyako/API/movie.rb +8 -5
  21. data/lib/Miyako/API/parts.rb +44 -9
  22. data/lib/Miyako/API/plane.rb +37 -2
  23. data/lib/Miyako/API/screen.rb +90 -22
  24. data/lib/Miyako/API/shape.rb +118 -37
  25. data/lib/Miyako/API/sprite.rb +475 -61
  26. data/lib/Miyako/API/sprite_animation.rb +83 -63
  27. data/lib/Miyako/API/spriteunit.rb +47 -13
  28. data/lib/Miyako/API/story.rb +123 -47
  29. data/lib/Miyako/API/textbox.rb +361 -132
  30. data/lib/Miyako/API/utility.rb +388 -0
  31. data/lib/Miyako/API/viewport.rb +54 -349
  32. data/lib/Miyako/API/yuki.rb +570 -353
  33. data/lib/Miyako/EXT/miyako_cairo.rb +5 -3
  34. data/lib/Miyako/EXT/slides.rb +22 -1
  35. data/lib/Miyako/miyako.rb +12 -13
  36. data/logo/EGSR_logo.png +0 -0
  37. data/logo/EGSR_logo_bg.png +0 -0
  38. data/logo/EGSR_logo_fg.png +0 -0
  39. data/logo/EGSR_title_banner.png +0 -0
  40. data/logo/EGSR_title_logo.png +0 -0
  41. data/logo/miyako.png +0 -0
  42. data/logo/miyako_banner.png +0 -0
  43. data/logo/space.png +0 -0
  44. data/miyako_basicdata.c +590 -0
  45. data/miyako_bitmap.c +1225 -0
  46. data/miyako_collision.c +403 -0
  47. data/miyako_drawing.c +187 -0
  48. data/miyako_font.c +334 -0
  49. data/miyako_hsv.c +830 -0
  50. data/miyako_layout.c +191 -0
  51. data/miyako_no_katana.c +1074 -0
  52. data/miyako_transform.c +438 -0
  53. data/miyako_utility.c +288 -0
  54. data/sample/Animation1/m1ku.rb +10 -31
  55. data/sample/Animation1/readme.txt +6 -6
  56. data/sample/Animation2/lex.rb +1 -0
  57. data/sample/Animation2/readme.txt +6 -6
  58. data/sample/Diagram_sample/diagram_sample_yuki2.rb +152 -48
  59. data/sample/Diagram_sample/readme.txt +9 -6
  60. data/sample/Room3/blue.rb +234 -187
  61. data/sample/Room3/ending.rb +68 -63
  62. data/sample/Room3/green.rb +159 -124
  63. data/sample/Room3/main.rb +50 -32
  64. data/sample/Room3/main_component.rb +3 -2
  65. data/sample/Room3/readme.txt +6 -6
  66. data/sample/Room3/red.rb +161 -134
  67. data/sample/Room3/room3.rb +1 -0
  68. data/sample/Room3/title.rb +75 -62
  69. data/sample/ball_action_sample.rb +204 -0
  70. data/sample/blit_rop.rb +70 -0
  71. data/sample/cairo_sample.rb +25 -0
  72. data/sample/circle_collision_test.rb +66 -0
  73. data/sample/collision_test.rb +33 -0
  74. data/sample/collision_test2.rb +108 -0
  75. data/sample/fixed_map_test/fixed_map_sample.rb +23 -32
  76. data/sample/fixed_map_test/readme.txt +38 -38
  77. data/sample/map_test/chara.rb +17 -9
  78. data/sample/map_test/main_parts.rb +30 -9
  79. data/sample/map_test/main_scene.rb +57 -41
  80. data/sample/map_test/map_manager.rb +13 -30
  81. data/sample/map_test/map_test.rb +2 -2
  82. data/sample/map_test/oasis.rb +17 -11
  83. data/sample/map_test/readme.txt +50 -48
  84. data/sample/map_test/route.rb +46 -33
  85. data/sample/map_test/town.rb +19 -13
  86. data/sample/polygon_test.rb +35 -0
  87. data/sample/rasterscroll.rb +25 -0
  88. data/sample/takahashi.rb +42 -0
  89. data/sample/text.png +0 -0
  90. data/sample/textbox_sample.rb +190 -0
  91. data/sample/transform.rb +54 -0
  92. data/sample/utility_test.rb +73 -0
  93. data/sample/utility_test2.rb +61 -0
  94. data/sample/utility_test3.rb +64 -0
  95. data/sample/utility_test4.rb +73 -0
  96. data/uninstall_miyako.rb +19 -0
  97. data/win/miyako_no_katana.so +0 -0
  98. metadata +165 -148
  99. data/miyako.png +0 -0
  100. data/miyako_banner.png +0 -0
  101. data/miyako_no_katana/miyako_no_katana.c +0 -3301
  102. data/sample/fixed_map_test/map_sample.rb +0 -121
@@ -2,7 +2,7 @@
2
2
  =begin
3
3
  --
4
4
  Miyako v2.0
5
- Copyright (C) 2007-2008 Cyross Makoto
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
6
 
7
7
  This library is free software; you can redistribute it and/or
8
8
  modify it under the terms of the GNU Lesser General Public
@@ -20,8 +20,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
20
  ++
21
21
  =end
22
22
 
23
- require 'thread'
24
-
25
23
  module Miyako
26
24
  #==遷移図モジュール群
27
25
  module Diagram
@@ -67,12 +65,14 @@ module Miyako
67
65
  #===ノードでの入力デバイス処理を実装する
68
66
  #入力デバイス処理が必要ないときは、本メソッドを実装する必要はない
69
67
  #Processor#update_input メソッドが呼ばれたときの処理を実装する
70
- def update_input
68
+ #_params_:: Processor::update_inputメソッドが呼ばれた時のパラメータ群。オーバーライドするときに省略可能
69
+ def update_input(*params)
71
70
  end
72
71
 
73
72
  #===ノードでの更新処理を実装する
74
73
  #Processor#update メソッドが呼ばれたときの処理を実装する
75
- def update
74
+ #_params_:: Processor::updateメソッドが呼ばれた時のパラメータ群。オーバーライドするときに省略可能
75
+ def update(*params)
76
76
  end
77
77
 
78
78
  #===ノードでの入力デバイス処理の後始末を実装する
@@ -188,9 +188,9 @@ module Miyako
188
188
  end
189
189
 
190
190
  #==遷移図クラス本体
191
- #但し、実質的にメソッドを呼び出すのはDiagramFacadeクラスから呼び出す
191
+ #但し、実質的にメソッドを呼び出すのはManagerクラスから呼び出す
192
192
  class DiagramBody
193
- attr_reader :name #:nodoc:
193
+ attr_reader :name, :node #:nodoc:
194
194
  TRIGGER_TYPES=[:immediate, :next]
195
195
 
196
196
  def initialize(name, body, trigger = nil) #:nodoc:
@@ -223,13 +223,13 @@ module Miyako
223
223
  @node.resume
224
224
  end
225
225
 
226
- def update_input #:nodoc:
227
- @node.update_input
226
+ def update_input(*params) #:nodoc:
227
+ @node.update_input(*params)
228
228
  end
229
229
 
230
- def update #:nodoc:
230
+ def update(*params) #:nodoc:
231
231
  if @trigger.update?
232
- @node.update
232
+ @node.update(*params)
233
233
  @trigger.post_update
234
234
  @node.reset_input
235
235
  if @next_trigger
@@ -301,6 +301,8 @@ module Miyako
301
301
  end
302
302
 
303
303
  #===遷移図にノードを追加する
304
+ #状態遷移図のノードに対応するオブジェクト(NodeBaseモジュールをmixinしたクラス)を登録する
305
+ #名前が重複している場合は、後に登録したノードが採用される。
304
306
  #_name_:: ノード名。文字列かシンボルを使用
305
307
  #_body_:: ノード本体。DiagramNodeBase モジュールを mixin したクラスのインスタンス
306
308
  #_trigger_:: NodeTriggerBase モジュールを mixin したクラスのインスタンス。デフォルトは NpdeTrogger クラスのインスタンス
@@ -312,8 +314,15 @@ module Miyako
312
314
  end
313
315
 
314
316
  #===ノード間移動のアローを追加する
315
- #trigger のブロックを実行した結果、true のときは、to_name で示したノードへ移動する。
316
- #false のときは、ノード間移動をせずに直前に実行したノードを再実行する
317
+ #移動元ノードと移動先ノードの名前を指定し、条件にかなえばノードを移動する矢印を設定する。
318
+ #Processor#updateメソッドを呼び出した時、移動条件を確認して移動するかどうかを判断する。
319
+ #デフォルトでは、ノードのfinish?メソッドがtrueのときにto_nameで示したノードへ移動する。
320
+ #結果がfalse のときは、from_nameで示したノードを継続して使用する(stopメソッドは呼ばれない)。
321
+ #また、引数が一つのブロックを渡すことができる。
322
+ #引数には、現在評価中のノード(from_nameで示したノードのインスタンス)が渡される。
323
+ #評価の結果、true のときは、to_name で示したノードへ移動する。
324
+ #結果がfalse のときは、from_nameで示したノードを継続して使用する(stopメソッドは呼ばれない)。
325
+ #同じ移動元のアローが複数登録されているときは、先に登録したノードの移動条件を確認する。
317
326
  #_from_name_:: 移動元ノード名。文字列かシンボルを使用
318
327
  #_to_name_:: 移動先ノード名。文字列かシンボルを使用
319
328
  #_trigger_:: ノード間移動するかどうかを返すブロック。ブロックは引数を一つ取る(from_name で示したノードのインスタンス)
@@ -347,14 +356,18 @@ module Miyako
347
356
  @ptr = @first
348
357
  end
349
358
 
350
- def now #:nodoc
359
+ def now #:nodoc:
351
360
  return @ptr ? @ptr.name : nil
352
361
  end
353
362
 
354
- def now_node #:nodoc
355
- return @ptr
363
+ def now_node #:nodoc:
364
+ return @ptr ? @ptr.node : nil
356
365
  end
357
366
 
367
+ def nodes
368
+ return @name2idx.keys
369
+ end
370
+
358
371
  def start #:nodoc:
359
372
  @ptr = @first unless @ptr
360
373
  return unless @ptr
@@ -376,13 +389,13 @@ module Miyako
376
389
  @ptr.resume if @ptr
377
390
  end
378
391
 
379
- def update_input #:nodoc:
380
- @ptr.update_input if @ptr
392
+ def update_input(*params) #:nodoc:
393
+ @ptr.update_input(*params) if @ptr
381
394
  end
382
395
 
383
- def update #:nodoc:
396
+ def update(*params) #:nodoc:
384
397
  return unless @ptr
385
- @ptr.update
398
+ @ptr.update(*params)
386
399
  nxt = @ptr.go_next
387
400
  unless @ptr.equal?(nxt)
388
401
  @ptr.stop
@@ -411,13 +424,18 @@ module Miyako
411
424
  #Processor#render メソッドのみを呼び出せる
412
425
  #インスタンス生成は、Processor#renderer メソッドを呼び出して行う
413
426
  class Renderer
427
+ attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
428
+
414
429
  def initialize(obj) #:nodoc:
415
430
  @renderer = obj
431
+ @visible = true
416
432
  end
417
433
 
418
434
  #===レンダリングを行う
419
435
  #Processor#render メソッドを呼び出す
436
+ #visibleメソッドの値がfalseのときは描画されない。
420
437
  def render
438
+ return unless @visible
421
439
  @renderer.call
422
440
  end
423
441
  end
@@ -427,94 +445,72 @@ module Miyako
427
445
  class Processor
428
446
  #遷移図本体。Manager クラスのインスタンス
429
447
  attr_reader :diagram
448
+ attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
430
449
 
431
450
  #===インスタンスを生成する
432
451
  #遷移図形式のインスタンス群を生成する
433
452
  #ブロックを必ず取り(取らないとエラー)、ブロック内では、遷移図の構成を実装する
434
453
  #(Manager#add, Manager#add_arrow の各メソッドを参照)
435
- #_sync_:: 同期実行かどうかを示すフラグ。同期実行(明示的にupdateメソッドを呼び出す)のときは true 、非同期実行の場合は false を渡す(デフォルトは false )
436
454
  #返却値:: 生成されたインスタンス
437
- def initialize(sync=false)
455
+ def initialize
438
456
  @loop = self.method(:main_loop)
439
457
  @states = {:execute => false, :pause => false, :type1 => false }
440
- @thread = nil
441
- @mutex = Mutex.new
442
458
  @diagram = Miyako::Diagram::Manager.new
443
- @sync = sync
459
+ @visible = true
444
460
  yield @diagram if block_given?
445
461
  end
446
462
 
447
- #===同期実行かどうかの問い合わせメソッド
448
- #返却値: 同期実行のときはtrue
449
- def sync?
450
- return @sync
451
- end
452
-
453
463
  #===遷移図形式の処理を開始する
454
464
  def start
455
465
  return if @states[:execute]
456
- @mutex.lock unless @sync
466
+ @diagram.start
457
467
  @states[:execute] = true
458
- unless @sync
459
- @mutex.unlock
460
- @thread = Thread.new{ @loop.call }
461
- end
462
468
  end
463
469
 
464
470
  #===実行中の処理を中断させる
465
471
  def stop
466
472
  return unless @states[:execute]
467
- @mutex.lock unless @sync
473
+ @diagram.stop
468
474
  @states[:execute] = false
469
- unless @sync
470
- @mutex.unlock
471
- @thread.join
472
- @thread = nil
473
- end
474
475
  end
475
476
 
476
477
  #===実行中の処理を停止させる
477
478
  #resume メソッドが呼び出されるまで停止は復帰されない
478
479
  def pause
479
480
  return unless @states[:execute]
480
- @mutex.lock unless @sync
481
481
  @states[:pause] = true
482
- @mutex.unlock unless @sync
483
482
  end
484
483
 
485
484
  #===停止状態から復帰する
486
485
  #このメソッドを呼び出すまで停止状態を保つ
487
486
  def resume
488
487
  return unless @states[:execute]
489
- @mutex.lock unless @sync
490
488
  @states[:pause] = false
491
- @mutex.unlock unless @sync
492
489
  end
493
490
 
494
491
  #===入力デバイスに関わる処理を行う
495
- #(注)必ずメインスレッドから呼び出すこと!
496
- def update_input
492
+ #現在処理中のノードのupdate_inputメソッドを呼び出す。
493
+ #_params_:: パラメータ群。省略可能
494
+ def update_input(*params)
497
495
  return if @states[:pause]
498
- @diagram.update_input
496
+ @diagram.update_input(*params)
499
497
  end
500
498
 
501
499
  #===処理の更新を行う
502
- #(注)このメソッドを使う際は、同期モード(インスタンス生成時に引数として true を渡す)にする必要がある
503
- def update
500
+ #現在処理中のノードupdateメソッドを呼び出す。
501
+ #_params_:: パラメータ群。省略可能
502
+ def update(*params)
504
503
  return if @states[:pause]
505
- @diagram.update
504
+ @diagram.update(*params)
506
505
  @states[:execute] = false if @diagram.finish?
507
506
  end
508
507
 
509
508
  #===レンダリング処理を行う
510
- #Screen.update メソッドを使用している場合は使う必要はない
509
+ #現在処理中のノードのrenderメソッドを呼び出す。
510
+ #visibleメソッドの値がfalseのときは描画されない。
511
511
  def render
512
- @mutex.lock unless @sync
512
+ return unless @visible
513
513
  @diagram.render
514
- unless @sync
515
- @mutex.unlock
516
- Thread.pass
517
- end
518
514
  end
519
515
 
520
516
  #===遷移図形式の処理が終了しているかどうかを取得する
@@ -555,18 +551,10 @@ module Miyako
555
551
  return @diagram.now_node
556
552
  end
557
553
 
558
- def main_loop #:nodoc:
559
- @diagram.start
560
- while @states[:execute] do
561
- unless @states[:pause]
562
- @mutex.lock
563
- @diagram.update
564
- @mutex.unlock
565
- end
566
- Thread.pass
567
- @states[:execute] = false if @diagram.finish?
568
- end
569
- @diagram.stop
554
+ #===登録しているノード名のリストを取得する
555
+ #返却値:: ノード名リスト
556
+ def nodes
557
+ return @diagram.nodes
570
558
  end
571
559
  end
572
560
  end
@@ -2,7 +2,7 @@
2
2
  =begin
3
3
  --
4
4
  Miyako v2.0
5
- Copyright (C) 2007-2008 Cyross Makoto
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
6
 
7
7
  This library is free software; you can redistribute it and/or
8
8
  modify it under the terms of the GNU Lesser General Public
@@ -24,87 +24,128 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24
24
  module Miyako
25
25
  #==線形描画モジュール
26
26
  module Drawing
27
- @@draw_list = {:line => {:normal => {:solid => lambda{|b, l| b.draw_line(*l)},
28
- :anti_aliasing => lambda{|b, l| b.draw_aa_line(*l)}},
29
- :fill => {:solid => lambda{|b, l| b.draw_line(*l)},
30
- :anti_aliasing => lambda{|b, l| b.draw_aa_line(*l)}}},
31
- :rect => {:normal => {:solid => lambda{|b, l| b.draw_rect(*l)},
32
- :anti_aliasing => lambda{|b, l| b.draw_rect(*l)}},
33
- :fill => {:solid => lambda{|b, l| b.fill_rect(*l)},
34
- :anti_aliasing => lambda{|b, l| b.fill_rect(*l)}}},
35
- :circle => {:normal => {:solid => lambda{|b, l| b.draw_circle(*l)},
36
- :anti_aliasing => lambda{|b, l| b.draw_aa_circle(*l)}},
37
- :fill => {:solid => lambda{|b, l| b.draw_filled_circle(*l)},
38
- :anti_aliasing => lambda{|b, l| b.draw_aa_filled_circle(*l)}}},
39
- :ellipse => {:normal => {:solid => lambda{|b, l| b.draw_ellipse(*l)},
40
- :anti_aliasing => lambda{|b, l| b.draw_aa_ellipse(*l)}},
41
- :fill => {:solid => lambda{|b, l| b.draw_filled_ellipse(*l)},
42
- :anti_aliasing => lambda{|b, l| b.drawAAFilledEllipse(*l)}}}}
43
-
44
- #===画像全体を指定の色で塗りつぶす
45
- #_bitmap_:: 描画対象のビットマップ(Sprite.bitmapやSpriteUnit#bitmapの返り値など)
27
+ #===画像全体を指定の色で塗りつぶす
28
+ #引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
29
+ #_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
46
30
  #_color_:: 塗りつぶす色。Color.to_rgbメソッドのパラメータでの指定が可能
47
31
  #返却値:: 自分自身を返す
48
- def Drawing.fill(bitmap, color)
49
- bitmap.fill_rect(0,0,self.w,self.h, Color.to_rgb(color))
32
+ def Drawing.fill(sprite, color)
33
+ color = Color.to_rgb(color)
34
+ methods = sprite.methods
35
+ raise MiyakoError,
36
+ "this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
37
+ bitmap = methods.include?(:to_unit) ? sprite.to_unit.bitmap : methods.include?(:bitmap) ? sprite.bitmap : sprite
38
+ bitmap.draw_rect(0,0, bitmap.w, bitmap.h, color, true, color[3]==255 ? nil : color[3])
39
+ return self
40
+ end
41
+
42
+ #===画像内に点を描画する
43
+ #引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
44
+ #_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
45
+ #_rect_:: 描画する矩形。画像の左上を[0,0]とする。4要素の整数の配列かRect構造体を使用
46
+ #_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
47
+ #_aa_:: アンチエイリアスの指定。trueでオン。デフォルトはfalse
48
+ #返却値:: 自分自身を返す
49
+ def Drawing.pset(sprite, point, color)
50
+ methods = sprite.methods
51
+ raise MiyakoError,
52
+ "this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
53
+ bitmap = sprite.methods.include?(:to_unit) ? sprite.to_unit.bitmap : sprite.bitmap
54
+ bitmap[point[0], point[1]] = Color.to_rgb(color)
50
55
  return self
51
56
  end
52
57
 
53
58
  #===画像内に直線を引く
54
- #_bitmap_:: 描画対象のビットマップ(Sprite.bitmapやSpriteUnit#bitmapの返り値など)
59
+ #引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
60
+ #_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
55
61
  #_rect_:: 描画する矩形。画像の左上を[0,0]とする。4要素の整数の配列かRect構造体を使用
56
62
  #_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
57
- #_attribute_:: 描画の属性。:normal固定。
58
- #_aa_:: アンチエイリアスの指定。:solidでオフ、:anti_aliasingでオン
63
+ #_aa_:: アンチエイリアスの指定。trueでオン。デフォルトはfalse
59
64
  #返却値:: 自分自身を返す
60
- def Drawing.line(bitmap, rect, color, attribute = :normal, aa = :solid)
61
- raise MiyakoError, "not have Drawing attribute! #{attribute}" unless @@draw_list[:line].has_key?(attribute)
62
- raise MiyakoError, "not have Drawing aaa! #{aa}" unless @@draw_list[:line][:attribute].has_key?(aa)
63
- color =
64
- @@draw_list[:line][attribute][aa].call(bitmap, rect.to_a << Color.to_rgb(color))
65
+ def Drawing.line(sprite, rect, color, aa = false)
66
+ color = Color.to_rgb(color)
67
+ methods = sprite.methods
68
+ raise MiyakoError,
69
+ "this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
70
+ bitmap = sprite.methods.include?(:to_unit) ? sprite.to_unit.bitmap : sprite.bitmap
71
+ bitmap.draw_line(
72
+ rect[0], rect[1], rect[0]+rect[2]-1, rect[1]+rect[3]-1,
73
+ color, aa, color[3]==255 ? nil : color[3]
74
+ )
65
75
  return self
66
76
  end
67
77
 
68
78
  #===画像内に矩形を描画する
69
- #_bitmap_:: 描画対象のビットマップ(Sprite.bitmapやSpriteUnit#bitmapの返り値など)
79
+ #引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
80
+ #_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
70
81
  #_rect_:: 描画する矩形。画像の左上を[0,0]とする。4要素の整数の配列かRect構造体を使用
71
82
  #_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
72
- #_attribute_:: 描画の属性。:normalで縁のみ描画、:fillで内部も塗りつぶす
73
- #_aa_:: アンチエイリアスの指定。:solidでオフ、:anti_aliasingでオン
83
+ #_fill_:: 描画の属性。falseで縁のみ描画、trueで内部も塗りつぶす。デフォルトはfalse
74
84
  #返却値:: 自分自身を返す
75
- def Drawing.rect(bitmap, rect, color, attribute = :normal, aa = :solid)
76
- raise MiyakoError, "not have Drawing attribute! #{attribute}" unless @@draw_list[:line].has_key?(attribute)
77
- raise MiyakoError, "not have Drawing aaa! #{aa}" unless @@draw_list[:line][:attribute].has_key?(aa)
78
- @@draw_list[:rect][attribute][aa].call(bitmap, rect.to_a << Color.to_rgb(color))
85
+ def Drawing.rect(sprite, rect, color, fill = false)
86
+ color = Color.to_rgb(color)
87
+ methods = sprite.methods
88
+ raise MiyakoError,
89
+ "this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
90
+ bitmap = sprite.methods.include?(:to_unit) ? sprite.to_unit.bitmap : sprite.bitmap
91
+ bitmap.draw_rect(
92
+ rect[0], rect[1], rect[2]-1, rect[3]-1,
93
+ color, fill, color[3]==255 ? nil : color[3]
94
+ )
79
95
  return self
80
96
  end
81
97
 
82
98
  #===画像内に円を描画する
83
- #_bitmap_:: 描画対象のビットマップ(Sprite.bitmapやSpriteUnit#bitmapの返り値など)
99
+ #引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
100
+ #_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
84
101
  #_point_:: 中心の位置。2要素の整数の配列、もしくはPoint構造体を使用可能
85
102
  #_r_:: 円の半径。整数を使用可能。
86
103
  #_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
87
- #_attribute_:: 描画の属性。:normalで縁のみ描画、:fillで内部も塗りつぶす
88
- #_aa_:: アンチエイリアスの指定。:solidでオフ、:anti_aliasingでオン
104
+ #_fill_:: 描画の属性。falseで縁のみ描画、trueで内部も塗りつぶす。デフォルトはfalse
105
+ #_aa_:: アンチエイリアスの指定。trueでオン。デフォルトはfalse
89
106
  #返却値:: 自分自身を返す
90
- def Drawing.circle(bitmap, point, r, color, attribute = :normal, aa = :solid)
91
- raise MiyakoError, "not have Drawing attribute! #{attribute}" unless @@draw_list[:line].has_key?(attribute)
92
- raise MiyakoError, "not have Drawing aaa! #{aa}" unless @@draw_list[:line][:attribute].has_key?(aa)
93
- @@draw_list[:circle][attribute][aa].call(bitmap, point.to_a << r << Color.to_rgb(color))
107
+ def Drawing.circle(sprite, point, r, color, fill = false, aa = false)
108
+ color = Color.to_rgb(color)
109
+ methods = sprite.methods
110
+ raise MiyakoError,
111
+ "this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
112
+ bitmap = sprite.methods.include?(:to_unit) ? sprite.to_unit.bitmap : sprite.bitmap
113
+ bitmap.draw_circle(*point.to_a[0..1], r, color, fill, aa, color[3]==255 ? nil : color[3])
94
114
  return self
95
115
  end
96
116
 
97
117
  #===画像内に楕円を描画する
98
- #_bitmap_:: 描画対象のビットマップ(Sprite.bitmapやSpriteUnit#bitmapの返り値など)
99
- #_rect_:: 描画する矩形。画像の左上を[0,0]とする。4要素の整数の配列かRect構造体を使用
118
+ #引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
119
+ #_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
120
+ #_point_:: 楕円の中心位置。2要素の整数の配列かPoint構造体を使用
121
+ #_rx_:: x方向半径。1以上の整数
122
+ #_ry_:: y方向半径。1以上の整数
123
+ #_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
124
+ #_fill_:: 描画の属性。falseで縁のみ描画、trueで内部も塗りつぶす。デフォルトはfalse
125
+ #_aa_:: アンチエイリアスの指定。trueでオン。デフォルトはfalse
126
+ #返却値:: 自分自身を返す
127
+ def Drawing.ellipse(sprite, point, rx, ry, color, fill = false, aa = false)
128
+ color = Color.to_rgb(color)
129
+ methods = sprite.methods
130
+ raise MiyakoError,
131
+ "this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
132
+ bitmap = sprite.methods.include?(:to_unit) ? sprite.to_unit.bitmap : sprite.bitmap
133
+ bitmap.draw_ellipse(
134
+ point[0], point[1], rx, ry,
135
+ color, fill, aa, color[3]==255 ? nil : color[3]
136
+ )
137
+ end
138
+
139
+ #===画像内に多角形を描画する
140
+ #多角形を描画するとき、頂点のリストは、[x,y]で示した配列のリスト(配列)を渡す。
141
+ #引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
142
+ #_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
143
+ #_points_:: 座標の配列。2要素の整数の配列かPoint構造体を使用
100
144
  #_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
101
- #_attribute_:: 描画の属性。:normalで縁のみ描画、:fillで内部も塗りつぶす
102
- #_aa_:: アンチエイリアスの指定。:solidでオフ、:anti_aliasingでオン
145
+ #_fill_:: 描画の属性。falseで縁のみ描画、trueで内部も塗りつぶす。デフォルトはfalse
146
+ #_aa_:: アンチエイリアスの指定。trueでオン。デフォルトはfalse
103
147
  #返却値:: 自分自身を返す
104
- def Drawing.ellipse(bitmap, rect, color, attribute = :normal, aa = :solid)
105
- raise MiyakoError, "not have Drawing attribute! #{attribute}" unless @@draw_list[:line].has_key?(attribute)
106
- raise MiyakoError, "not have Drawing aaa! #{aa}" unless @@draw_list[:line][:attribute].has_key?(aa)
107
- @@draw_list[:ellipse][attribute][aa].call(bitmap, rect.to_a << Color.to_rgb(color))
148
+ def Drawing.polygon(sprite, points, color, fill = false, aa = false)
108
149
  end
109
150
  end
110
151
  end