2D sprite animations; timers

This commit is contained in:
2023-01-18 23:15:36 +00:00
parent 600426be8f
commit 695c102ce3
9 changed files with 81 additions and 47 deletions

View File

@@ -174,6 +174,34 @@ duk_ret_t duk_cmd(duk_context *duk) {
case 23:
duk_push_boolean(duk, shape_is_enabled(duk_to_pointer(duk, 1)));
return 1;
case 24:
timer_pause(id2timer(duk_to_int(duk, 1)));
break;
case 25:
timer_stop(id2timer(duk_to_int(duk, 1)));
break;
case 26:
timer_start(id2timer(duk_to_int(duk, 1)));
break;
case 27:
timer_remove(id2timer(duk_to_int(duk, 1)));
break;
case 28:
timerr_settime(id2timer(duk_to_int(duk, 1)), duk_to_number(duk, 2));
break;
case 29:
duk_push_number(duk, id2timer(duk_to_int(duk, 1))->interval);
return 1;
case 30:
sprite_setanim(id2sprite(duk_to_int(duk, 1)), duk_to_pointer(duk, 2), duk_to_int(duk, 3));
return 0;
}
return 0;
@@ -401,19 +429,13 @@ duk_ret_t duk_make_sprite(duk_context *duk) {
/* Make anim from texture */
duk_ret_t duk_make_anim2d(duk_context *duk) {
int go = duk_to_int(duk, 0);
const char *path = duk_to_string(duk, 1);
int frames = duk_to_int(duk, 2);
int fps = duk_to_int(duk, 3);
const char *path = duk_to_string(duk, 0);
int frames = duk_to_int(duk, 1);
int fps = duk_to_int(duk, 2);
int sprite = make_sprite(go);
struct sprite *sp = id2sprite(sprite);
sp->pos[0] = -0.5f;
sp->pos[1] = -0.5f;
anim_load(&sp->anim, path);
sp->tex = sp->anim.anim->tex;
struct TexAnim *anim = anim2d_from_tex(path, frames, fps);
duk_push_int(duk, sprite);
duk_push_pointer(duk, anim);
return 1;
}
@@ -435,15 +457,6 @@ duk_ret_t duk_make_box2d(duk_context *duk) {
return 1;
}
duk_ret_t duk_box2d_cmd(duk_context *duk) {
int cmd = duk_to_int(duk, 0);
struct phys2d_box *box = duk_to_pointer(duk, 1);
YughInfo("Issuing command %d with box %p.", cmd, box);
return 0;
}
duk_ret_t duk_make_circle2d(duk_context *duk) {
int go = duk_to_int(duk, 0);
double radius = duk_to_number(duk, 1);
@@ -461,6 +474,7 @@ duk_ret_t duk_make_circle2d(duk_context *duk) {
return 1;
}
/* These are anims for controlling properties on an object */
duk_ret_t duk_anim(duk_context *duk) {
void *prop = duk_get_heapptr(duk, 0);
int keyframes = duk_get_length(duk, 1);
@@ -488,18 +502,17 @@ duk_ret_t duk_anim(duk_context *duk) {
return 0;
}
duk_ret_t duk_make_timer(duk_context *duk) {
void *sym = duk_get_heapptr(duk, 0);
double secs = duk_to_number(duk, 1);
void *obj = duk_get_heapptr(duk, 2);
struct callee *c = malloc(sizeof(*c));
c->fn = sym;
c->obj = obj;
struct timer *timer = timer_make(secs, call_callee, c);
duk_ret_t duk_anim_cmd(duk_context *duk) {
return 0;
}
duk_ret_t duk_timer(duk_context *duk) {
return 0;
}
duk_ret_t duk_timer_cmd(duk_context *duk) {
return 0;
duk_push_int(duk, timer->timerid);
return 1;
}
#define DUK_FUNC(NAME, ARGS) duk_push_c_function(duk, duk_##NAME, ARGS); duk_put_global_string(duk, #NAME);
@@ -515,9 +528,11 @@ void ffi_load()
DUK_FUNC(win_make, 3);
DUK_FUNC(make_sprite, 3);
DUK_FUNC(make_anim2d, 4);
DUK_FUNC(make_anim2d, 3);
DUK_FUNC(make_box2d, 3);
DUK_FUNC(make_circle2d, 3);
DUK_FUNC(make_timer, 3);
DUK_FUNC(cmd, DUK_VARARGS);
DUK_FUNC(register, 3);
DUK_FUNC(register_collide, 4);
@@ -525,9 +540,7 @@ void ffi_load()
DUK_FUNC(gui_text, 3);
DUK_FUNC(gui_img, 2);
DUK_FUNC(timer, 2);
DUK_FUNC(timer_cmd, 2);
DUK_FUNC(anim, 2);
DUK_FUNC(anim_cmd, 3);
}