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
@@ -20,13 +20,15 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
20
  =end
21
21
 
22
22
  begin
23
+ loaded = false
23
24
  require 'cairo'
24
- rescue
25
+ rescue LoadError
25
26
  begin
26
27
  require 'rubygems'
27
28
  require 'cairo'
28
- rescue
29
- raise Miyako::MiyakoError, "Sorry, Cairo-Miyako Interface has rcairo."
29
+ loaded = true
30
+ rescue LoadError
31
+ raise Miyako::MiyakoError, "Sorry, Cairo-Miyako Interface has rcairo." unless loaded
30
32
  end
31
33
  end
32
34
 
@@ -109,10 +109,31 @@ module Miyako
109
109
  end
110
110
 
111
111
  #===スライドを画面に描画する
112
+ #単純にslide_renderメソッドを呼び出し、結果を返すだけのテンプレートメソッド
113
+ #このメソッドを記述し直すことにより、柔軟なrenderを行える
112
114
  #ブロックを渡すと、スライド,画面側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る。
113
115
  #ブロックの引数は、|スライド側SpriteUnit,画面側SpriteUnit|となる。
114
116
  #返却値:: 自分自身を返す
115
117
  def render(&block)
118
+ return slide_render(&block)
119
+ end
120
+
121
+ #===スライドを画像に描画する
122
+ #単純にslide_render_toメソッドを呼び出し、結果を返すだけのテンプレートメソッド
123
+ #このメソッドを記述し直すことにより、柔軟なrenderを行える
124
+ #ブロックを渡すと、スライド,画像側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る。
125
+ #ブロックの引数は、|スライド側SpriteUnit,画像側SpriteUnit|となる。
126
+ #_dst_:: 描画先画像(Spriteクラスインスタンスなど)
127
+ #返却値:: 自分自身を返す
128
+ def render_to(dst, &block)
129
+ return slide_render_to(dst, &block)
130
+ end
131
+
132
+ #===スライドを画面に描画する
133
+ #ブロックを渡すと、スライド,画面側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る。
134
+ #ブロックの引数は、|スライド側SpriteUnit,画面側SpriteUnit|となる。
135
+ #返却値:: 自分自身を返す
136
+ def slide_render(&block)
116
137
  @body.render(&block)
117
138
  return self
118
139
  end
@@ -122,7 +143,7 @@ module Miyako
122
143
  #ブロックの引数は、|スライド側SpriteUnit,画像側SpriteUnit|となる。
123
144
  #_dst_:: 描画先画像(Spriteクラスインスタンスなど)
124
145
  #返却値:: 自分自身を返す
125
- def render_to(dst, &block)
146
+ def slide_render_to(dst, &block)
126
147
  @body.render(dst, &block)
127
148
  return self
128
149
  end
data/lib/Miyako/miyako.rb CHANGED
@@ -4,7 +4,7 @@
4
4
  #
5
5
  #Authors:: サイロス誠
6
6
  #Version:: 2.0.0
7
- #Copyright:: 2007-2008 Cyross Makoto
7
+ #Copyright:: 2007-2009 Cyross Makoto
8
8
  #License:: LGPL2.1
9
9
  #
10
10
  =begin
@@ -26,8 +26,8 @@ License along with this library; if not, write to the Free Software
26
26
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27
27
  =end
28
28
 
29
- if RUBY_VERSION < '1.8.7'
30
- puts 'Sorry. Miyako needs Ruby 1.8.7 or above...'
29
+ if RUBY_VERSION < '1.9.1'
30
+ puts 'Sorry. Miyako needs Ruby 1.9.1 or above...'
31
31
  exit
32
32
  end
33
33
 
@@ -39,17 +39,16 @@ if SDL::VERSION < '2.0'
39
39
  end
40
40
 
41
41
  require 'forwardable'
42
- require 'iconv'
42
+ require 'iconv' if RUBY_VERSION < '1.9.0'
43
43
  require 'kconv'
44
- require 'jcode' if RUBY_VERSION < '1.9.0'
45
44
  require 'rbconfig'
46
45
 
47
- $KCODE = 'u' if RUBY_VERSION < '1.9.0'
48
-
49
-
50
- #デバッグモードの設定
46
+ #デバッグモードの設定。デバッグモードにするときはtrueを渡す。デフォルトはfalse
51
47
  $miyako_debug_mode ||= false
52
48
 
49
+ #openGLを使う? openGLを使用するときはtrueを設定する。デフォルトはfalse
50
+ $miyako_use_opengl ||= false
51
+
53
52
  #サウンド機能を使わないときは、miyako.rbをロードする前に
54
53
  #$not_use_audio変数にtrueを割り当てる
55
54
  $not_use_audio ||= false
@@ -114,16 +113,17 @@ module Miyako
114
113
  str = title
115
114
  case @@osName
116
115
  when "win"
117
- str = title.to_s().tosjis()
116
+ str = title.to_s().encode(Encoding::SJIS)
118
117
  when "mac_osx"
119
- str = Iconv.conv("UTF-8-MAC", "UTF-8", title.to_s().toutf8())
118
+ str = title.to_s().encode(Encoding::UTF_8)
120
119
  when "linux"
121
- str = title.to_s().toeuc()
120
+ str = title.to_s().encode(Encoding::EUCJP)
122
121
  end
123
122
  SDL::WM.setCaption(str, "")
124
123
  end
125
124
  end
126
125
 
126
+ require 'Miyako/API/utility'
127
127
  require 'Miyako/API/yuki'
128
128
  require 'Miyako/API/basic_data'
129
129
  require 'Miyako/API/modules'
@@ -164,7 +164,6 @@ module Miyako
164
164
  Screen::clear
165
165
  yield
166
166
  Screen::render
167
- sleep 0.01
168
167
  end
169
168
  end
170
169
  end
Binary file
Binary file
Binary file
Binary file
Binary file
data/logo/miyako.png ADDED
Binary file
Binary file
data/logo/space.png ADDED
Binary file
@@ -0,0 +1,590 @@
1
+ /*
2
+ --
3
+ Miyako v2.0 Extend Library "Miyako no Katana"
4
+ Copyright (C) 2008 Cyross Makoto
5
+
6
+ This library is free software; you can redistribute it and/or
7
+ modify it under the terms of the GNU Lesser General Public
8
+ License as published by the Free Software Foundation; either
9
+ version 2.1 of the License, or (at your option) any later version.
10
+
11
+ This library is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ Lesser General Public License for more details.
15
+
16
+ You should have received a copy of the GNU Lesser General Public
17
+ License along with this library; if not, write to the Free Software
18
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
+ ++
20
+ */
21
+
22
+ /*
23
+ =拡張ライブラリmiyako_no_katana
24
+ Authors:: サイロス誠
25
+ Version:: 2.0
26
+ Copyright:: 2007-2008 Cyross Makoto
27
+ License:: LGPL2.1
28
+ */
29
+ #include "defines.h"
30
+
31
+ static VALUE mSDL = Qnil;
32
+ static VALUE mMiyako = Qnil;
33
+ static VALUE eMiyakoError = Qnil;
34
+ static VALUE cWaitCounter = Qnil;
35
+ static VALUE sSpriteUnit = Qnil;
36
+ static VALUE sPoint = Qnil;
37
+ static VALUE sSize = Qnil;
38
+ static VALUE sRect = Qnil;
39
+ static VALUE sSquare = Qnil;
40
+ static VALUE sSegment = Qnil;
41
+ static VALUE nZero = Qnil;
42
+ static VALUE nOne = Qnil;
43
+ static volatile ID id_update = Qnil;
44
+ static volatile ID id_kakko = Qnil;
45
+ static volatile ID id_render = Qnil;
46
+ static volatile ID id_to_a = Qnil;
47
+ static volatile int zero = Qnil;
48
+ static volatile int one = Qnil;
49
+
50
+ /*
51
+ :nodoc:
52
+ */
53
+ static void get_min_max(VALUE segment, VALUE *min, VALUE *max)
54
+ {
55
+ VALUE *tmp;
56
+ switch(TYPE(segment))
57
+ {
58
+ case T_ARRAY:
59
+ if(RARRAY_LEN(segment) < 2)
60
+ rb_raise(eMiyakoError, "pairs have illegal array! (above 2 elements)");
61
+ tmp = RARRAY_PTR(segment);
62
+ *min = *tmp++;
63
+ *max = *tmp;
64
+ break;
65
+ case T_STRUCT:
66
+ if(RSTRUCT_LEN(segment) < 2)
67
+ rb_raise(eMiyakoError, "pairs have illegal struct! (above 2 attributes)");
68
+ tmp = RSTRUCT_PTR(segment);
69
+ *min = *tmp++;
70
+ *max = *tmp;
71
+ break;
72
+ default:
73
+ *min = rb_funcall(segment, rb_intern("min"), 0);
74
+ *max = rb_funcall(segment, rb_intern("max"), 0);
75
+ break;
76
+ }
77
+ }
78
+
79
+ /*
80
+ :nodoc:
81
+ */
82
+ static VALUE counter_start(VALUE self)
83
+ {
84
+ rb_iv_set(self, "@st", rb_funcall(mSDL, rb_intern("getTicks"), 0));
85
+ rb_iv_set(self, "@counting", Qtrue);
86
+ return self;
87
+ }
88
+
89
+ /*
90
+ :nodoc:
91
+ */
92
+ static VALUE counter_stop(VALUE self)
93
+ {
94
+ rb_iv_set(self, "@st", INT2NUM(0));
95
+ rb_iv_set(self, "@counting", Qfalse);
96
+ return self;
97
+ }
98
+
99
+ /*
100
+ :nodoc:
101
+ */
102
+ static VALUE counter_wait_inner(VALUE self, VALUE f)
103
+ {
104
+ VALUE counting = rb_iv_set(self, "@counting", Qtrue);
105
+ if(counting == Qfalse){ return f == Qtrue ? Qfalse : Qtrue; }
106
+
107
+ int t = NUM2INT(rb_funcall(mSDL, rb_intern("getTicks"), 0));
108
+ int st = NUM2INT(rb_iv_get(self, "@st"));
109
+ int wait = NUM2INT(rb_iv_get(self, "@wait"));
110
+ if((t - st) < wait){ return f; }
111
+
112
+ rb_iv_set(cWaitCounter, "@counting", Qfalse);
113
+
114
+ return f == Qtrue ? Qfalse : Qtrue;
115
+ }
116
+
117
+ /*
118
+ :nodoc:
119
+ */
120
+ static VALUE counter_waiting(VALUE self)
121
+ {
122
+ return counter_wait_inner(self, Qtrue);
123
+ }
124
+
125
+ /*
126
+ :nodoc:
127
+ */
128
+ static VALUE counter_finish(VALUE self)
129
+ {
130
+ return counter_wait_inner(self, Qfalse);
131
+ }
132
+
133
+ /*
134
+ :nodoc:
135
+ */
136
+ static VALUE counter_wait(VALUE self)
137
+ {
138
+ int t = NUM2INT(rb_funcall(mSDL, rb_intern("getTicks"), 0));
139
+ int st = NUM2INT(rb_funcall(mSDL, rb_intern("getTicks"), 0));
140
+ int wait = NUM2INT(rb_iv_get(self, "@wait"));
141
+ while((t - st) < wait){
142
+ t = NUM2INT(rb_funcall(mSDL, rb_intern("getTicks"), 0));
143
+ }
144
+ return self;
145
+ }
146
+
147
+ static VALUE su_move(VALUE self, VALUE dx, VALUE dy)
148
+ {
149
+ VALUE *st = RSTRUCT_PTR(self);
150
+ VALUE *px = st+5;
151
+ VALUE *py = st+6;
152
+ VALUE tx = *px;
153
+ VALUE ty = *py;
154
+ *px = INT2NUM(NUM2INT(tx)+NUM2INT(dx));
155
+ *py = INT2NUM(NUM2INT(ty)+NUM2INT(dy));
156
+ if(rb_block_given_p() == Qtrue){
157
+ VALUE ret = rb_yield(self);
158
+ if(ret == Qfalse || ret == Qnil)
159
+ {
160
+ *px = tx;
161
+ *py = ty;
162
+ }
163
+ }
164
+ return self;
165
+ }
166
+
167
+ static VALUE su_move_to(VALUE self, VALUE x, VALUE y)
168
+ {
169
+ VALUE *st = RSTRUCT_PTR(self);
170
+ VALUE *px = st+5;
171
+ VALUE *py = st+6;
172
+ VALUE tx = *px;
173
+ VALUE ty = *py;
174
+ *px = x;
175
+ *py = y;
176
+ if(rb_block_given_p() == Qtrue){
177
+ VALUE ret = rb_yield(self);
178
+ if(ret == Qfalse || ret == Qnil)
179
+ {
180
+ *px = tx;
181
+ *py = ty;
182
+ }
183
+ }
184
+ return self;
185
+ }
186
+
187
+ static VALUE point_move(VALUE self, VALUE dx, VALUE dy)
188
+ {
189
+ VALUE *st = RSTRUCT_PTR(self);
190
+ VALUE *px = st+0;
191
+ VALUE *py = st+1;
192
+ VALUE tx = *px;
193
+ VALUE ty = *py;
194
+ *px = INT2NUM(NUM2INT(tx)+NUM2INT(dx));
195
+ *py = INT2NUM(NUM2INT(ty)+NUM2INT(dy));
196
+ if(rb_block_given_p() == Qtrue){
197
+ VALUE ret = rb_yield(self);
198
+ if(ret == Qfalse || ret == Qnil)
199
+ {
200
+ *px = tx;
201
+ *py = ty;
202
+ }
203
+ }
204
+ return self;
205
+ }
206
+
207
+ static VALUE point_move_to(VALUE self, VALUE x, VALUE y)
208
+ {
209
+ VALUE *st = RSTRUCT_PTR(self);
210
+ VALUE *px = st+0;
211
+ VALUE *py = st+1;
212
+ VALUE tx = *px;
213
+ VALUE ty = *py;
214
+ *px = x;
215
+ *py = y;
216
+ if(rb_block_given_p() == Qtrue){
217
+ VALUE ret = rb_yield(self);
218
+ if(ret == Qfalse || ret == Qnil)
219
+ {
220
+ *px = tx;
221
+ *py = ty;
222
+ }
223
+ }
224
+ return self;
225
+ }
226
+
227
+ static VALUE size_resize(VALUE self, VALUE dw, VALUE dh)
228
+ {
229
+ VALUE *st = RSTRUCT_PTR(self);
230
+ VALUE *pw = st+0;
231
+ VALUE *ph = st+1;
232
+ VALUE tw = *pw;
233
+ VALUE th = *ph;
234
+ *pw = INT2NUM(NUM2INT(tw)+NUM2INT(dw));
235
+ *ph = INT2NUM(NUM2INT(th)+NUM2INT(dh));
236
+ if(rb_block_given_p() == Qtrue){
237
+ VALUE ret = rb_yield(self);
238
+ if(ret == Qfalse || ret == Qnil)
239
+ {
240
+ *pw = tw;
241
+ *ph = th;
242
+ }
243
+ }
244
+ return self;
245
+ }
246
+
247
+ static VALUE size_resize_to(VALUE self, VALUE w, VALUE h)
248
+ {
249
+ VALUE *st = RSTRUCT_PTR(self);
250
+ VALUE *pw = st+0;
251
+ VALUE *ph = st+1;
252
+ VALUE tw = *pw;
253
+ VALUE th = *ph;
254
+ *pw = w;
255
+ *ph = h;
256
+ if(rb_block_given_p() == Qtrue){
257
+ VALUE ret = rb_yield(self);
258
+ if(ret == Qfalse || ret == Qnil)
259
+ {
260
+ *pw = tw;
261
+ *ph = th;
262
+ }
263
+ }
264
+ return self;
265
+ }
266
+
267
+ static VALUE rect_resize(VALUE self, VALUE dw, VALUE dh)
268
+ {
269
+ VALUE *st = RSTRUCT_PTR(self);
270
+ VALUE *pw = st+2;
271
+ VALUE *ph = st+3;
272
+ VALUE tw = *pw;
273
+ VALUE th = *ph;
274
+ *pw = INT2NUM(NUM2INT(*pw) + NUM2INT(dw));
275
+ *ph = INT2NUM(NUM2INT(*pw) + NUM2INT(dh));
276
+ if(rb_block_given_p() == Qtrue){
277
+ VALUE ret = rb_yield(self);
278
+ if(ret == Qfalse || ret == Qnil)
279
+ {
280
+ *pw = tw;
281
+ *ph = th;
282
+ }
283
+ }
284
+ return self;
285
+ }
286
+
287
+ static VALUE rect_resize_to(VALUE self, VALUE w, VALUE h)
288
+ {
289
+ VALUE *st = RSTRUCT_PTR(self);
290
+ VALUE *pw = st+2;
291
+ VALUE *ph = st+3;
292
+ VALUE tw = *pw;
293
+ VALUE th = *ph;
294
+ *pw = w;
295
+ *ph = h;
296
+ if(rb_block_given_p() == Qtrue){
297
+ VALUE ret = rb_yield(self);
298
+ if(ret == Qfalse || ret == Qnil)
299
+ {
300
+ *pw = tw;
301
+ *ph = th;
302
+ }
303
+ }
304
+ return self;
305
+ }
306
+
307
+ static VALUE rect_in_range(VALUE self, VALUE vx, VALUE vy)
308
+ {
309
+ VALUE *st = RSTRUCT_PTR(self);
310
+ int l = NUM2INT(*(st+0));
311
+ int t = NUM2INT(*(st+1));
312
+ int w = NUM2INT(*(st+2));
313
+ int h = NUM2INT(*(st+3));
314
+ int x = NUM2INT(vx);
315
+ int y = NUM2INT(vy);
316
+
317
+ if(x >= l && y >= t && x < (l+w) && y < (t+h)){ return Qtrue; }
318
+ return Qfalse;
319
+ }
320
+
321
+ static VALUE square_move(VALUE self, VALUE dx, VALUE dy)
322
+ {
323
+ VALUE *st = RSTRUCT_PTR(self);
324
+ VALUE *pl = st+0;
325
+ VALUE *pt = st+1;
326
+ VALUE *pr = st+2;
327
+ VALUE *pb = st+3;
328
+ VALUE tl = *pl;
329
+ VALUE tt = *pt;
330
+ VALUE tr = *pr;
331
+ VALUE tb = *pb;
332
+ *pl = INT2NUM(NUM2INT(tl)+NUM2INT(dx));
333
+ *pt = INT2NUM(NUM2INT(tt)+NUM2INT(dy));
334
+ *pr = INT2NUM(NUM2INT(tr)+NUM2INT(dx));
335
+ *pb = INT2NUM(NUM2INT(tb)+NUM2INT(dy));
336
+ if(rb_block_given_p() == Qtrue){
337
+ VALUE ret = rb_yield(self);
338
+ if(ret == Qfalse || ret == Qnil)
339
+ {
340
+ *pl = tl;
341
+ *pt = tt;
342
+ *pr = tr;
343
+ *pb = tb;
344
+ }
345
+ }
346
+ return self;
347
+ }
348
+
349
+ static VALUE square_move_to(VALUE self, VALUE x, VALUE y)
350
+ {
351
+ VALUE *st = RSTRUCT_PTR(self);
352
+ VALUE *pl = st+0;
353
+ VALUE *pt = st+1;
354
+ VALUE *pr = st+2;
355
+ VALUE *pb = st+3;
356
+ VALUE tl = *pl;
357
+ VALUE tt = *pt;
358
+ VALUE tr = *pr;
359
+ VALUE tb = *pb;
360
+ int w = NUM2INT(tr)-NUM2INT(tl);
361
+ int h = NUM2INT(tb)-NUM2INT(tt);
362
+ *pl = x;
363
+ *pt = y;
364
+ *pr = INT2NUM(NUM2INT(x)+w);
365
+ *pb = INT2NUM(NUM2INT(y)+h);
366
+ if(rb_block_given_p() == Qtrue){
367
+ VALUE ret = rb_yield(self);
368
+ if(ret == Qfalse || ret == Qnil)
369
+ {
370
+ *pl = tl;
371
+ *pt = tt;
372
+ *pr = tr;
373
+ *pb = tb;
374
+ }
375
+ }
376
+ return self;
377
+ }
378
+
379
+ static VALUE square_resize(VALUE self, VALUE dw, VALUE dh)
380
+ {
381
+ VALUE *st = RSTRUCT_PTR(self);
382
+ VALUE *pr = st+2;
383
+ VALUE *pb = st+3;
384
+ VALUE tr = *pr;
385
+ VALUE tb = *pb;
386
+ *pr = INT2NUM(NUM2INT(*pr) + NUM2INT(dw));
387
+ *pb = INT2NUM(NUM2INT(*pb) + NUM2INT(dh));
388
+ if(rb_block_given_p() == Qtrue){
389
+ VALUE ret = rb_yield(self);
390
+ if(ret == Qfalse || ret == Qnil)
391
+ {
392
+ *pr = tr;
393
+ *pb = tb;
394
+ }
395
+ }
396
+ return self;
397
+ }
398
+
399
+ static VALUE square_resize_to(VALUE self, VALUE w, VALUE h)
400
+ {
401
+ VALUE *st = RSTRUCT_PTR(self);
402
+ VALUE *pl = st+0;
403
+ VALUE *pt = st+1;
404
+ VALUE *pr = st+2;
405
+ VALUE *pb = st+3;
406
+ VALUE tr = *pr;
407
+ VALUE tb = *pb;
408
+ *pr = INT2NUM(NUM2INT(*pl) + NUM2INT(w) - 1);
409
+ *pb = INT2NUM(NUM2INT(*pt) + NUM2INT(h) - 1);
410
+ if(rb_block_given_p() == Qtrue){
411
+ VALUE ret = rb_yield(self);
412
+ if(ret == Qfalse || ret == Qnil)
413
+ {
414
+ *pr = tr;
415
+ *pb = tb;
416
+ }
417
+ }
418
+ return self;
419
+ }
420
+
421
+ static VALUE square_in_range(VALUE self, VALUE vx, VALUE vy)
422
+ {
423
+ VALUE *st = RSTRUCT_PTR(self);
424
+ int l = NUM2INT(*(st+0));
425
+ int t = NUM2INT(*(st+1));
426
+ int r = NUM2INT(*(st+2));
427
+ int b = NUM2INT(*(st+3));
428
+ int x = NUM2INT(vx);
429
+ int y = NUM2INT(vy);
430
+
431
+ if(x >= l && y >= t && x <= r && y <= b){ return Qtrue; }
432
+ return Qfalse;
433
+ }
434
+
435
+ static VALUE segment_move(VALUE self, VALUE dx, VALUE dy)
436
+ {
437
+ VALUE min_x, max_x, min_y, max_y;
438
+ VALUE *st = RSTRUCT_PTR(self);
439
+
440
+ get_min_max(*(st+0), &min_x, &max_x);
441
+ get_min_max(*(st+1), &min_y, &max_y);
442
+
443
+ rb_funcall(self, rb_intern("reset"), 4, INT2NUM(NUM2INT(min_x)+NUM2INT(dx)),
444
+ INT2NUM(NUM2INT(min_y)+NUM2INT(dy)),
445
+ INT2NUM(NUM2INT(max_x)+NUM2INT(dx)),
446
+ INT2NUM(NUM2INT(max_y)+NUM2INT(dy)));
447
+
448
+ if(rb_block_given_p() == Qtrue){
449
+ VALUE ret = rb_yield(self);
450
+ if(ret == Qfalse || ret == Qnil)
451
+ rb_funcall(self, rb_intern("reset"), 4, min_x, max_x, min_y, max_y);
452
+ }
453
+
454
+ return self;
455
+ }
456
+
457
+ static VALUE segment_move_to(VALUE self, VALUE x, VALUE y)
458
+ {
459
+ VALUE min_x, max_x, min_y, max_y;
460
+ VALUE *st = RSTRUCT_PTR(self);
461
+
462
+ get_min_max(*(st+0), &min_x, &max_x);
463
+ get_min_max(*(st+1), &min_y, &max_y);
464
+
465
+ int w = NUM2INT(max_x)-NUM2INT(min_x);
466
+ int h = NUM2INT(max_y)-NUM2INT(min_y);
467
+
468
+ rb_funcall(self, rb_intern("reset"), 4, x, y, INT2NUM(NUM2INT(x)+w), INT2NUM(NUM2INT(y)+h));
469
+
470
+ if(rb_block_given_p() == Qtrue){
471
+ VALUE ret = rb_yield(self);
472
+ if(ret == Qfalse || ret == Qnil)
473
+ rb_funcall(self, rb_intern("reset"), 4, min_x, max_x, min_y, max_y);
474
+ }
475
+
476
+ return self;
477
+ }
478
+
479
+ static VALUE segment_resize(VALUE self, VALUE dw, VALUE dh)
480
+ {
481
+ VALUE min_x, max_x, min_y, max_y;
482
+ VALUE *st = RSTRUCT_PTR(self);
483
+
484
+ get_min_max(*(st+0), &min_x, &max_x);
485
+ get_min_max(*(st+1), &min_y, &max_y);
486
+
487
+ int w = NUM2INT(max_x) + NUM2INT(dw);
488
+ int h = NUM2INT(max_y) + NUM2INT(dh);
489
+
490
+ if(w <= 0)
491
+ rb_raise(eMiyakoError, "illegal width(result is 0 or minus)");
492
+ if(h <= 0)
493
+ rb_raise(eMiyakoError, "illegal height(result is 0 or minus)");
494
+
495
+ rb_funcall(self, rb_intern("reset"), 4, INT2NUM(NUM2INT(min_x)),
496
+ INT2NUM(NUM2INT(min_y)),
497
+ INT2NUM(w),
498
+ INT2NUM(h));
499
+
500
+ if(rb_block_given_p() == Qtrue){
501
+ VALUE ret = rb_yield(self);
502
+ if(ret == Qfalse || ret == Qnil)
503
+ rb_funcall(self, rb_intern("reset"), 4, min_x, max_x, min_y, max_y);
504
+ }
505
+
506
+ return self;
507
+ }
508
+
509
+ static VALUE segment_resize_to(VALUE self, VALUE w, VALUE h)
510
+ {
511
+ VALUE min_x, max_x, min_y, max_y;
512
+ VALUE *st = RSTRUCT_PTR(self);
513
+
514
+ get_min_max(*(st+0), &min_x, &max_x);
515
+ get_min_max(*(st+1), &min_y, &max_y);
516
+
517
+ int nw = NUM2INT(w);
518
+ int nh = NUM2INT(h);
519
+
520
+ if(nw <= 0)
521
+ rb_raise(eMiyakoError, "illegal width(result is 0 or minus)");
522
+ if(nh <= 0)
523
+ rb_raise(eMiyakoError, "illegal height(result is 0 or minus)");
524
+
525
+ rb_funcall(self, rb_intern("reset"), 4, INT2NUM(NUM2INT(min_x)),
526
+ INT2NUM(NUM2INT(min_y)),
527
+ INT2NUM(NUM2INT(min_x)+nw-1),
528
+ INT2NUM(NUM2INT(min_y)+nh-1));
529
+
530
+ if(rb_block_given_p() == Qtrue){
531
+ VALUE ret = rb_yield(self);
532
+ if(ret == Qfalse || ret == Qnil)
533
+ rb_funcall(self, rb_intern("reset"), 4, min_x, max_x, min_y, max_y);
534
+ }
535
+
536
+ return self;
537
+ }
538
+
539
+ void Init_miyako_basicdata()
540
+ {
541
+ mSDL = rb_define_module("SDL");
542
+ mMiyako = rb_define_module("Miyako");
543
+ eMiyakoError = rb_define_class_under(mMiyako, "MiyakoError", rb_eException);
544
+ cWaitCounter = rb_define_class_under(mMiyako, "WaitCounter", rb_cObject);
545
+ sSpriteUnit = rb_define_class_under(mMiyako, "SpriteUnitBase", rb_cStruct);
546
+ sPoint = rb_define_class_under(mMiyako, "PointStruct", rb_cStruct);
547
+ sSize = rb_define_class_under(mMiyako, "SizeStruct", rb_cStruct);
548
+ sRect = rb_define_class_under(mMiyako, "RectStruct", rb_cStruct);
549
+ sSquare = rb_define_class_under(mMiyako, "SquareStruct", rb_cStruct);
550
+ sSegment = rb_define_class_under(mMiyako, "SegmentStruct", rb_cStruct);
551
+
552
+ id_update = rb_intern("update");
553
+ id_kakko = rb_intern("[]");
554
+ id_render = rb_intern("render");
555
+ id_to_a = rb_intern("to_a");
556
+
557
+ zero = 0;
558
+ nZero = INT2NUM(zero);
559
+ one = 1;
560
+ nOne = INT2NUM(one);
561
+
562
+ rb_define_method(cWaitCounter, "start", counter_start, 0);
563
+ rb_define_method(cWaitCounter, "stop", counter_stop, 0);
564
+ rb_define_method(cWaitCounter, "wait_inner", counter_wait_inner, 1);
565
+ rb_define_method(cWaitCounter, "waiting?", counter_waiting, 0);
566
+ rb_define_method(cWaitCounter, "finish?", counter_finish, 0);
567
+ rb_define_method(cWaitCounter, "wait", counter_wait, 0);
568
+
569
+ rb_define_method(sSpriteUnit, "move", su_move, 2);
570
+ rb_define_method(sSpriteUnit, "move_to", su_move_to, 2);
571
+
572
+ rb_define_method(sPoint, "move", point_move, 2);
573
+ rb_define_method(sPoint, "move_to", point_move_to, 2);
574
+ rb_define_method(sSize, "resize", size_resize, 2);
575
+ rb_define_method(sSize, "resize_to", size_resize_to, 2);
576
+ rb_define_method(sRect, "move", point_move, 2);
577
+ rb_define_method(sRect, "move_to", point_move_to, 2);
578
+ rb_define_method(sRect, "resize", rect_resize, 2);
579
+ rb_define_method(sRect, "resize_to", rect_resize_to, 2);
580
+ rb_define_method(sRect, "in_range?", rect_in_range, 2);
581
+ rb_define_method(sSquare, "move", square_move, 2);
582
+ rb_define_method(sSquare, "move_to", square_move_to, 2);
583
+ rb_define_method(sSquare, "resize", square_resize, 2);
584
+ rb_define_method(sSquare, "resize_to", square_resize_to, 2);
585
+ rb_define_method(sSquare, "in_range?", square_in_range, 2);
586
+ rb_define_method(sSegment, "move", segment_move, 2);
587
+ rb_define_method(sSegment, "move_to", segment_move_to, 2);
588
+ rb_define_method(sSegment, "resize", segment_resize, 2);
589
+ rb_define_method(sSegment, "resize_to", segment_resize_to, 2);
590
+ }