ruby-miyako 2.1.4 → 2.1.5
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.
- data/README +42 -5
- data/lib/Miyako/API/choices.rb +0 -2
- data/lib/Miyako/API/collision.rb +0 -4
- data/lib/Miyako/API/fixedmap.rb +0 -3
- data/lib/Miyako/API/i_yuki.rb +28 -46
- data/lib/Miyako/API/layout.rb +0 -1
- data/lib/Miyako/API/map.rb +0 -2
- data/lib/Miyako/API/map_event.rb +0 -3
- data/lib/Miyako/API/map_struct.rb +0 -2
- data/lib/Miyako/API/parts.rb +0 -11
- data/lib/Miyako/API/screen.rb +3 -4
- data/lib/Miyako/API/shape.rb +27 -27
- data/lib/Miyako/API/sprite.rb +0 -2
- data/lib/Miyako/API/story.rb +0 -2
- data/lib/Miyako/API/textbox.rb +9 -11
- data/lib/Miyako/API/utility.rb +2 -2
- data/lib/Miyako/API/yuki.rb +19 -8
- data/lib/Miyako/miyako.rb +3 -0
- data/miyako_basicdata.c +52 -5
- data/miyako_bitmap.c +351 -342
- data/miyako_collision.c +77 -67
- data/miyako_diagram.c +22 -21
- data/miyako_drawing.c +9 -6
- data/miyako_font.c +63 -53
- data/miyako_hsv.c +428 -436
- data/miyako_input_audio.c +17 -14
- data/miyako_layout.c +23 -18
- data/miyako_no_katana.c +284 -248
- data/miyako_sprite2.c +30 -18
- data/miyako_transform.c +95 -93
- data/miyako_utility.c +9 -18
- data/miyako_yuki.c +10 -6
- data/sample/Diagram_sample/diagram_sample_yuki2.rb +2 -2
- data/sample/Room3/room3.rb +8 -10
- data/sample/ball_action_sample.rb +8 -8
- data/sample/map_test/main_scene.rb +1 -1
- data/sample/map_test/map_test.rb +8 -8
- data/sample/takahashi.rb +14 -14
- data/win/miyako_no_katana.so +0 -0
- metadata +6 -4
data/miyako_no_katana.c
CHANGED
@@ -20,8 +20,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
20
20
|
*/
|
21
21
|
|
22
22
|
/*
|
23
|
-
|
24
|
-
Authors::
|
23
|
+
=miyako_no_katana
|
24
|
+
Authors:: Cyross Makoto
|
25
25
|
Version:: 2.0
|
26
26
|
Copyright:: 2007-2008 Cyross Makoto
|
27
27
|
License:: LGPL2.1
|
@@ -152,31 +152,31 @@ static VALUE sprite_get_rect(VALUE src, int *dst)
|
|
152
152
|
}
|
153
153
|
|
154
154
|
/*
|
155
|
-
===内部用レンダメソッド
|
156
155
|
*/
|
157
156
|
static void render_to_inner(MiyakoBitmap *sb, MiyakoBitmap *db)
|
158
157
|
{
|
158
|
+
int x, y, a1, a2;
|
159
|
+
MiyakoSize size;
|
160
|
+
Uint32 src_y, dst_y, src_x, dst_x, *psrc, *pdst;
|
159
161
|
if(sb->ptr == db->ptr){ return; }
|
160
162
|
|
161
|
-
MiyakoSize size;
|
162
163
|
if(_miyako_init_rect(sb, db, &size) == 0) return;
|
163
164
|
|
164
165
|
SDL_LockSurface(sb->surface);
|
165
166
|
SDL_LockSurface(db->surface);
|
166
167
|
|
167
|
-
int x, y;
|
168
168
|
for(y = 0; y < size.h; y++)
|
169
169
|
{
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
170
|
+
src_y = (sb->rect.y + y);
|
171
|
+
dst_y = (db->rect.y + sb->y + y);
|
172
|
+
src_x = sb->rect.x;
|
173
|
+
dst_x = db->rect.x + sb->x;
|
174
174
|
|
175
175
|
if(src_y < 0 || dst_y < 0){ continue; }
|
176
176
|
if(src_y >= sb->surface->h || dst_y >= db->surface->h){ break; }
|
177
177
|
|
178
|
-
|
179
|
-
|
178
|
+
psrc = sb->ptr + src_y * sb->surface->w + src_x;
|
179
|
+
pdst = db->ptr + dst_y * db->surface->w + dst_x;
|
180
180
|
for(x = 0; x < size.w; x++)
|
181
181
|
{
|
182
182
|
if(src_x < 0 || dst_x < 0){ psrc++; pdst++; src_x++; dst_x++; continue; }
|
@@ -193,8 +193,8 @@ static void render_to_inner(MiyakoBitmap *sb, MiyakoBitmap *db)
|
|
193
193
|
dst_x++;
|
194
194
|
continue;
|
195
195
|
}
|
196
|
-
|
197
|
-
|
196
|
+
a1 = sb->color.a + 1;
|
197
|
+
a2 = 256 - sb->color.a;
|
198
198
|
sb->color.r = (*psrc >> 16) & 0xff;
|
199
199
|
sb->color.g = (*psrc >> 8) & 0xff;
|
200
200
|
sb->color.b = (*psrc ) & 0xff;
|
@@ -217,8 +217,8 @@ static void render_to_inner(MiyakoBitmap *sb, MiyakoBitmap *db)
|
|
217
217
|
dst_x++;
|
218
218
|
continue;
|
219
219
|
}
|
220
|
-
|
221
|
-
|
220
|
+
a1 = sb->color.a + 1;
|
221
|
+
a2 = 256 - sb->color.a;
|
222
222
|
sb->color.r = (*psrc & sb->fmt->Rmask) >> sb->fmt->Rshift;
|
223
223
|
sb->color.g = (*psrc & sb->fmt->Gmask) >> sb->fmt->Gshift;
|
224
224
|
sb->color.b = (*psrc & sb->fmt->Bmask) >> sb->fmt->Bshift;
|
@@ -242,7 +242,6 @@ static void render_to_inner(MiyakoBitmap *sb, MiyakoBitmap *db)
|
|
242
242
|
}
|
243
243
|
|
244
244
|
/*
|
245
|
-
===内部用レンダメソッド
|
246
245
|
*/
|
247
246
|
static void render_inner(MiyakoBitmap *sb, MiyakoBitmap *db)
|
248
247
|
{
|
@@ -252,20 +251,20 @@ static void render_inner(MiyakoBitmap *sb, MiyakoBitmap *db)
|
|
252
251
|
}
|
253
252
|
|
254
253
|
/*
|
255
|
-
インスタンスの内容を画面に描画する
|
256
254
|
*/
|
257
255
|
static VALUE sprite_b_render_xy(VALUE self, VALUE vx, VALUE vy)
|
258
256
|
{
|
257
|
+
VALUE cls, *p_pos, x, y;
|
259
258
|
if(rb_iv_get(self, str_visible) == Qfalse) return self;
|
260
|
-
|
259
|
+
cls = rb_obj_class(self);
|
261
260
|
if(rb_funcall(cls, id_defined, ID2SYM(id_move_to)) == Qfalse ||
|
262
261
|
rb_funcall(cls, id_defined, ID2SYM(id_pos)) == Qfalse ){
|
263
262
|
rb_funcall(self, id_render, 0);
|
264
263
|
return self;
|
265
264
|
}
|
266
|
-
|
267
|
-
|
268
|
-
|
265
|
+
p_pos = RSTRUCT_PTR(_miyako_layout_pos(self));
|
266
|
+
x = *(p_pos + 0);
|
267
|
+
y = *(p_pos + 1);
|
269
268
|
_miyako_layout_move_to(self, vx, vy);
|
270
269
|
rb_funcall(self, id_render, 0);
|
271
270
|
_miyako_layout_move_to(self, x, y);
|
@@ -273,20 +272,20 @@ static VALUE sprite_b_render_xy(VALUE self, VALUE vx, VALUE vy)
|
|
273
272
|
}
|
274
273
|
|
275
274
|
/*
|
276
|
-
インスタンスの内容を別のインスタンスに描画する
|
277
275
|
*/
|
278
276
|
static VALUE sprite_b_render_xy_to_sprite(VALUE self, VALUE vdst, VALUE vx, VALUE vy)
|
279
277
|
{
|
278
|
+
VALUE cls, *p_pos, x, y;
|
280
279
|
if(rb_iv_get(self, str_visible) == Qfalse) return self;
|
281
|
-
|
280
|
+
cls = rb_obj_class(self);
|
282
281
|
if(rb_funcall(cls, id_defined, ID2SYM(id_move_to)) == Qfalse ||
|
283
282
|
rb_funcall(cls, id_defined, ID2SYM(id_pos)) == Qfalse ){
|
284
283
|
rb_funcall(self, id_render_to, 1, vdst);
|
285
284
|
return self;
|
286
285
|
}
|
287
|
-
|
288
|
-
|
289
|
-
|
286
|
+
p_pos = RSTRUCT_PTR(_miyako_layout_pos(self));
|
287
|
+
x = *(p_pos + 0);
|
288
|
+
y = *(p_pos + 1);
|
290
289
|
_miyako_layout_move_to(self, vx, vy);
|
291
290
|
rb_funcall(self, id_render_to, 1, vdst);
|
292
291
|
_miyako_layout_move_to(self, x, y);
|
@@ -294,7 +293,6 @@ static VALUE sprite_b_render_xy_to_sprite(VALUE self, VALUE vdst, VALUE vx, VALU
|
|
294
293
|
}
|
295
294
|
|
296
295
|
/*
|
297
|
-
インスタンスの内容を別のインスタンスに描画する
|
298
296
|
*/
|
299
297
|
static VALUE sprite_c_render_to_sprite(VALUE self, VALUE vsrc, VALUE vdst)
|
300
298
|
{
|
@@ -306,27 +304,28 @@ static VALUE sprite_c_render_to_sprite(VALUE self, VALUE vsrc, VALUE vdst)
|
|
306
304
|
}
|
307
305
|
|
308
306
|
/*
|
309
|
-
インスタンスの内容を画面に描画する
|
310
307
|
*/
|
311
308
|
static VALUE sprite_render(VALUE self)
|
312
309
|
{
|
310
|
+
VALUE src_unit, dst_unit, *s_p, *d_p;
|
311
|
+
SDL_Surface *src, *dst;
|
312
|
+
SDL_Rect srect, drect;
|
313
|
+
|
313
314
|
if(rb_iv_get(self, str_visible) == Qfalse) return self;
|
314
315
|
|
315
|
-
|
316
|
-
|
316
|
+
src_unit = rb_iv_get(self, "@unit");
|
317
|
+
dst_unit = rb_iv_get(mScreen, "@@unit");
|
317
318
|
|
318
|
-
|
319
|
-
|
319
|
+
src = GetSurface(*(RSTRUCT_PTR(src_unit)+0))->surface;
|
320
|
+
dst = GetSurface(*(RSTRUCT_PTR(dst_unit)+0))->surface;
|
320
321
|
|
321
|
-
|
322
|
-
|
323
|
-
VALUE *s_p = RSTRUCT_PTR(src_unit);
|
322
|
+
s_p = RSTRUCT_PTR(src_unit);
|
324
323
|
srect.x = NUM2INT(*(s_p + 1));
|
325
324
|
srect.y = NUM2INT(*(s_p + 2));
|
326
325
|
srect.w = NUM2INT(*(s_p + 3));
|
327
326
|
srect.h = NUM2INT(*(s_p + 4));
|
328
327
|
|
329
|
-
|
328
|
+
d_p = RSTRUCT_PTR(dst_unit);
|
330
329
|
drect.x = NUM2INT(*(d_p + 1)) + NUM2INT(*(s_p + 5));
|
331
330
|
drect.y = NUM2INT(*(d_p + 2)) + NUM2INT(*(s_p + 6));
|
332
331
|
drect.w = NUM2INT(*(d_p + 3));
|
@@ -342,40 +341,41 @@ VALUE _miyako_sprite_render(VALUE sprite)
|
|
342
341
|
}
|
343
342
|
|
344
343
|
/*
|
345
|
-
インスタンスの内容を別のインスタンスに描画する
|
346
344
|
*/
|
347
345
|
static VALUE sprite_render_to_sprite(VALUE self, VALUE vdst)
|
348
346
|
{
|
349
|
-
if(rb_iv_get(self, str_visible) == Qfalse) return self;
|
350
347
|
MiyakoBitmap src, dst;
|
351
|
-
SDL_Surface
|
348
|
+
SDL_Surface *scr;
|
349
|
+
if(rb_iv_get(self, str_visible) == Qfalse) return self;
|
350
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
352
351
|
_miyako_setup_unit_2(self, vdst, scr, &src, &dst, Qnil, Qnil, 1);
|
353
352
|
render_to_inner(&src, &dst);
|
354
353
|
return self;
|
355
354
|
}
|
356
355
|
|
357
356
|
/*
|
358
|
-
インスタンスの内容を画面に描画する
|
359
357
|
*/
|
360
358
|
static VALUE sprite_render_xy(VALUE self, VALUE vx, VALUE vy)
|
361
359
|
{
|
362
|
-
|
360
|
+
VALUE src_unit, dst_unit, *s_p, *d_p;
|
361
|
+
SDL_Surface *src, *dst;
|
362
|
+
SDL_Rect srect, drect;
|
363
363
|
|
364
|
-
|
365
|
-
VALUE dst_unit = rb_iv_get(mScreen, "@@unit");
|
364
|
+
if(rb_iv_get(self, str_visible) == Qfalse) return self;
|
366
365
|
|
367
|
-
|
368
|
-
|
366
|
+
src_unit = rb_iv_get(self, "@unit");
|
367
|
+
dst_unit = rb_iv_get(mScreen, "@@unit");
|
369
368
|
|
370
|
-
|
369
|
+
src = GetSurface(*(RSTRUCT_PTR(src_unit)+0))->surface;
|
370
|
+
dst = GetSurface(*(RSTRUCT_PTR(dst_unit)+0))->surface;
|
371
371
|
|
372
|
-
|
372
|
+
s_p = RSTRUCT_PTR(src_unit);
|
373
373
|
srect.x = NUM2INT(*(s_p + 1));
|
374
374
|
srect.y = NUM2INT(*(s_p + 2));
|
375
375
|
srect.w = NUM2INT(*(s_p + 3));
|
376
376
|
srect.h = NUM2INT(*(s_p + 4));
|
377
377
|
|
378
|
-
|
378
|
+
d_p = RSTRUCT_PTR(dst_unit);
|
379
379
|
drect.x = NUM2INT(*(d_p + 1)) + NUM2INT(vx);
|
380
380
|
drect.y = NUM2INT(*(d_p + 2)) + NUM2INT(vy);
|
381
381
|
drect.w = NUM2INT(*(d_p + 3));
|
@@ -391,14 +391,15 @@ VALUE _miyako_sprite_render_xy(VALUE sprite, VALUE x, VALUE y)
|
|
391
391
|
}
|
392
392
|
|
393
393
|
/*
|
394
|
-
インスタンスの内容を別のインスタンスに描画する
|
395
394
|
*/
|
396
395
|
static VALUE sprite_render_xy_to_sprite(VALUE self, VALUE vdst, VALUE vx, VALUE vy)
|
397
396
|
{
|
397
|
+
MiyakoBitmap src, dst;
|
398
|
+
SDL_Surface *scr;
|
399
|
+
|
398
400
|
VALUE visible = rb_iv_get(self, str_visible);
|
399
401
|
if(visible == Qfalse) return self;
|
400
|
-
|
401
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
402
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
402
403
|
_miyako_setup_unit_2(self, vdst, scr, &src, &dst, Qnil, Qnil, 1);
|
403
404
|
src.x = NUM2INT(vx);
|
404
405
|
src.y = NUM2INT(vy);
|
@@ -407,30 +408,31 @@ static VALUE sprite_render_xy_to_sprite(VALUE self, VALUE vdst, VALUE vx, VALUE
|
|
407
408
|
}
|
408
409
|
|
409
410
|
/*
|
410
|
-
インスタンスの内容を画面に描画する
|
411
411
|
*/
|
412
412
|
static VALUE sprite_render_rect(VALUE self, VALUE vrect)
|
413
413
|
{
|
414
|
-
|
415
|
-
|
414
|
+
VALUE src_unit, dst_unit, *s_p, *d_p;
|
415
|
+
SDL_Surface *src, *dst;
|
416
|
+
SDL_Rect srect, drect;
|
416
417
|
int rect[4];
|
417
|
-
sprite_get_rect(vrect, &(rect[0]));
|
418
418
|
|
419
|
-
|
420
|
-
VALUE dst_unit = rb_iv_get(mScreen, "@@unit");
|
419
|
+
if(rb_iv_get(self, str_visible) == Qfalse) return self;
|
421
420
|
|
422
|
-
|
423
|
-
SDL_Surface *dst = GetSurface(*(RSTRUCT_PTR(dst_unit)+0))->surface;
|
421
|
+
sprite_get_rect(vrect, &(rect[0]));
|
424
422
|
|
425
|
-
|
423
|
+
src_unit = rb_iv_get(self, "@unit");
|
424
|
+
dst_unit = rb_iv_get(mScreen, "@@unit");
|
426
425
|
|
427
|
-
|
426
|
+
src = GetSurface(*(RSTRUCT_PTR(src_unit)+0))->surface;
|
427
|
+
dst = GetSurface(*(RSTRUCT_PTR(dst_unit)+0))->surface;
|
428
|
+
|
429
|
+
s_p = RSTRUCT_PTR(src_unit);
|
428
430
|
srect.x = NUM2INT(*(s_p + 1)) + rect[0];
|
429
431
|
srect.y = NUM2INT(*(s_p + 2)) + rect[1];
|
430
432
|
srect.w = rect[2];
|
431
433
|
srect.h = rect[3];
|
432
434
|
|
433
|
-
|
435
|
+
d_p = RSTRUCT_PTR(dst_unit);
|
434
436
|
drect.x = NUM2INT(*(d_p + 1));
|
435
437
|
drect.y = NUM2INT(*(d_p + 2));
|
436
438
|
drect.w = NUM2INT(*(d_p + 3));
|
@@ -441,16 +443,17 @@ static VALUE sprite_render_rect(VALUE self, VALUE vrect)
|
|
441
443
|
}
|
442
444
|
|
443
445
|
/*
|
444
|
-
インスタンスの内容を別のインスタンスに描画する
|
445
446
|
*/
|
446
447
|
static VALUE sprite_render_rect_to_sprite(VALUE self, VALUE vdst, VALUE vrect)
|
447
448
|
{
|
449
|
+
MiyakoBitmap src, dst;
|
450
|
+
SDL_Surface *scr;
|
451
|
+
int rect[4];
|
452
|
+
|
448
453
|
VALUE visible = rb_iv_get(self, str_visible);
|
449
454
|
if(visible == Qfalse) return self;
|
450
|
-
int rect[4];
|
451
455
|
sprite_get_rect(vrect, &(rect[0]));
|
452
|
-
|
453
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
456
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
454
457
|
_miyako_setup_unit_2(self, vdst, scr, &src, &dst, Qnil, Qnil, 1);
|
455
458
|
src.rect.x += rect[0];
|
456
459
|
src.rect.y += rect[1];
|
@@ -461,29 +464,30 @@ static VALUE sprite_render_rect_to_sprite(VALUE self, VALUE vdst, VALUE vrect)
|
|
461
464
|
}
|
462
465
|
|
463
466
|
/*
|
464
|
-
インスタンスの内容を画面に描画する
|
465
467
|
*/
|
466
468
|
static VALUE sprite_render_rect2(VALUE self, VALUE vrect)
|
467
469
|
{
|
470
|
+
VALUE src_unit, dst_unit, *d_p;
|
471
|
+
SDL_Surface *src, *dst;
|
472
|
+
SDL_Rect srect, drect;
|
473
|
+
int rect[4];
|
474
|
+
|
468
475
|
if(rb_iv_get(self, str_visible) == Qfalse) return self;
|
469
476
|
|
470
|
-
int rect[4];
|
471
477
|
sprite_get_rect(vrect, &(rect[0]));
|
472
478
|
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
SDL_Surface *src = GetSurface(*(RSTRUCT_PTR(src_unit)+0))->surface;
|
477
|
-
SDL_Surface *dst = GetSurface(*(RSTRUCT_PTR(dst_unit)+0))->surface;
|
479
|
+
src_unit = rb_iv_get(self, "@unit");
|
480
|
+
dst_unit = rb_iv_get(mScreen, "@@unit");
|
478
481
|
|
479
|
-
|
482
|
+
src = GetSurface(*(RSTRUCT_PTR(src_unit)+0))->surface;
|
483
|
+
dst = GetSurface(*(RSTRUCT_PTR(dst_unit)+0))->surface;
|
480
484
|
|
481
485
|
srect.x = rect[0];
|
482
486
|
srect.y = rect[1];
|
483
487
|
srect.w = rect[2];
|
484
488
|
srect.h = rect[3];
|
485
489
|
|
486
|
-
|
490
|
+
d_p = RSTRUCT_PTR(dst_unit);
|
487
491
|
drect.x = NUM2INT(*(d_p + 1));
|
488
492
|
drect.y = NUM2INT(*(d_p + 2));
|
489
493
|
drect.w = NUM2INT(*(d_p + 3));
|
@@ -494,16 +498,17 @@ static VALUE sprite_render_rect2(VALUE self, VALUE vrect)
|
|
494
498
|
}
|
495
499
|
|
496
500
|
/*
|
497
|
-
インスタンスの内容を別のインスタンスに描画する
|
498
501
|
*/
|
499
502
|
static VALUE sprite_render_rect2_to_sprite(VALUE self, VALUE vdst, VALUE vrect)
|
500
503
|
{
|
504
|
+
MiyakoBitmap src, dst;
|
505
|
+
SDL_Surface *scr;
|
506
|
+
int rect[4];
|
507
|
+
|
501
508
|
VALUE visible = rb_iv_get(self, str_visible);
|
502
509
|
if(visible == Qfalse) return self;
|
503
|
-
int rect[4];
|
504
510
|
sprite_get_rect(vrect, &(rect[0]));
|
505
|
-
|
506
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
511
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
507
512
|
_miyako_setup_unit_2(self, vdst, scr, &src, &dst, Qnil, Qnil, 1);
|
508
513
|
src.rect.x = rect[0];
|
509
514
|
src.rect.y = rect[1];
|
@@ -514,30 +519,31 @@ static VALUE sprite_render_rect2_to_sprite(VALUE self, VALUE vdst, VALUE vrect)
|
|
514
519
|
}
|
515
520
|
|
516
521
|
/*
|
517
|
-
インスタンスの内容を画面に描画する
|
518
522
|
*/
|
519
523
|
static VALUE sprite_render_rect_xy(VALUE self, VALUE vrect, VALUE vx, VALUE vy)
|
520
524
|
{
|
525
|
+
VALUE src_unit, dst_unit, *s_p, *d_p;
|
526
|
+
SDL_Surface *src, *dst;
|
527
|
+
SDL_Rect srect, drect;
|
528
|
+
int rect[4];
|
529
|
+
|
521
530
|
if(rb_iv_get(self, str_visible) == Qfalse) return self;
|
522
531
|
|
523
|
-
int rect[4];
|
524
532
|
sprite_get_rect(vrect, &(rect[0]));
|
525
533
|
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
SDL_Surface *src = GetSurface(*(RSTRUCT_PTR(src_unit)+0))->surface;
|
530
|
-
SDL_Surface *dst = GetSurface(*(RSTRUCT_PTR(dst_unit)+0))->surface;
|
534
|
+
src_unit = rb_iv_get(self, "@unit");
|
535
|
+
dst_unit = rb_iv_get(mScreen, "@@unit");
|
531
536
|
|
532
|
-
|
537
|
+
src = GetSurface(*(RSTRUCT_PTR(src_unit)+0))->surface;
|
538
|
+
dst = GetSurface(*(RSTRUCT_PTR(dst_unit)+0))->surface;
|
533
539
|
|
534
|
-
|
540
|
+
s_p = RSTRUCT_PTR(src_unit);
|
535
541
|
srect.x = NUM2INT(*(s_p + 1)) + rect[0];
|
536
542
|
srect.y = NUM2INT(*(s_p + 2)) + rect[1];
|
537
543
|
srect.w = rect[2];
|
538
544
|
srect.h = rect[3];
|
539
545
|
|
540
|
-
|
546
|
+
d_p = RSTRUCT_PTR(dst_unit);
|
541
547
|
drect.x = NUM2INT(*(d_p + 1)) + NUM2INT(vx);
|
542
548
|
drect.y = NUM2INT(*(d_p + 2)) + NUM2INT(vy);
|
543
549
|
drect.w = NUM2INT(*(d_p + 3));
|
@@ -548,16 +554,16 @@ static VALUE sprite_render_rect_xy(VALUE self, VALUE vrect, VALUE vx, VALUE vy)
|
|
548
554
|
}
|
549
555
|
|
550
556
|
/*
|
551
|
-
インスタンスの内容を別のインスタンスに描画する
|
552
557
|
*/
|
553
558
|
static VALUE sprite_render_rect_xy_to_sprite(VALUE self, VALUE vdst, VALUE vrect, VALUE vx, VALUE vy)
|
554
559
|
{
|
560
|
+
MiyakoBitmap src, dst;
|
561
|
+
SDL_Surface *scr;
|
562
|
+
int rect[4];
|
555
563
|
VALUE visible = rb_iv_get(self, str_visible);
|
556
564
|
if(visible == Qfalse) return self;
|
557
|
-
int rect[4];
|
558
565
|
sprite_get_rect(vrect, &(rect[0]));
|
559
|
-
|
560
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
566
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
561
567
|
_miyako_setup_unit_2(self, vdst, scr, &src, &dst, Qnil, Qnil, 1);
|
562
568
|
src.rect.x += rect[0];
|
563
569
|
src.rect.y += rect[1];
|
@@ -570,29 +576,30 @@ static VALUE sprite_render_rect_xy_to_sprite(VALUE self, VALUE vdst, VALUE vrect
|
|
570
576
|
}
|
571
577
|
|
572
578
|
/*
|
573
|
-
インスタンスの内容を画面に描画する
|
574
579
|
*/
|
575
580
|
static VALUE sprite_render_rect2_xy(VALUE self, VALUE vrect, VALUE vx, VALUE vy)
|
576
581
|
{
|
582
|
+
VALUE src_unit, dst_unit, *d_p;
|
583
|
+
SDL_Surface *src, *dst;
|
584
|
+
SDL_Rect srect, drect;
|
585
|
+
int rect[4];
|
586
|
+
|
577
587
|
if(rb_iv_get(self, str_visible) == Qfalse) return self;
|
578
588
|
|
579
|
-
int rect[4];
|
580
589
|
sprite_get_rect(vrect, &(rect[0]));
|
581
590
|
|
582
|
-
|
583
|
-
|
591
|
+
src_unit = rb_iv_get(self, "@unit");
|
592
|
+
dst_unit = rb_iv_get(mScreen, "@@unit");
|
584
593
|
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
SDL_Rect srect, drect;
|
594
|
+
src = GetSurface(*(RSTRUCT_PTR(src_unit)+0))->surface;
|
595
|
+
dst = GetSurface(*(RSTRUCT_PTR(dst_unit)+0))->surface;
|
589
596
|
|
590
597
|
srect.x = rect[0];
|
591
598
|
srect.y = rect[1];
|
592
599
|
srect.w = rect[2];
|
593
600
|
srect.h = rect[3];
|
594
601
|
|
595
|
-
|
602
|
+
d_p = RSTRUCT_PTR(dst_unit);
|
596
603
|
drect.x = NUM2INT(*(d_p + 1)) + NUM2INT(vx);
|
597
604
|
drect.y = NUM2INT(*(d_p + 2)) + NUM2INT(vy);
|
598
605
|
drect.w = NUM2INT(*(d_p + 3));
|
@@ -603,16 +610,17 @@ static VALUE sprite_render_rect2_xy(VALUE self, VALUE vrect, VALUE vx, VALUE vy)
|
|
603
610
|
}
|
604
611
|
|
605
612
|
/*
|
606
|
-
インスタンスの内容を別のインスタンスに描画する
|
607
613
|
*/
|
608
614
|
static VALUE sprite_render_rect2_xy_to_sprite(VALUE self, VALUE vdst, VALUE vrect, VALUE vx, VALUE vy)
|
609
615
|
{
|
616
|
+
MiyakoBitmap src, dst;
|
617
|
+
SDL_Surface *scr;
|
618
|
+
int rect[4];
|
619
|
+
|
610
620
|
VALUE visible = rb_iv_get(self, str_visible);
|
611
621
|
if(visible == Qfalse) return self;
|
612
|
-
int rect[4];
|
613
622
|
sprite_get_rect(vrect, &(rect[0]));
|
614
|
-
|
615
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
623
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
616
624
|
_miyako_setup_unit_2(self, vdst, scr, &src, &dst, Qnil, Qnil, 1);
|
617
625
|
src.rect.x = rect[0];
|
618
626
|
src.rect.y = rect[1];
|
@@ -665,7 +673,6 @@ void _miyako_screen_pre_render()
|
|
665
673
|
}
|
666
674
|
|
667
675
|
/*
|
668
|
-
画面を更新する
|
669
676
|
*/
|
670
677
|
static VALUE screen_render(VALUE self)
|
671
678
|
{
|
@@ -683,11 +690,12 @@ static VALUE screen_render(VALUE self)
|
|
683
690
|
int fps_max = NUM2INT(rb_const_get(mScreen, rb_intern("FpsMax")));
|
684
691
|
VALUE sans_serif = rb_funcall(cFont, rb_intern("sans_serif"), 0);
|
685
692
|
VALUE fps_sprite = Qnil;
|
693
|
+
VALUE fps_str;
|
686
694
|
|
687
695
|
if(interval == 0){ interval = 1; }
|
688
696
|
|
689
697
|
sprintf(str, "%d fps", fps_max / interval);
|
690
|
-
|
698
|
+
fps_str = rb_str_new2((const char *)str);
|
691
699
|
|
692
700
|
fps_sprite = rb_funcall(fps_str, rb_intern("to_sprite"), 1, sans_serif);
|
693
701
|
sprite_render(fps_sprite);
|
@@ -711,7 +719,6 @@ void _miyako_screen_render()
|
|
711
719
|
}
|
712
720
|
|
713
721
|
/*
|
714
|
-
インスタンスの内容を画面に描画する
|
715
722
|
*/
|
716
723
|
static VALUE screen_render_screen(VALUE self, VALUE vsrc)
|
717
724
|
{
|
@@ -792,10 +799,15 @@ static VALUE anim_m_update(VALUE self)
|
|
792
799
|
}
|
793
800
|
|
794
801
|
/*
|
795
|
-
===マップレイヤー転送インナーメソッド
|
796
802
|
*/
|
797
803
|
static void maplayer_render_inner(VALUE self, MiyakoBitmap *dst)
|
798
804
|
{
|
805
|
+
int dx, mx, dy, my, bx, by, code;
|
806
|
+
int x, y, idx1, idx2;
|
807
|
+
MiyakoBitmap src;
|
808
|
+
SDL_Surface *scr;
|
809
|
+
VALUE mapdat2;
|
810
|
+
|
799
811
|
int cw = NUM2INT(rb_iv_get(self, "@cw"));
|
800
812
|
int ch = NUM2INT(rb_iv_get(self, "@ch"));
|
801
813
|
int ow = NUM2INT(rb_iv_get(self, "@ow"));
|
@@ -826,24 +838,22 @@ static void maplayer_render_inner(VALUE self, MiyakoBitmap *dst)
|
|
826
838
|
if(pos_x >= real_size_w){ pos_x %= real_size_w; }
|
827
839
|
if(pos_y >= real_size_h){ pos_y %= real_size_h; }
|
828
840
|
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
841
|
+
dx = pos_x / mc_chip_size_w;
|
842
|
+
mx = pos_x % mc_chip_size_w;
|
843
|
+
dy = pos_y / mc_chip_size_h;
|
844
|
+
my = pos_y % mc_chip_size_h;
|
833
845
|
|
834
|
-
|
835
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
846
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
836
847
|
|
837
|
-
|
838
|
-
|
848
|
+
bx = dst->rect.x;
|
849
|
+
by = dst->rect.y;
|
839
850
|
|
840
|
-
int x, y, idx1, idx2;
|
841
851
|
for(y = 0; y < ch; y++){
|
842
852
|
idx1 = (y + dy) % size_h;
|
843
|
-
|
853
|
+
mapdat2 = *(RARRAY_PTR(mapdat) + idx1);
|
844
854
|
for(x = 0; x < cw; x++){
|
845
855
|
idx2 = (x + dx) % size_w;
|
846
|
-
|
856
|
+
code = NUM2INT(*(RARRAY_PTR(mapdat2) + idx2));
|
847
857
|
if(code == -1){ continue; }
|
848
858
|
_miyako_setup_unit(
|
849
859
|
rb_funcall(*(RARRAY_PTR(munits) + code),
|
@@ -858,10 +868,12 @@ static void maplayer_render_inner(VALUE self, MiyakoBitmap *dst)
|
|
858
868
|
}
|
859
869
|
|
860
870
|
/*
|
861
|
-
===固定マップレイヤー転送インナーメソッド
|
862
871
|
*/
|
863
872
|
static void fixedmaplayer_render_inner(VALUE self, MiyakoBitmap *dst)
|
864
873
|
{
|
874
|
+
int code;
|
875
|
+
VALUE mapdat2;
|
876
|
+
|
865
877
|
int cw = NUM2INT(rb_iv_get(self, "@cw"));
|
866
878
|
int ch = NUM2INT(rb_iv_get(self, "@ch"));
|
867
879
|
int ow = NUM2INT(rb_iv_get(self, "@ow"));
|
@@ -887,10 +899,10 @@ static void fixedmaplayer_render_inner(VALUE self, MiyakoBitmap *dst)
|
|
887
899
|
int x, y, idx1, idx2;
|
888
900
|
for(y = 0; y < ch; y++){
|
889
901
|
idx1 = y % size_h;
|
890
|
-
|
902
|
+
mapdat2 = *(RARRAY_PTR(mapdat) + idx1);
|
891
903
|
for(x = 0; x < cw; x++){
|
892
904
|
idx2 = x % size_w;
|
893
|
-
|
905
|
+
code = NUM2INT(*(RARRAY_PTR(mapdat2) + idx2));
|
894
906
|
if(code == -1){ continue; }
|
895
907
|
_miyako_setup_unit(rb_funcall(*(RARRAY_PTR(munits) + code), rb_intern("to_unit"), 0),
|
896
908
|
scr, &src, INT2NUM(pos_x + x * ow), INT2NUM(pos_y + y * oh), 0);
|
@@ -902,10 +914,15 @@ static void fixedmaplayer_render_inner(VALUE self, MiyakoBitmap *dst)
|
|
902
914
|
}
|
903
915
|
|
904
916
|
/*
|
905
|
-
===マップレイヤー転送インナーメソッド
|
906
917
|
*/
|
907
918
|
static void maplayer_render_to_inner(VALUE self, MiyakoBitmap *dst)
|
908
919
|
{
|
920
|
+
int dx, mx, dy, my, bx, by, code;
|
921
|
+
int x, y, idx1, idx2;
|
922
|
+
MiyakoBitmap src;
|
923
|
+
SDL_Surface *scr;
|
924
|
+
VALUE mapdat2;
|
925
|
+
|
909
926
|
int cw = NUM2INT(rb_iv_get(self, "@cw"));
|
910
927
|
int ch = NUM2INT(rb_iv_get(self, "@ch"));
|
911
928
|
int ow = NUM2INT(rb_iv_get(self, "@ow"));
|
@@ -936,24 +953,22 @@ static void maplayer_render_to_inner(VALUE self, MiyakoBitmap *dst)
|
|
936
953
|
if(pos_x >= real_size_w){ pos_x %= real_size_w; }
|
937
954
|
if(pos_y >= real_size_h){ pos_y %= real_size_h; }
|
938
955
|
|
939
|
-
|
940
|
-
|
941
|
-
|
942
|
-
|
956
|
+
dx = pos_x / mc_chip_size_w;
|
957
|
+
mx = pos_x % mc_chip_size_w;
|
958
|
+
dy = pos_y / mc_chip_size_h;
|
959
|
+
my = pos_y % mc_chip_size_h;
|
943
960
|
|
944
|
-
|
945
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
961
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
946
962
|
|
947
|
-
|
948
|
-
|
963
|
+
bx = dst->rect.x;
|
964
|
+
by = dst->rect.y;
|
949
965
|
|
950
|
-
int x, y, idx1, idx2;
|
951
966
|
for(y = 0; y < ch; y++){
|
952
967
|
idx1 = (y + dy) % size_h;
|
953
|
-
|
968
|
+
mapdat2 = *(RARRAY_PTR(mapdat) + idx1);
|
954
969
|
for(x = 0; x < cw; x++){
|
955
970
|
idx2 = (x + dx) % size_w;
|
956
|
-
|
971
|
+
code = NUM2INT(*(RARRAY_PTR(mapdat2) + idx2));
|
957
972
|
if(code == -1){ continue; }
|
958
973
|
_miyako_setup_unit(rb_funcall(*(RARRAY_PTR(munits) + code), rb_intern("to_unit"), 0),
|
959
974
|
scr, &src, INT2NUM(x * ow - mx), INT2NUM(y * oh - my), 0);
|
@@ -965,10 +980,12 @@ static void maplayer_render_to_inner(VALUE self, MiyakoBitmap *dst)
|
|
965
980
|
}
|
966
981
|
|
967
982
|
/*
|
968
|
-
===固定マップレイヤー転送インナーメソッド
|
969
983
|
*/
|
970
984
|
static void fixedmaplayer_render_to_inner(VALUE self, MiyakoBitmap *dst)
|
971
985
|
{
|
986
|
+
int code;
|
987
|
+
VALUE mapdat2;
|
988
|
+
|
972
989
|
int cw = NUM2INT(rb_iv_get(self, "@cw"));
|
973
990
|
int ch = NUM2INT(rb_iv_get(self, "@ch"));
|
974
991
|
int ow = NUM2INT(rb_iv_get(self, "@ow"));
|
@@ -994,10 +1011,10 @@ static void fixedmaplayer_render_to_inner(VALUE self, MiyakoBitmap *dst)
|
|
994
1011
|
int x, y, idx1, idx2;
|
995
1012
|
for(y = 0; y < ch; y++){
|
996
1013
|
idx1 = y % size_h;
|
997
|
-
|
1014
|
+
mapdat2 = *(RARRAY_PTR(mapdat) + idx1);
|
998
1015
|
for(x = 0; x < cw; x++){
|
999
1016
|
idx2 = x % size_w;
|
1000
|
-
|
1017
|
+
code = NUM2INT(*(RARRAY_PTR(mapdat2) + idx2));
|
1001
1018
|
if(code == -1){ continue; }
|
1002
1019
|
_miyako_setup_unit(rb_funcall(*(RARRAY_PTR(munits) + code), rb_intern("to_unit"), 0),
|
1003
1020
|
scr, &src, INT2NUM(pos_x + x * ow), INT2NUM(pos_y + y * oh), 0);
|
@@ -1009,73 +1026,74 @@ static void fixedmaplayer_render_to_inner(VALUE self, MiyakoBitmap *dst)
|
|
1009
1026
|
}
|
1010
1027
|
|
1011
1028
|
/*
|
1012
|
-
マップレイヤーを画面に描画する
|
1013
1029
|
*/
|
1014
1030
|
static VALUE maplayer_render(VALUE self)
|
1015
1031
|
{
|
1032
|
+
MiyakoBitmap dst;
|
1033
|
+
SDL_Surface *scr;
|
1016
1034
|
VALUE visible = rb_iv_get(self, str_visible);
|
1017
1035
|
if(visible == Qfalse) return self;
|
1018
|
-
|
1019
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1036
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1020
1037
|
_miyako_setup_unit(mScreen, scr, &dst, Qnil, Qnil, 1);
|
1021
1038
|
maplayer_render_inner(self, &dst);
|
1022
1039
|
return self;
|
1023
1040
|
}
|
1024
1041
|
|
1025
1042
|
/*
|
1026
|
-
マップレイヤーを画面に描画する
|
1027
1043
|
*/
|
1028
1044
|
static VALUE fixedmaplayer_render(VALUE self)
|
1029
1045
|
{
|
1046
|
+
MiyakoBitmap dst;
|
1047
|
+
SDL_Surface *scr;
|
1030
1048
|
VALUE visible = rb_iv_get(self, str_visible);
|
1031
1049
|
if(visible == Qfalse) return self;
|
1032
|
-
|
1033
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1050
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1034
1051
|
_miyako_setup_unit(mScreen, scr, &dst, Qnil, Qnil, 1);
|
1035
1052
|
fixedmaplayer_render_inner(self, &dst);
|
1036
1053
|
return self;
|
1037
1054
|
}
|
1038
1055
|
|
1039
1056
|
/*
|
1040
|
-
マップレイヤーを画像に転送する
|
1041
1057
|
*/
|
1042
1058
|
static VALUE maplayer_render_to_sprite(VALUE self, VALUE vdst)
|
1043
1059
|
{
|
1060
|
+
MiyakoBitmap dst;
|
1061
|
+
SDL_Surface *scr;
|
1044
1062
|
VALUE visible = rb_iv_get(self, str_visible);
|
1045
1063
|
if(visible == Qfalse) return self;
|
1046
|
-
|
1047
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1064
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1048
1065
|
_miyako_setup_unit(vdst, scr, &dst, Qnil, Qnil, 1);
|
1049
1066
|
maplayer_render_to_inner(self, &dst);
|
1050
1067
|
return self;
|
1051
1068
|
}
|
1052
1069
|
|
1053
1070
|
/*
|
1054
|
-
マップレイヤーを画像に転送する
|
1055
1071
|
*/
|
1056
1072
|
static VALUE fixedmaplayer_render_to_sprite(VALUE self, VALUE vdst)
|
1057
1073
|
{
|
1074
|
+
MiyakoBitmap dst;
|
1075
|
+
SDL_Surface *scr;
|
1058
1076
|
VALUE visible = rb_iv_get(self, str_visible);
|
1059
1077
|
if(visible == Qfalse) return self;
|
1060
|
-
|
1061
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1078
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1062
1079
|
_miyako_setup_unit(vdst, scr, &dst, Qnil, Qnil, 1);
|
1063
1080
|
maplayer_render_inner(self, &dst);
|
1064
1081
|
return self;
|
1065
1082
|
}
|
1066
1083
|
|
1067
1084
|
/*
|
1068
|
-
マップを画面に描画する
|
1069
1085
|
*/
|
1070
1086
|
static VALUE map_render(VALUE self)
|
1071
1087
|
{
|
1088
|
+
int i;
|
1089
|
+
MiyakoBitmap dst;
|
1090
|
+
SDL_Surface *scr;
|
1091
|
+
VALUE map_layers;
|
1072
1092
|
VALUE visible = rb_iv_get(self, str_visible);
|
1073
1093
|
if(visible == Qfalse) return self;
|
1074
|
-
|
1075
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1094
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1076
1095
|
_miyako_setup_unit(mScreen, scr, &dst, Qnil, Qnil, 1);
|
1077
|
-
|
1078
|
-
int i;
|
1096
|
+
map_layers = rb_iv_get(self, "@map_layers");
|
1079
1097
|
for(i=0; i<RARRAY_LEN(map_layers); i++){
|
1080
1098
|
maplayer_render_inner(*(RARRAY_PTR(map_layers) + i), &dst);
|
1081
1099
|
}
|
@@ -1084,17 +1102,18 @@ static VALUE map_render(VALUE self)
|
|
1084
1102
|
}
|
1085
1103
|
|
1086
1104
|
/*
|
1087
|
-
マップを画面に描画する
|
1088
1105
|
*/
|
1089
1106
|
static VALUE fixedmap_render(VALUE self)
|
1090
1107
|
{
|
1108
|
+
int i;
|
1109
|
+
MiyakoBitmap dst;
|
1110
|
+
SDL_Surface *scr;
|
1111
|
+
VALUE map_layers;
|
1091
1112
|
VALUE visible = rb_iv_get(self, str_visible);
|
1092
1113
|
if(visible == Qfalse) return self;
|
1093
|
-
|
1094
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1114
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1095
1115
|
_miyako_setup_unit(mScreen, scr, &dst, Qnil, Qnil, 1);
|
1096
|
-
|
1097
|
-
int i;
|
1116
|
+
map_layers = rb_iv_get(self, "@map_layers");
|
1098
1117
|
for(i=0; i<RARRAY_LEN(map_layers); i++){
|
1099
1118
|
fixedmaplayer_render_inner(*(RARRAY_PTR(map_layers) + i), &dst);
|
1100
1119
|
}
|
@@ -1103,18 +1122,19 @@ static VALUE fixedmap_render(VALUE self)
|
|
1103
1122
|
}
|
1104
1123
|
|
1105
1124
|
/*
|
1106
|
-
マップを画像に描画する
|
1107
1125
|
*/
|
1108
1126
|
static VALUE map_render_to_sprite(VALUE self, VALUE vdst)
|
1109
1127
|
{
|
1128
|
+
int i;
|
1129
|
+
MiyakoBitmap dst;
|
1130
|
+
SDL_Surface *scr;
|
1131
|
+
VALUE map_layers;
|
1110
1132
|
VALUE visible = rb_iv_get(self, str_visible);
|
1111
1133
|
if(visible == Qfalse) return self;
|
1112
|
-
|
1113
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1134
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1114
1135
|
_miyako_setup_unit(vdst, scr, &dst, Qnil, Qnil, 1);
|
1115
1136
|
|
1116
|
-
|
1117
|
-
int i;
|
1137
|
+
map_layers = rb_iv_get(self, "@map_layers");
|
1118
1138
|
for(i=0; i<RARRAY_LEN(map_layers); i++){
|
1119
1139
|
maplayer_render_to_inner(*(RARRAY_PTR(map_layers) + i), &dst);
|
1120
1140
|
}
|
@@ -1123,18 +1143,19 @@ static VALUE map_render_to_sprite(VALUE self, VALUE vdst)
|
|
1123
1143
|
}
|
1124
1144
|
|
1125
1145
|
/*
|
1126
|
-
マップを画像に描画する
|
1127
1146
|
*/
|
1128
1147
|
static VALUE fixedmap_render_to_sprite(VALUE self, VALUE vdst)
|
1129
1148
|
{
|
1149
|
+
int i;
|
1150
|
+
MiyakoBitmap dst;
|
1151
|
+
SDL_Surface *scr;
|
1152
|
+
VALUE map_layers;
|
1130
1153
|
VALUE visible = rb_iv_get(self, str_visible);
|
1131
1154
|
if(visible == Qfalse) return self;
|
1132
|
-
|
1133
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1155
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1134
1156
|
_miyako_setup_unit(vdst, scr, &dst, Qnil, Qnil, 1);
|
1135
1157
|
|
1136
|
-
|
1137
|
-
int i;
|
1158
|
+
map_layers = rb_iv_get(self, "@map_layers");
|
1138
1159
|
for(i=0; i<RARRAY_LEN(map_layers); i++){
|
1139
1160
|
fixedmaplayer_render_to_inner(*(RARRAY_PTR(map_layers) + i), &dst);
|
1140
1161
|
}
|
@@ -1159,6 +1180,8 @@ static VALUE sa_set_pat(VALUE self)
|
|
1159
1180
|
*/
|
1160
1181
|
static VALUE sa_update_frame(VALUE self)
|
1161
1182
|
{
|
1183
|
+
VALUE num, loop, plist, waits;
|
1184
|
+
int pnum, pats;
|
1162
1185
|
int cnt = NUM2INT(rb_iv_get(self, "@cnt"));
|
1163
1186
|
|
1164
1187
|
if(cnt > 0){
|
@@ -1167,11 +1190,11 @@ static VALUE sa_update_frame(VALUE self)
|
|
1167
1190
|
return Qfalse;
|
1168
1191
|
}
|
1169
1192
|
|
1170
|
-
|
1171
|
-
|
1193
|
+
num = rb_iv_get(self, "@pnum");
|
1194
|
+
loop = rb_iv_get(self, "@loop");
|
1172
1195
|
|
1173
|
-
|
1174
|
-
|
1196
|
+
pnum = NUM2INT(num);
|
1197
|
+
pats = NUM2INT(rb_iv_get(self, "@pats"));
|
1175
1198
|
pnum = (pnum + 1) % pats;
|
1176
1199
|
|
1177
1200
|
rb_iv_set(self, "@pnum", INT2NUM(pnum));
|
@@ -1182,8 +1205,8 @@ static VALUE sa_update_frame(VALUE self)
|
|
1182
1205
|
}
|
1183
1206
|
|
1184
1207
|
sa_set_pat(self);
|
1185
|
-
|
1186
|
-
|
1208
|
+
plist = rb_iv_get(self, "@plist");
|
1209
|
+
waits = rb_iv_get(self, "@waits");
|
1187
1210
|
rb_iv_set(self, "@cnt", *(RARRAY_PTR(waits) + NUM2INT(*(RARRAY_PTR(plist) + pnum))));
|
1188
1211
|
|
1189
1212
|
return Qtrue;
|
@@ -1194,16 +1217,18 @@ static VALUE sa_update_frame(VALUE self)
|
|
1194
1217
|
*/
|
1195
1218
|
static VALUE sa_update_wait_counter(VALUE self)
|
1196
1219
|
{
|
1220
|
+
VALUE num, loop, plist, waits;
|
1221
|
+
int pnum, pats;
|
1197
1222
|
VALUE cnt = rb_iv_get(self, "@cnt");
|
1198
1223
|
VALUE waiting = rb_funcall(cnt, rb_intern("waiting?"), 0);
|
1199
1224
|
|
1200
1225
|
if(waiting == Qtrue) return Qfalse;
|
1201
1226
|
|
1202
|
-
|
1203
|
-
|
1227
|
+
num = rb_iv_get(self, "@pnum");
|
1228
|
+
loop = rb_iv_get(self, "@loop");
|
1204
1229
|
|
1205
|
-
|
1206
|
-
|
1230
|
+
pnum = NUM2INT(num);
|
1231
|
+
pats = NUM2INT(rb_iv_get(self, "@pats"));
|
1207
1232
|
pnum = (pnum + 1) % pats;
|
1208
1233
|
|
1209
1234
|
rb_iv_set(self, "@pnum", INT2NUM(pnum));
|
@@ -1214,8 +1239,8 @@ static VALUE sa_update_wait_counter(VALUE self)
|
|
1214
1239
|
}
|
1215
1240
|
|
1216
1241
|
sa_set_pat(self);
|
1217
|
-
|
1218
|
-
|
1242
|
+
plist = rb_iv_get(self, "@plist");
|
1243
|
+
waits = rb_iv_get(self, "@waits");
|
1219
1244
|
cnt = *(RARRAY_PTR(waits) + NUM2INT(*(RARRAY_PTR(plist) + pnum)));
|
1220
1245
|
rb_iv_set(self, "@cnt", cnt);
|
1221
1246
|
rb_funcall(cnt, rb_intern("start"), 0);
|
@@ -1240,35 +1265,38 @@ static VALUE sa_update(VALUE self)
|
|
1240
1265
|
}
|
1241
1266
|
|
1242
1267
|
/*
|
1243
|
-
アニメーションの現在の画像を画面に描画する
|
1244
1268
|
*/
|
1245
1269
|
static VALUE sa_render(VALUE self)
|
1246
1270
|
{
|
1271
|
+
VALUE vsrc, *runit, polist, dir, *move_off, tmp_oxy, tmp_x, tmp_y;
|
1272
|
+
int num, pos_off, didx;
|
1273
|
+
MiyakoBitmap src, dst;
|
1274
|
+
SDL_Surface *scr;
|
1275
|
+
|
1247
1276
|
VALUE visible = rb_iv_get(self, str_visible);
|
1248
1277
|
if(visible == Qfalse) return self;
|
1249
|
-
|
1250
|
-
|
1251
|
-
|
1252
|
-
|
1278
|
+
vsrc = rb_iv_get(self, "@now");
|
1279
|
+
runit = RSTRUCT_PTR(vsrc);
|
1280
|
+
polist = rb_iv_get(self, "@pos_offset");
|
1281
|
+
dir = rb_iv_get(self, "@dir");
|
1253
1282
|
|
1254
|
-
|
1283
|
+
num = NUM2INT(rb_iv_get(self, "@pnum"));
|
1255
1284
|
|
1256
|
-
|
1285
|
+
move_off = RARRAY_PTR(rb_funcall(*(RARRAY_PTR(rb_iv_get(self, "@move_offset")) + num), id_to_a, 0));
|
1257
1286
|
|
1258
|
-
|
1287
|
+
pos_off = NUM2INT(*(RARRAY_PTR(polist) + num));
|
1259
1288
|
|
1260
|
-
|
1289
|
+
didx = (rb_to_id(dir) == rb_intern("h") ? 2 : 1);
|
1261
1290
|
|
1262
|
-
|
1263
|
-
|
1264
|
-
|
1291
|
+
tmp_oxy = *(runit + didx);
|
1292
|
+
tmp_x = *(runit + 5);
|
1293
|
+
tmp_y = *(runit + 6);
|
1265
1294
|
|
1266
1295
|
*(runit + didx) = INT2NUM(NUM2INT(tmp_oxy) - pos_off);
|
1267
1296
|
*(runit + 5) = INT2NUM(NUM2INT(tmp_x) + NUM2INT(*(move_off+0)));
|
1268
1297
|
*(runit + 6) = INT2NUM(NUM2INT(tmp_y) + NUM2INT(*(move_off+1)));
|
1269
1298
|
|
1270
|
-
|
1271
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1299
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1272
1300
|
_miyako_setup_unit_2(vsrc, mScreen, scr, &src, &dst, Qnil, Qnil, 1);
|
1273
1301
|
render_inner(&src, &dst);
|
1274
1302
|
|
@@ -1280,36 +1308,39 @@ static VALUE sa_render(VALUE self)
|
|
1280
1308
|
}
|
1281
1309
|
|
1282
1310
|
/*
|
1283
|
-
アニメーションの現在の画像を画像に描画する
|
1284
1311
|
*/
|
1285
1312
|
static VALUE sa_render_to_sprite(VALUE self, VALUE vdst)
|
1286
1313
|
{
|
1314
|
+
VALUE vsrc, *runit, polist, dir, molist, move_off, tmp_oxy, tmp_x, tmp_y;
|
1315
|
+
int num, pos_off, didx;
|
1316
|
+
MiyakoBitmap src, dst;
|
1317
|
+
SDL_Surface *scr;
|
1318
|
+
|
1287
1319
|
VALUE visible = rb_iv_get(self, str_visible);
|
1288
1320
|
if(visible == Qfalse) return self;
|
1289
|
-
|
1290
|
-
|
1291
|
-
|
1292
|
-
|
1321
|
+
vsrc = rb_iv_get(self, "@now");
|
1322
|
+
runit = RSTRUCT_PTR(vsrc);
|
1323
|
+
polist = rb_iv_get(self, "@pos_offset");
|
1324
|
+
dir = rb_iv_get(self, "@dir");
|
1293
1325
|
|
1294
|
-
|
1326
|
+
num = NUM2INT(rb_iv_get(self, "@pnum"));
|
1295
1327
|
|
1296
|
-
|
1328
|
+
pos_off = NUM2INT(*(RARRAY_PTR(polist) + num));
|
1297
1329
|
|
1298
|
-
|
1299
|
-
|
1330
|
+
molist = rb_iv_get(self, "@move_offset");
|
1331
|
+
move_off = *(RARRAY_PTR(molist) + num);
|
1300
1332
|
|
1301
|
-
|
1333
|
+
didx = (rb_to_id(dir) == rb_intern("h") ? 3 : 2);
|
1302
1334
|
|
1303
|
-
|
1304
|
-
|
1305
|
-
|
1335
|
+
tmp_oxy = *(runit + didx);
|
1336
|
+
tmp_x = *(runit + 5);
|
1337
|
+
tmp_y = *(runit + 6);
|
1306
1338
|
|
1307
1339
|
*(runit + didx) = INT2NUM(NUM2INT(tmp_oxy) - pos_off);
|
1308
1340
|
*(runit + 5) = INT2NUM(NUM2INT(tmp_x) + NUM2INT(rb_funcall(move_off, id_kakko, 1, nZero)));
|
1309
1341
|
*(runit + 6) = INT2NUM(NUM2INT(tmp_y) + NUM2INT(rb_funcall(move_off, id_kakko, 1, nOne )));
|
1310
1342
|
|
1311
|
-
|
1312
|
-
SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1343
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
1313
1344
|
_miyako_setup_unit_2(vsrc, vdst, scr, &src, &dst, Qnil, Qnil, 1);
|
1314
1345
|
render_to_inner(&src, &dst);
|
1315
1346
|
|
@@ -1321,31 +1352,32 @@ static VALUE sa_render_to_sprite(VALUE self, VALUE vdst)
|
|
1321
1352
|
}
|
1322
1353
|
|
1323
1354
|
/*
|
1324
|
-
プレーンを画面に描画する
|
1325
1355
|
*/
|
1326
1356
|
static VALUE plane_render(VALUE self)
|
1327
1357
|
{
|
1358
|
+
VALUE sprite, pos, size, osize, vx, vy;
|
1359
|
+
int x, y, w, h, pos_x, pos_y, ow, oh;
|
1360
|
+
|
1328
1361
|
VALUE visible = rb_iv_get(self, str_visible);
|
1329
1362
|
if(visible == Qfalse) return self;
|
1330
|
-
|
1331
|
-
|
1332
|
-
|
1333
|
-
|
1334
|
-
|
1335
|
-
|
1336
|
-
|
1337
|
-
|
1338
|
-
|
1339
|
-
|
1340
|
-
|
1363
|
+
sprite = rb_iv_get(self, "@sprite");
|
1364
|
+
|
1365
|
+
pos = rb_iv_get(self, "@pos");
|
1366
|
+
size = rb_iv_get(self, "@size");
|
1367
|
+
osize = rb_funcall(sprite, rb_intern("layout_size"), 0);
|
1368
|
+
w = NUM2INT(*(RSTRUCT_PTR(size) + 0));
|
1369
|
+
h = NUM2INT(*(RSTRUCT_PTR(size) + 1));
|
1370
|
+
pos_x = NUM2INT(*(RSTRUCT_PTR(pos) + 0));
|
1371
|
+
pos_y = NUM2INT(*(RSTRUCT_PTR(pos) + 1));
|
1372
|
+
ow = NUM2INT(*(RSTRUCT_PTR(osize) + 0));
|
1373
|
+
oh = NUM2INT(*(RSTRUCT_PTR(osize) + 1));
|
1341
1374
|
|
1342
|
-
int x, y;
|
1343
1375
|
for(y = 0; y < h; y++){
|
1344
1376
|
for(x = 0; x < w; x++){
|
1345
1377
|
if(pos_x > 0) pos_x -= ow;
|
1346
1378
|
if(pos_y > 0) pos_y -= oh;
|
1347
|
-
|
1348
|
-
|
1379
|
+
vx = INT2NUM(pos_x + x * ow);
|
1380
|
+
vy = INT2NUM(pos_y + y * oh);
|
1349
1381
|
rb_funcall(sprite, rb_intern("render_xy"), 2, vx, vy);
|
1350
1382
|
}
|
1351
1383
|
}
|
@@ -1354,31 +1386,32 @@ static VALUE plane_render(VALUE self)
|
|
1354
1386
|
}
|
1355
1387
|
|
1356
1388
|
/*
|
1357
|
-
プレーンを画像に描画する
|
1358
1389
|
*/
|
1359
1390
|
static VALUE plane_render_to_sprite(VALUE self, VALUE vdst)
|
1360
1391
|
{
|
1392
|
+
VALUE sprite, pos, size, osize, vx, vy;
|
1393
|
+
int x, y, w, h, pos_x, pos_y, ow, oh;
|
1394
|
+
|
1361
1395
|
VALUE visible = rb_iv_get(self, str_visible);
|
1362
1396
|
if(visible == Qfalse) return self;
|
1363
|
-
|
1364
|
-
|
1365
|
-
|
1366
|
-
|
1367
|
-
|
1368
|
-
|
1369
|
-
|
1370
|
-
|
1371
|
-
|
1372
|
-
|
1373
|
-
|
1397
|
+
sprite = rb_iv_get(self, "@sprite");
|
1398
|
+
|
1399
|
+
pos = rb_iv_get(self, "@pos");
|
1400
|
+
size = rb_iv_get(self, "@size");
|
1401
|
+
osize = rb_funcall(sprite, rb_intern("layout_size"), 0);
|
1402
|
+
w = NUM2INT(*(RSTRUCT_PTR(size) + 0));
|
1403
|
+
h = NUM2INT(*(RSTRUCT_PTR(size) + 1));
|
1404
|
+
pos_x = NUM2INT(*(RSTRUCT_PTR(pos) + 0));
|
1405
|
+
pos_y = NUM2INT(*(RSTRUCT_PTR(pos) + 1));
|
1406
|
+
ow = NUM2INT(*(RSTRUCT_PTR(osize) + 0));
|
1407
|
+
oh = NUM2INT(*(RSTRUCT_PTR(osize) + 1));
|
1374
1408
|
|
1375
|
-
int x, y;
|
1376
1409
|
for(y = 0; y < h; y++){
|
1377
1410
|
for(x = 0; x < w; x++){
|
1378
1411
|
if(pos_x > 0) pos_x -= ow;
|
1379
1412
|
if(pos_y > 0) pos_y -= oh;
|
1380
|
-
|
1381
|
-
|
1413
|
+
vx = INT2NUM(pos_x + x * ow);
|
1414
|
+
vy = INT2NUM(pos_y + y * oh);
|
1382
1415
|
rb_funcall(sprite, rb_intern("render_xy_to"), 3, vdst, vx, vy);
|
1383
1416
|
}
|
1384
1417
|
}
|
@@ -1391,12 +1424,14 @@ static VALUE plane_render_to_sprite(VALUE self, VALUE vdst)
|
|
1391
1424
|
*/
|
1392
1425
|
static VALUE textbox_render(VALUE self)
|
1393
1426
|
{
|
1427
|
+
VALUE wait_cursor, waiting, select_cursor;
|
1428
|
+
|
1394
1429
|
if(rb_iv_get(self, str_visible) == Qfalse){ return self; }
|
1395
1430
|
sprite_render(rb_iv_get(self, str_textarea));
|
1396
|
-
|
1431
|
+
wait_cursor = rb_iv_get(self, str_wait_cursor);
|
1397
1432
|
if(wait_cursor != Qnil)
|
1398
1433
|
{
|
1399
|
-
|
1434
|
+
waiting = rb_iv_get(self, str_waiting);
|
1400
1435
|
if(waiting == Qtrue)
|
1401
1436
|
{
|
1402
1437
|
rb_funcall(wait_cursor, id_render, 0);
|
@@ -1406,7 +1441,7 @@ static VALUE textbox_render(VALUE self)
|
|
1406
1441
|
if(rb_iv_get(self, str_selecting) == Qtrue)
|
1407
1442
|
{
|
1408
1443
|
rb_funcall(rb_iv_get(self, str_choices), id_render, 0);
|
1409
|
-
|
1444
|
+
select_cursor = rb_iv_get(self, str_select_cursor);
|
1410
1445
|
if(select_cursor != Qnil)
|
1411
1446
|
{
|
1412
1447
|
rb_funcall(select_cursor, id_render, 0);
|
@@ -1420,13 +1455,14 @@ static VALUE textbox_render(VALUE self)
|
|
1420
1455
|
*/
|
1421
1456
|
static VALUE textbox_render_to(VALUE self, VALUE dst)
|
1422
1457
|
{
|
1458
|
+
VALUE wait_cursor, waiting, select_cursor;
|
1423
1459
|
|
1424
1460
|
if(rb_iv_get(self, str_visible) == Qfalse){ return self; }
|
1425
1461
|
sprite_render_to_sprite(rb_iv_get(self, str_textarea), dst);
|
1426
|
-
|
1462
|
+
wait_cursor = rb_iv_get(self, str_wait_cursor);
|
1427
1463
|
if(wait_cursor != Qnil)
|
1428
1464
|
{
|
1429
|
-
|
1465
|
+
waiting = rb_iv_get(self, str_waiting);
|
1430
1466
|
if(waiting == Qtrue)
|
1431
1467
|
{
|
1432
1468
|
rb_funcall(wait_cursor, id_render_to, 1, dst);
|
@@ -1436,7 +1472,7 @@ static VALUE textbox_render_to(VALUE self, VALUE dst)
|
|
1436
1472
|
if(rb_iv_get(self, str_selecting) == Qtrue)
|
1437
1473
|
{
|
1438
1474
|
rb_funcall(rb_iv_get(self, str_choices), id_render_to, 1, dst);
|
1439
|
-
|
1475
|
+
select_cursor = rb_iv_get(self, str_select_cursor);
|
1440
1476
|
if(select_cursor != Qnil)
|
1441
1477
|
{
|
1442
1478
|
rb_funcall(select_cursor, id_render_to, 1, dst);
|