diff --git a/input.cm b/input.cm index 7e05aa9d..a108837b 100644 --- a/input.cm +++ b/input.cm @@ -70,19 +70,19 @@ function create_user(index, config) { control_stack: [], // Get current device kind - get device_kind() { + device_kind() { if (!this.active_device) return 'keyboard' return devices.kind(this.active_device) }, // Get current gamepad type - get gamepad_type() { + gamepad_type() { if (!this.active_device) return null return devices.gamepad_type(this.active_device) }, // Get action down state - get down() { + down() { return this.router ? this.router.down : {} }, @@ -105,7 +105,7 @@ function create_user(index, config) { }, // Get current control target - get target() { + target() { return length(this.control_stack) > 0 ? this.control_stack[length(this.control_stack) - 1] : null @@ -261,10 +261,10 @@ return { ingest: ingest, user: user, - get player1() { return _users[0] }, - get player2() { return _users[1] }, - get player3() { return _users[2] }, - get player4() { return _users[3] }, + player1() { return _users[0] }, + player2() { return _users[1] }, + player3() { return _users[2] }, + player4() { return _users[3] }, // Re-export for convenience devices: devices, diff --git a/input/router.cm b/input/router.cm index 606c4b40..3d90f985 100644 --- a/input/router.cm +++ b/input/router.cm @@ -291,7 +291,7 @@ function make(user, config) { return { stages: stages, - get down() { return action.down }, + down() { return action.down }, handle: function(canon) { var events = [canon] @@ -306,9 +306,9 @@ function make(user, config) { } return { - make: make, - gesture_stage: gesture_stage, - emacs_stage: emacs_stage, - action_stage: action_stage, - delivery_stage: delivery_stage + make, + gesture_stage, + emacs_stage, + action_stage, + delivery_stage } diff --git a/sprite.c b/sprite.c index 82e81860..6a39150a 100644 --- a/sprite.c +++ b/sprite.c @@ -55,15 +55,6 @@ static void js_sprite_mark(JSRuntime *rt, JSValueConst val, JS_MarkFunc *mark_fu // Class definition for sprite with mark function for GC QJSCLASSMARK(sprite,) -// SPRITE GETTER/SETTER FUNCTIONS -JSC_GETSET(sprite, pos, vec2) -JSC_GETSET(sprite, center, vec2) -JSC_GETSET(sprite, layer, number) -JSC_GETSET(sprite, color, color) -JSC_GETSET(sprite, skew, vec2) -JSC_GETSET(sprite, scale, vec2) -JSC_GETSET(sprite, rotation, number) - // SPRITE ACTION FUNCTIONS JSC_CCALL(sprite_move, @@ -85,17 +76,48 @@ JSC_CCALL(sprite_set_image, sp->image = JS_DupValue(js, argv[0]); ) +JSC_CCALL(sprite_set, + sprite *sp = js2sprite(js,self); + if (!JS_IsObject(argv[0])) return JS_NULL; + + JSValue val; + + val = JS_GetPropertyStr(js, argv[0], "pos"); + if (!JS_IsNull(val)) { sp->pos = js2vec2(js, val); JS_FreeValue(js, val); } + + val = JS_GetPropertyStr(js, argv[0], "center"); + if (!JS_IsNull(val)) { sp->center = js2vec2(js, val); JS_FreeValue(js, val); } + + val = JS_GetPropertyStr(js, argv[0], "skew"); + if (!JS_IsNull(val)) { sp->skew = js2vec2(js, val); JS_FreeValue(js, val); } + + val = JS_GetPropertyStr(js, argv[0], "scale"); + if (!JS_IsNull(val)) { sp->scale = js2vec2(js, val); JS_FreeValue(js, val); } + + val = JS_GetPropertyStr(js, argv[0], "rotation"); + if (!JS_IsNull(val)) { sp->rotation = js2number(js, val); JS_FreeValue(js, val); } + + val = JS_GetPropertyStr(js, argv[0], "layer"); + if (!JS_IsNull(val)) { sp->layer = js2number(js, val); JS_FreeValue(js, val); } + + val = JS_GetPropertyStr(js, argv[0], "color"); + if (!JS_IsNull(val)) { sp->color = js2color(js, val); JS_FreeValue(js, val); } + + val = JS_GetPropertyStr(js, argv[0], "image"); + if (!JS_IsNull(val) && !JS_IsNull(val)) { + if (!JS_IsNull(sp->image)) JS_FreeValue(js, sp->image); + sp->image = val; // Transfer ownership + } else { + JS_FreeValue(js, val); + } +) + + static const JSCFunctionListEntry js_sprite_funcs[] = { MIST_FUNC_DEF(sprite, set_affine, 0), MIST_FUNC_DEF(sprite, set_image, 1), MIST_FUNC_DEF(sprite, move, 1), - JS_CGETSET_DEF("pos", js_sprite_get_pos, js_sprite_set_pos), - JS_CGETSET_DEF("scale", js_sprite_get_scale, js_sprite_set_scale), - JS_CGETSET_DEF("skew", js_sprite_get_skew, js_sprite_set_skew), - JS_CGETSET_DEF("layer", js_sprite_get_layer, js_sprite_set_layer), - JS_CGETSET_DEF("color", js_sprite_get_color, js_sprite_set_color), - JS_CGETSET_DEF("center", js_sprite_get_center, js_sprite_set_center), - JS_CGETSET_DEF("rotation", js_sprite_get_rotation, js_sprite_set_rotation), + MIST_FUNC_DEF(sprite, set, 1), }; // Constructor function for sprite