diff --git a/src/dusk/script/module/entity/component/moduleentitymaterial.h b/src/dusk/script/module/entity/component/moduleentitymaterial.h index 87135ef7..f6527055 100644 --- a/src/dusk/script/module/entity/component/moduleentitymaterial.h +++ b/src/dusk/script/module/entity/component/moduleentitymaterial.h @@ -7,10 +7,10 @@ #pragma once #include "script/module/modulebase.h" +#include "script/module/display/modulecolor.h" #include "script/scriptproto.h" #include "entity/entity.h" #include "entity/component/display/entitymaterial.h" -#include "display/color.h" #include "moduleentityposition.h" static scriptproto_t MODULE_ENTITY_MATERIAL_PROTO; @@ -27,52 +27,30 @@ static entitymaterial_t * moduleEntityMaterialGet( ); } +moduleBaseFunction(moduleEntityMaterialGetColor) { + entitymaterial_t *mat = moduleEntityMaterialGet(callInfo); + if(!mat) return jerry_undefined(); + return moduleColorMakeObject(mat->material.unlit.color); +} + moduleBaseFunction(moduleEntityMaterialSetColor) { - if(argc < 1) return moduleBaseThrow("Expected at least 1 argument"); - if(!jerry_value_is_object(args[0])) { - return moduleBaseThrow("expected color object"); + if(argc < 1 || !jerry_value_is_object(args[0])) { + return moduleBaseThrow("Material.color: expected color object"); + } + color_t *color = (color_t*)scriptProtoGetValue(&MODULE_COLOR_PROTO, args[0]); + if(!color) { + return moduleBaseThrow("Material.color: expected valid color object"); } entitymaterial_t *mat = moduleEntityMaterialGet(callInfo); if(!mat) return jerry_undefined(); - - jerry_value_t key; - jerry_value_t v; - color_t col; - - key = jerry_string_sz("r"); - v = jerry_object_get(args[0], key); - jerry_value_free(key); - col.r = (colorchannel8_t)jerry_value_as_number(v); - jerry_value_free(v); - - key = jerry_string_sz("g"); - v = jerry_object_get(args[0], key); - jerry_value_free(key); - col.g = (colorchannel8_t)jerry_value_as_number(v); - jerry_value_free(v); - - key = jerry_string_sz("b"); - v = jerry_object_get(args[0], key); - jerry_value_free(key); - col.b = (colorchannel8_t)jerry_value_as_number(v); - jerry_value_free(v); - - key = jerry_string_sz("a"); - v = jerry_object_get(args[0], key); - jerry_value_free(key); - col.a = (colorchannel8_t)jerry_value_as_number(v); - jerry_value_free(v); - - mat->material.unlit.color = col; + memoryCopy(&mat->material.unlit.color, color, sizeof(color_t)); return jerry_undefined(); } moduleBaseFunction(moduleEntityMaterialAdd) { - if(argc < 1) { + if(argc < 1 || !jerry_value_is_number(args[0])) { return moduleBaseThrow("Expected at least 1 argument"); } - moduleBaseRequireNumber(0); - entityid_t id = (entityid_t)jerry_value_as_number(args[0]); componentid_t comp = entityAddComponent(id, COMPONENT_TYPE_MATERIAL); componenthandle_t h = { .eid = id, .cid = comp }; @@ -87,9 +65,8 @@ static void moduleEntityMATERIAL(void) { NULL ); - scriptProtoDefineFunc( - &MODULE_ENTITY_MATERIAL_PROTO, - "setColor", - moduleEntityMaterialSetColor + scriptProtoDefineProp( + &MODULE_ENTITY_MATERIAL_PROTO, "color", + moduleEntityMaterialGetColor, moduleEntityMaterialSetColor ); } diff --git a/src/dusk/script/module/entity/component/moduleentitymesh.h b/src/dusk/script/module/entity/component/moduleentitymesh.h index 85f57028..aa6befec 100644 --- a/src/dusk/script/module/entity/component/moduleentitymesh.h +++ b/src/dusk/script/module/entity/component/moduleentitymesh.h @@ -36,14 +36,12 @@ moduleBaseFunction(moduleEntityMeshSetMesh) { entitymesh_t *comp = moduleEntityMeshGet(callInfo); if(!comp) return jerry_undefined(); - // User-created Mesh JS object (meshscript_t) meshscript_t *ms = moduleMeshFrom(args[0]); if(ms) { comp->mesh = &ms->mesh; return jerry_undefined(); } - // Engine-owned default mesh (Mesh.DEFAULT_CUBE etc.) — raw mesh_t* mesh_t *raw = (mesh_t*)moduleBaseUnwrapPointer(args[0]); if(raw) { comp->mesh = raw; diff --git a/src/dusk/script/module/entity/component/moduleentityphysics.h b/src/dusk/script/module/entity/component/moduleentityphysics.h index f7dd37de..976e0aa0 100644 --- a/src/dusk/script/module/entity/component/moduleentityphysics.h +++ b/src/dusk/script/module/entity/component/moduleentityphysics.h @@ -52,7 +52,7 @@ moduleBaseFunction(moduleEntityPhysicsGetOnGround) { moduleBaseFunction(moduleEntityPhysicsGetBodyType) { entityphysics_t *phys = moduleEntityPhysicsGet(callInfo); if(!phys) return jerry_undefined(); - return jerry_number((double)phys->type); + return jerry_number(phys->type); } moduleBaseFunction(moduleEntityPhysicsSetBodyType) {