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
data/miyako_font.c CHANGED
@@ -63,7 +63,7 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
63
63
  StringValue(str);
64
64
 
65
65
  str = rb_funcall(str, id_encode, 1, rb_const_get(cEncoding, id_utf8));
66
-
66
+
67
67
  TTF_Font *font = Get_TTFont(rb_iv_get(self, "@font"))->font;
68
68
 
69
69
  VALUE *p_font_color = RARRAY_PTR(rb_iv_get(self, "@color"));
@@ -88,8 +88,9 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
88
88
  int hspace = NUM2INT(rb_iv_get(self, "@hspace"));
89
89
 
90
90
  SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
91
+ SDL_Rect drect;
91
92
 
92
- MiyakoBitmap src, dst;
93
+ MiyakoBitmap src, dst;
93
94
  _miyako_setup_unit(vdst, scr, &dst, vx, vy, 0);
94
95
 
95
96
  char *sptr = RSTRING_PTR(str);
@@ -97,7 +98,9 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
97
98
  src.x = dst.x;
98
99
  src.y = dst.y;
99
100
 
100
- int x, y;
101
+ int x, y;
102
+ Uint32 sr, sg, sb, sa;
103
+ Uint32 dr, dg, db, da;
101
104
 
102
105
  if(use_shadow == Qtrue)
103
106
  {
@@ -105,77 +108,140 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
105
108
 
106
109
  if(ssrc2 == NULL) return INT2NUM(src.x);
107
110
  Uint32 *psrc2 = (Uint32 *)(ssrc2->pixels);
108
-
111
+
109
112
  src.x += shadow_margin_x;
110
113
  src.y += shadow_margin_y;
111
-
112
- MiyakoSize size2;
113
- size2.w = dst.rect.w - (src.x < 0 ? -(src.x) : src.x);
114
- size2.h = dst.rect.h - (src.y < 0 ? -(src.y) : src.y);
115
- if(size2.w > ssrc2->w){ size2.w = ssrc2->w; }
116
- if(size2.h > ssrc2->h){ size2.h = ssrc2->h; }
117
-
118
- SDL_LockSurface(ssrc2);
119
- SDL_LockSurface(dst.surface);
120
-
121
- for(y = 0; y < size2.h; y++)
114
+
115
+ if(dst.surface == scr)
122
116
  {
123
- Uint32 *ppsrc2 = psrc2 + y * ssrc2->w;
124
- Uint32 *ppdst = dst.ptr + (src.y + y) * dst.surface->w + src.x;
125
- for(x = 0; x < size2.w; x++)
117
+ drect.x = src.x;
118
+ drect.y = src.y;
119
+ SDL_BlitSurface(ssrc2, NULL, dst.surface, &(drect));
120
+ }
121
+ else
122
+ {
123
+ MiyakoSize size2;
124
+ size2.w = dst.rect.w - (src.x < 0 ? 0 : src.x);
125
+ if(size2.w <= 0)
126
126
  {
127
- #if SDL_BYTEORDER == SDL_LIL_ENDIAN
128
- dst.color.a = (Uint32)(((*ppdst) >> 24) << dst.fmt->Aloss) & 0xff | dst.a255;
129
- src.color.a = (Uint32)(((*ppsrc2) >> 24) << ssrc2->format->Aloss) & 0xff;
130
- if(src.color.a == 0){ ppsrc2++; ppdst++; continue; }
131
- if(dst.color.a == 0 || src.color.a == 255){
132
- *ppdst = *ppsrc2;
133
- ppsrc2++;
134
- ppdst++;
135
- continue;
127
+ SDL_FreeSurface(ssrc2);
128
+ return INT2NUM(dst.x);
129
+ }
130
+ if(size2.w > ssrc2->w){ size2.w = ssrc2->w; }
131
+
132
+ int margin_x = 0;
133
+ if(src.x < 0)
134
+ {
135
+ int tmp_w = ssrc2->w + src.x;
136
+ if(tmp_w < size2.w) size2.w += src.x;
137
+ if(size2.w <= 0)
138
+ {
139
+ SDL_FreeSurface(ssrc2);
140
+ return INT2NUM(dst.x);
136
141
  }
137
- dst.color.r = (Uint32)(((*ppdst) >> 16)) & 0xff;
138
- dst.color.g = (Uint32)(((*ppdst) >> 8)) & 0xff;
139
- dst.color.b = (Uint32)(((*ppdst))) & 0xff;
140
- src.color.r = (Uint32)(((*ppsrc2) >> 16)) & 0xff;
141
- src.color.g = (Uint32)(((*ppsrc2) >> 8)) & 0xff;
142
- src.color.b = (Uint32)(((*ppsrc2))) & 0xff;
143
- int a1 = src.color.a + 1;
144
- int a2 = 256 - src.color.a;
145
- *ppdst = (((src.color.r * a1 + dst.color.r * a2) >> 8)) << 16 |
146
- (((src.color.g * a1 + dst.color.g * a2) >> 8)) << 8 |
147
- (((src.color.b * a1 + dst.color.b * a2) >> 8)) |
148
- (255 >> dst.fmt->Aloss) << 24;
149
- #else
150
- dst.color.a = (Uint32)(((*ppdst & dst.fmt->Amask)) << dst.fmt->Aloss) | dst.a255;
151
- src.color.a = (Uint32)(((*ppsrc2 & ssrc2->format->Amask)) << ssrc2->format->Aloss);
152
- if(src.color.a == 0){ ppsrc2++; ppdst++; continue; }
153
- if(dst.color.a == 0 || src.color.a == 255){
154
- *ppdst = *ppsrc2;
142
+ margin_x = -src.x;
143
+ src.x = 0;
144
+ }
145
+
146
+ size2.h = dst.rect.h - (src.y < 0 ? 0 : src.y);
147
+ if(size2.h <= 0)
148
+ {
149
+ SDL_FreeSurface(ssrc2);
150
+ return INT2NUM(dst.x);
151
+ }
152
+ if(size2.h > ssrc2->h){ size2.h = ssrc2->h; }
153
+
154
+ int margin_y = 0;
155
+ if(src.y < 0)
156
+ {
157
+ int tmp_h = ssrc2->h + src.y;
158
+ if(tmp_h < size2.h) size2.h += src.y;
159
+ if(size2.h <= 0)
160
+ {
161
+ SDL_FreeSurface(ssrc2);
162
+ return INT2NUM(dst.x);
163
+ }
164
+ margin_y = -src.y;
165
+ src.y = 0;
166
+ }
167
+
168
+ SDL_LockSurface(ssrc2);
169
+ SDL_LockSurface(dst.surface);
170
+
171
+ for(y = 0; y < size2.h; y++)
172
+ {
173
+ Uint32 *ppsrc2 = psrc2 + (y+margin_y) * ssrc2->w + margin_x;
174
+ Uint32 *ppdst = dst.ptr + (src.y + y) * dst.surface->w + src.x;
175
+ for(x = 0; x < size2.w; x++)
176
+ {
177
+ #if SDL_BYTEORDER == SDL_LIL_ENDIAN
178
+ da = (*ppdst >> 24) | dst.a255;
179
+ sa = *ppsrc2 >> 24;
180
+ if(sa == 0){ ppsrc2++; ppdst++; continue; }
181
+ if(da == 0 || sa == 255){
182
+ *ppdst = *ppsrc2;
183
+ ppsrc2++;
184
+ ppdst++;
185
+ continue;
186
+ }
187
+ #if 0
188
+ dr = (Uint32)((*ppdst >> 16)) & 0xff;
189
+ dg = (Uint32)((*ppdst >> 8)) & 0xff;
190
+ db = (Uint32)((*ppdst)) & 0xff;
191
+ sr = (Uint32)((*ppsrc2 >> 16)) & 0xff;
192
+ sg = (Uint32)((*ppsrc2 >> 8)) & 0xff;
193
+ sb = (Uint32)((*ppsrc2)) & 0xff;
194
+ int a1 = sa + 1;
195
+ int a2 = 256 - sa;
196
+ *ppdst = (((sr * a1 + dr * a2) >> 8)) << 16 |
197
+ (((sg * a1 + dg * a2) >> 8)) << 8 |
198
+ (((sb * a1 + db * a2) >> 8)) |
199
+ 0xff000000;
200
+ #else
201
+ dr = *ppdst & 0xff0000;
202
+ dg = *ppdst & 0xff00;
203
+ db = *ppdst & 0xff;
204
+ sr = *ppsrc2 & 0xff0000;
205
+ sg = *ppsrc2 & 0xff00;
206
+ sb = *ppsrc2 & 0xff;
207
+ int a1 = sa + 1;
208
+ int a2 = 256 - sa;
209
+ *ppdst = ((sr * a1 + dr * a2) & 0xff000000 |
210
+ (sg * a1 + dg * a2) & 0xff0000 |
211
+ (sb * a1 + db * a2)) >> 8 |
212
+ 0xff000000;
213
+ #endif
214
+ #else
215
+ da = (Uint32)(((*ppdst & dst.fmt->Amask) | dst.a255;
216
+ sa = (Uint32)(((*ppsrc2 & ssrc2->format->Amask)));
217
+ if(sa == 0){ ppsrc2++; ppdst++; continue; }
218
+ if(da == 0 || sa == 255){
219
+ *ppdst = *ppsrc2;
220
+ ppsrc2++;
221
+ ppdst++;
222
+ continue;
223
+ }
224
+ dr = (Uint32)(((*ppdst & dst.fmt->Rmask) >> dst.fmt->Rshift));
225
+ dg = (Uint32)(((*ppdst & dst.fmt->Gmask) >> dst.fmt->Gshift));
226
+ db = (Uint32)(((*ppdst & dst.fmt->Bmask) >> dst.fmt->Bshift));
227
+ sr = (Uint32)(((*ppsrc2 & ssrc2->format->Rmask) >> ssrc2->format->Rshift));
228
+ sg = (Uint32)(((*ppsrc2 & ssrc2->format->Gmask) >> ssrc2->format->Gshift));
229
+ sb = (Uint32)(((*ppsrc2 & ssrc2->format->Bmask) >> ssrc2->format->Bshift));
230
+ int a1 = sa + 1;
231
+ int a2 = 256 - sa;
232
+ *ppdst = (((sr * a1 + dr * a2) >> 8)) << dst.fmt->Rshift |
233
+ (((sg * a1 + dg * a2) >> 8)) << dst.fmt->Gshift |
234
+ (((sb * a1 + db * a2) >> 8)) << dst.fmt->Bshift |
235
+ (255 >> dst.fmt->Aloss);
236
+ #endif
155
237
  ppsrc2++;
156
238
  ppdst++;
157
- continue;
158
239
  }
159
- dst.color.r = (Uint32)(((*ppdst & dst.fmt->Rmask) >> dst.fmt->Rshift));
160
- dst.color.g = (Uint32)(((*ppdst & dst.fmt->Gmask) >> dst.fmt->Gshift));
161
- dst.color.b = (Uint32)(((*ppdst & dst.fmt->Bmask) >> dst.fmt->Bshift));
162
- src.color.r = (Uint32)(((*ppsrc2 & ssrc2->format->Rmask) >> ssrc2->format->Rshift));
163
- src.color.g = (Uint32)(((*ppsrc2 & ssrc2->format->Gmask) >> ssrc2->format->Gshift));
164
- src.color.b = (Uint32)(((*ppsrc2 & ssrc2->format->Bmask) >> ssrc2->format->Bshift));
165
- int a1 = src.color.a + 1;
166
- int a2 = 256 - src.color.a;
167
- *ppdst = (((src.color.r * a1 + dst.color.r * a2) >> 8)) << dst.fmt->Rshift |
168
- (((src.color.g * a1 + dst.color.g * a2) >> 8)) << dst.fmt->Gshift |
169
- (((src.color.b * a1 + dst.color.b * a2) >> 8)) << dst.fmt->Bshift |
170
- (255 >> dst.fmt->Aloss);
171
- #endif
172
- ppsrc2++;
173
- ppdst++;
174
240
  }
175
- }
176
241
 
177
- SDL_UnlockSurface(ssrc2);
178
- SDL_UnlockSurface(dst.surface);
242
+ SDL_UnlockSurface(ssrc2);
243
+ SDL_UnlockSurface(dst.surface);
244
+ }
179
245
 
180
246
  SDL_FreeSurface(ssrc2);
181
247
 
@@ -187,75 +253,139 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
187
253
 
188
254
  if(ssrc == NULL) return INT2NUM(src.x);
189
255
 
190
- Uint32 *psrc = (Uint32 *)(ssrc->pixels);
191
-
192
- MiyakoSize size;
193
- size.w = dst.rect.w - (src.x < 0 ? -(src.x) : src.x);
194
- size.h = dst.rect.h - (src.y < 0 ? -(src.y) : src.y);
195
- if(size.w > ssrc->w){ size.w = ssrc->w; }
196
- if(size.h > ssrc->h){ size.h = ssrc->h; }
197
-
198
- SDL_LockSurface(ssrc);
199
- SDL_LockSurface(dst.surface);
200
-
201
- for(y = 0; y < size.h; y++)
202
- {
203
- Uint32 *ppsrc = psrc + y * ssrc->w;
204
- Uint32 *ppdst = dst.ptr + (src.y + y) * dst.surface->w + src.x;
205
- for(x = 0; x < size.w; x++)
206
- {
256
+ if(dst.surface == scr)
257
+ {
258
+ drect.x = src.x;
259
+ drect.y = src.y;
260
+ SDL_BlitSurface(ssrc, NULL, dst.surface, &(drect));
261
+ }
262
+ else
263
+ {
264
+ Uint32 *psrc = (Uint32 *)(ssrc->pixels);
265
+
266
+ MiyakoSize size;
267
+
268
+ size.w = dst.rect.w - (src.x < 0 ? 0 : src.x);
269
+ if(size.w <= 0)
270
+ {
271
+ SDL_FreeSurface(ssrc);
272
+ return INT2NUM(dst.x);
273
+ }
274
+ if(size.w > ssrc->w){ size.w = ssrc->w; }
275
+
276
+ int margin_x = 0;
277
+ if(src.x < 0)
278
+ {
279
+ int tmp_w = ssrc->w + src.x;
280
+ if(tmp_w < size.w) size.w += src.x;
281
+ if(size.w <= 0)
282
+ {
283
+ SDL_FreeSurface(ssrc);
284
+ return INT2NUM(dst.x);
285
+ }
286
+ margin_x = -src.x;
287
+ src.x = 0;
288
+ }
289
+
290
+ size.h = dst.rect.h - (src.y < 0 ? 0 : src.y);
291
+ if(size.h <= 0)
292
+ {
293
+ SDL_FreeSurface(ssrc);
294
+ return INT2NUM(dst.x);
295
+ }
296
+ if(size.h > ssrc->h){ size.h = ssrc->h; }
297
+
298
+ int margin_y = 0;
299
+ if(src.y < 0)
300
+ {
301
+ int tmp_h = ssrc->h + src.y;
302
+ if(tmp_h < size.h) size.h += src.y;
303
+ if(size.h <= 0)
304
+ {
305
+ SDL_FreeSurface(ssrc);
306
+ return INT2NUM(dst.x);
307
+ }
308
+ margin_y = -src.y;
309
+ src.y = 0;
310
+ }
311
+
312
+ SDL_LockSurface(ssrc);
313
+ SDL_LockSurface(dst.surface);
314
+
315
+ for(y = 0; y < size.h; y++)
316
+ {
317
+ Uint32 *ppsrc = psrc + (y+margin_y) * ssrc->w + margin_x;
318
+ Uint32 *ppdst = dst.ptr + (src.y + y) * dst.surface->w + src.x;
319
+ for(x = 0; x < size.w; x++)
320
+ {
207
321
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
208
- dst.color.a = (Uint32)(((*ppdst) >> 24) << dst.fmt->Aloss) & 0xff | dst.a255;
209
- src.color.a = (Uint32)(((*ppsrc) >> 24) << ssrc->format->Aloss) & 0xff;
210
- if(src.color.a == 0){ ppsrc++; ppdst++; continue; }
211
- if(dst.color.a == 0 || src.color.a == 255){
212
- *ppdst = *ppsrc;
213
- ppsrc++;
214
- ppdst++;
215
- continue;
216
- }
217
- dst.color.r = (Uint32)(((*ppdst) >> 16)) & 0xff;
218
- dst.color.g = (Uint32)(((*ppdst) >> 8)) & 0xff;
219
- dst.color.b = (Uint32)(((*ppdst))) & 0xff;
220
- src.color.r = (Uint32)(((*ppsrc) >> 16)) & 0xff;
221
- src.color.g = (Uint32)(((*ppsrc) >> 8)) & 0xff;
222
- src.color.b = (Uint32)(((*ppsrc))) & 0xff;
223
- int a1 = src.color.a + 1;
224
- int a2 = 256 - src.color.a;
225
- *ppdst = (((src.color.r * a1 + dst.color.r * a2) >> 8)) << 16 |
226
- (((src.color.g * a1 + dst.color.g * a2) >> 8)) << 8 |
227
- (((src.color.b * a1 + dst.color.b * a2) >> 8)) |
228
- (255 >> dst.fmt->Aloss) << 24;
322
+ da = (*ppdst >> 24) | dst.a255;
323
+ sa = *ppsrc >> 24;
324
+ if(sa == 0){ ppsrc++; ppdst++; continue; }
325
+ if(da == 0 || sa == 255){
326
+ *ppdst = *ppsrc;
327
+ ppsrc++;
328
+ ppdst++;
329
+ continue;
330
+ }
331
+ #if 0
332
+ dr = (Uint32)(((*ppdst) >> 16)) & 0xff;
333
+ dg = (Uint32)(((*ppdst) >> 8)) & 0xff;
334
+ db = (Uint32)(((*ppdst))) & 0xff;
335
+ sr = (Uint32)(((*ppsrc) >> 16)) & 0xff;
336
+ sg = (Uint32)(((*ppsrc) >> 8)) & 0xff;
337
+ sb = (Uint32)(((*ppsrc))) & 0xff;
338
+ int a1 = sa + 1;
339
+ int a2 = 256 - sa;
340
+ *ppdst = (((sr * a1 + dr * a2) >> 8)) << 16 |
341
+ (((sg * a1 + dg * a2) >> 8)) << 8 |
342
+ (((sb * a1 + db * a2) >> 8)) |
343
+ 0xff000000;
344
+ #else
345
+ dr = *ppdst & 0xff0000;
346
+ dg = *ppdst & 0xff00;
347
+ db = *ppdst & 0xff;
348
+ sr = *ppsrc & 0xff0000;
349
+ sg = *ppsrc & 0xff00;
350
+ sb = *ppsrc & 0xff;
351
+ int a1 = sa + 1;
352
+ int a2 = 256 - sa;
353
+ *ppdst = ((sr * a1 + dr * a2) & 0xff000000 |
354
+ (sg * a1 + dg * a2) & 0xff0000 |
355
+ (sb * a1 + db * a2)) >> 8 |
356
+ 0xff000000;
357
+ #endif
229
358
  #else
230
- dst.color.a = (Uint32)(((*ppdst & dst.fmt->Amask)) << dst.fmt->Aloss) | dst.a255;
231
- src.color.a = (Uint32)(((*ppsrc & ssrc->format->Amask)) << ssrc->format->Aloss);
232
- if(src.color.a == 0){ ppsrc++; ppdst++; continue; }
233
- if(dst.color.a == 0 || src.color.a == 255){
234
- *ppdst = *ppsrc;
235
- ppsrc++;
236
- ppdst++;
237
- continue;
238
- }
239
- dst.color.r = (Uint32)(((*ppdst & dst.fmt->Rmask) >> dst.fmt->Rshift));
240
- dst.color.g = (Uint32)(((*ppdst & dst.fmt->Gmask) >> dst.fmt->Gshift));
241
- dst.color.b = (Uint32)(((*ppdst & dst.fmt->Bmask) >> dst.fmt->Bshift));
242
- src.color.r = (Uint32)(((*ppsrc & ssrc->format->Rmask) >> ssrc->format->Rshift));
243
- src.color.g = (Uint32)(((*ppsrc & ssrc->format->Gmask) >> ssrc->format->Gshift));
244
- src.color.b = (Uint32)(((*ppsrc & ssrc->format->Bmask) >> ssrc->format->Bshift));
245
- int a1 = src.color.a + 1;
246
- int a2 = 256 - src.color.a;
247
- *ppdst = (((src.color.r * a1 + dst.color.r * a2) >> 8)) << dst.fmt->Rshift |
248
- (((src.color.g * a1 + dst.color.g * a2) >> 8)) << dst.fmt->Gshift |
249
- (((src.color.b * a1 + dst.color.b * a2) >> 8)) << dst.fmt->Bshift |
250
- (255 >> dst.fmt->Aloss);
359
+ da = (Uint32)(((*ppdst & dst.fmt->Amask)) << dst.fmt->Aloss) | dst.a255;
360
+ sa = (Uint32)(((*ppsrc & ssrc->format->Amask)) << ssrc->format->Aloss);
361
+ if(sa == 0){ ppsrc++; ppdst++; continue; }
362
+ if(da == 0 || sa == 255){
363
+ *ppdst = *ppsrc;
364
+ ppsrc++;
365
+ ppdst++;
366
+ continue;
367
+ }
368
+ dr = (Uint32)(((*ppdst & dst.fmt->Rmask) >> dst.fmt->Rshift));
369
+ dg = (Uint32)(((*ppdst & dst.fmt->Gmask) >> dst.fmt->Gshift));
370
+ db = (Uint32)(((*ppdst & dst.fmt->Bmask) >> dst.fmt->Bshift));
371
+ sr = (Uint32)(((*ppsrc & ssrc->format->Rmask) >> ssrc->format->Rshift));
372
+ sg = (Uint32)(((*ppsrc & ssrc->format->Gmask) >> ssrc->format->Gshift));
373
+ sb = (Uint32)(((*ppsrc & ssrc->format->Bmask) >> ssrc->format->Bshift));
374
+ int a1 = sa + 1;
375
+ int a2 = 256 - sa;
376
+ *ppdst = (((sr * a1 + dr * a2) >> 8)) << dst.fmt->Rshift |
377
+ (((sg * a1 + dg * a2) >> 8)) << dst.fmt->Gshift |
378
+ (((sb * a1 + db * a2) >> 8)) << dst.fmt->Bshift |
379
+ (255 >> dst.fmt->Aloss);
251
380
  #endif
252
- ppsrc++;
253
- ppdst++;
254
- }
255
- }
381
+ ppsrc++;
382
+ ppdst++;
383
+ }
384
+ }
256
385
 
257
- SDL_UnlockSurface(ssrc);
258
- SDL_UnlockSurface(dst.surface);
386
+ SDL_UnlockSurface(ssrc);
387
+ SDL_UnlockSurface(dst.surface);
388
+ }
259
389
  SDL_FreeSurface(ssrc);
260
390
 
261
391
  int i, n;
data/miyako_input_audio.c CHANGED
@@ -72,19 +72,19 @@ static VALUE input_update(VALUE self)
72
72
  int i;
73
73
  VALUE *ptr;
74
74
 
75
- VALUE btn = rb_iv_get(self, "@@btn");
76
- VALUE mouse = rb_iv_get(self, "@@mouse");
77
- VALUE process = rb_iv_get(self, "@@process");
78
- VALUE toggle = rb_iv_get(self, "@@toggle_screen_mode");
75
+ VALUE btn = rb_iv_get(self, "@@btn");
76
+ VALUE mouse = rb_iv_get(self, "@@mouse");
77
+ VALUE process = rb_iv_get(self, "@@process");
78
+ VALUE toggle = rb_iv_get(self, "@@toggle_screen_mode");
79
79
 
80
80
  VALUE trigger = rb_hash_lookup(btn, sy_trigger);
81
81
  VALUE pushed = rb_hash_lookup(btn, sy_pushed);
82
82
  VALUE click = rb_hash_lookup(mouse, sy_click);
83
83
  VALUE drop = rb_hash_lookup(mouse, sy_drop);
84
84
  VALUE pos = rb_hash_lookup(mouse, sy_pos);
85
-
85
+
86
86
  rb_funcall(cJoystick, id_update_all, 0);
87
-
87
+
88
88
  VALUE keys = rb_funcall(pushed, rb_intern("keys"), 0);
89
89
  ptr = RARRAY_PTR(keys);
90
90
  for(i=0; i<RARRAY_LEN(keys); i++)
@@ -100,7 +100,7 @@ static VALUE input_update(VALUE self)
100
100
  rb_hash_aset(drop, sy_left, Qfalse);
101
101
  rb_hash_aset(drop, sy_middle, Qfalse);
102
102
  rb_hash_aset(drop, sy_right, Qfalse);
103
-
103
+
104
104
  VALUE e_list = rb_ary_new();
105
105
  VALUE e = rb_funcall(cEvent, id_poll, 0);
106
106
  while(e != Qnil)
@@ -125,10 +125,15 @@ static VALUE input_update(VALUE self)
125
125
  rb_hash_aset(pushed, sy_ent, nZero);
126
126
  }
127
127
  }
128
-
128
+
129
129
  return Qnil;
130
130
  }
131
131
 
132
+ void _miyako_input_update()
133
+ {
134
+ input_update(mInput);
135
+ }
136
+
132
137
  /*
133
138
  :nodoc:
134
139
  */
@@ -136,7 +141,7 @@ static VALUE bgm_update(VALUE self)
136
141
  {
137
142
  VALUE nua = rb_gv_get("$not_use_audio");
138
143
  if(nua == Qfalse) return Qnil;
139
-
144
+
140
145
  VALUE pb = rb_iv_get(self, "@@playin_bgm");
141
146
  if(pb == Qnil) return Qnil;
142
147
 
@@ -167,14 +172,14 @@ static VALUE se_update(VALUE self)
167
172
  {
168
173
  VALUE nua = rb_gv_get("$not_use_audio");
169
174
  if(nua == Qfalse) return Qnil;
170
-
175
+
171
176
  VALUE playings = rb_iv_get(self, "@@playings");
172
177
  VALUE *ptr = RARRAY_PTR(playings);
173
178
  int i;
174
179
  for(i=0; i<RARRAY_LEN(playings); i++)
175
180
  {
176
181
  VALUE pl = *(ptr+i);
177
-
182
+
178
183
  if(rb_funcall(pl, id_is_playing_wo_loop, 0) == Qfalse &&
179
184
  rb_funcall(pl, id_in_the_loop, 0) == Qtrue)
180
185
  {
@@ -192,7 +197,7 @@ static VALUE se_update(VALUE self)
192
197
  rb_funcall(pl, id_allow_countup, 0);
193
198
  }
194
199
  }
195
-
200
+
196
201
  return Qnil;
197
202
  }
198
203
 
@@ -206,6 +211,11 @@ static VALUE audio_update(VALUE self)
206
211
  return self;
207
212
  }
208
213
 
214
+ void _miyako_audio_update()
215
+ {
216
+ audio_update(mAudio);
217
+ }
218
+
209
219
  void Init_miyako_input_audio()
210
220
  {
211
221
  mSDL = rb_define_module("SDL");
@@ -247,8 +257,8 @@ void Init_miyako_input_audio()
247
257
  one = 1;
248
258
  nOne = INT2NUM(one);
249
259
 
250
- rb_define_module_function(mInput, "update", input_update, 0);
251
- rb_define_module_function(mAudio, "update", audio_update, 0);
260
+ rb_define_singleton_method(mInput, "update", input_update, 0);
261
+ rb_define_singleton_method(mAudio, "update", audio_update, 0);
252
262
  rb_define_singleton_method(cBGM, "update", bgm_update, 0);
253
263
  rb_define_singleton_method(cSE, "update", se_update, 0);
254
264
  }