From 7d3cff5e5d6d53d7f4def94a9dc831e099e03e67 Mon Sep 17 00:00:00 2001 From: Tom Black Date: Tue, 30 Jan 2018 00:23:34 -0800 Subject: Sprite class redesign See #33 for discussion --- ext/ruby2d/ruby2d.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'ext') diff --git a/ext/ruby2d/ruby2d.c b/ext/ruby2d/ruby2d.c index 0b9e338..2daa7ed 100644 --- a/ext/ruby2d/ruby2d.c +++ b/ext/ruby2d/ruby2d.c @@ -379,6 +379,14 @@ static R_VAL ruby2d_sprite_ext_init(R_VAL self, R_VAL path) { #endif S2D_Log(S2D_INFO, "Init sprite: %s", RSTRING_PTR(path)); S2D_Sprite *spr = S2D_CreateSprite(RSTRING_PTR(path)); + + // Get width and height from Ruby class. If set, use it, else choose the + // native dimensions of the sprite image. + R_VAL w = r_iv_get(self, "@width"); + R_VAL h = r_iv_get(self, "@height"); + r_iv_set(self, "@width" , r_test(w) ? w : INT2NUM(spr->width)); + r_iv_set(self, "@height", r_test(h) ? h : INT2NUM(spr->height)); + r_iv_set(self, "@data", r_data_wrap_struct(sprite, spr)); return R_NIL; } @@ -392,6 +400,8 @@ static R_VAL ruby2d_sprite_ext_render(mrb_state* mrb, R_VAL self) { #else static R_VAL ruby2d_sprite_ext_render(R_VAL self) { #endif + r_funcall(self, "update", 0); + S2D_Sprite *spr; r_data_get_struct(self, "@data", &sprite_data_type, S2D_Sprite, spr); @@ -402,8 +412,8 @@ static R_VAL ruby2d_sprite_ext_render(R_VAL self) { spr, NUM2INT(r_iv_get(self, "@clip_x")), NUM2INT(r_iv_get(self, "@clip_y")), - NUM2INT(r_iv_get(self, "@clip_w")), - NUM2INT(r_iv_get(self, "@clip_h")) + NUM2INT(r_iv_get(self, "@clip_width")), + NUM2INT(r_iv_get(self, "@clip_height")) ); S2D_DrawSprite(spr); -- cgit v1.2.3