ruby-miyako 2.1.4 → 2.1.5
Sign up to get free protection for your applications and to get access to all the features.
- 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);
|