#include "DeerCore/Components.h" #include "DeerCore/Scripting/Helpers.h" #include "DeerCore/Scripting/InternalAPI/Entity.h" namespace Deer { namespace Scripting { extern asIScriptEngine* scriptEngine; void registerEntity(); void registerEntityFunctions(); void registerEntityStructs(); } // namespace Scripting void Scripting::registerEntity() { registerEntityStructs(); registerEntityFunctions(); } void Scripting::registerEntityFunctions() { REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "string get_name() const property", entity_getName); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "int get_id() const property", entity_getId); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "void set_name(string& in) property", entity_setName); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "Entity createChild(const string& in)", entity_createChild); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "bool get_isRoot() const property", entity_isRoot); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "void destroy()", entity_destroy); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "bool get_exists() const property", entity_exists); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "Entity get_parent() property", entity_getParent); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "void set_parent(Entity) property", entity_setParent); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "bool isDescendantOf(Entity)", entity_isDescendantOf); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "bool opEquals(const Entity &in) const", entity_opEquals); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "array@ getChildrens()", entity_getChildrens); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "EntityNetworkBehaviour get_networkBehaviour() const property", entity_getNetworkBehaviour); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "void set_networkBehaviour(EntityNetworkBehaviour) property", entity_setNetworkBehaviour); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "EntityNetworkBehaviour getForcedNetworkBehaviour()", entity_getForcedNetworkBehaviour); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "Entity", "bool isValidNetworkBehaviour()", entity_isValidNetworkBehaviour); REGISTER_GENERIC_OBJECT_METHOD(scriptEngine, "Entity", "T getComponent()", entity_getGenericComponent); REGISTER_GENERIC_OBJECT_METHOD(scriptEngine, "Entity", "T addComponent()", entity_addGenericComponent); REGISTER_GENERIC_OBJECT_METHOD(scriptEngine, "Entity", "void removeComponent()", entity_removeGenericComponent); REGISTER_GENERIC_OBJECT_METHOD(scriptEngine, "Entity", "bool hasComponent()", entity_hasGenericComponent); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "TransformComponent", "vec3 get_position() const property", transform_getPosition); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "TransformComponent", "vec3 get_scale() const property", transform_getScale); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "TransformComponent", "vec3 get_rotation() const property", transform_getRotation); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "TransformComponent", "void set_position(const vec3) property", transform_setPosition); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "TransformComponent", "void set_scale(const vec3) property", transform_setScale); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "TransformComponent", "void set_rotation(const vec3) property", transform_setRotation); } void Scripting::registerEntityStructs() { AS_CHECK(scriptEngine->RegisterObjectType("Entity", sizeof(EntityHandle), asOBJ_VALUE | asOBJ_POD | asGetTypeTraits() | asOBJ_APP_CLASS_ALLINTS)); AS_CHECK(scriptEngine->RegisterObjectType("TransformComponent", sizeof(EntityHandle), asOBJ_VALUE | asOBJ_POD | asGetTypeTraits() | asOBJ_APP_CLASS_ALLINTS)); REGISTER_EXT_OBJECT_CONSTRUCTOR(scriptEngine, "Entity", "void f()", constructEntityStruct); REGISTER_EXT_OBJECT_CONSTRUCTOR(scriptEngine, "TransformComponent", "void f()", constructEntityStruct); AS_CHECK(scriptEngine->RegisterEnum("EntityNetworkBehaviour")); AS_CHECK(scriptEngine->RegisterEnumValue("EntityNetworkBehaviour", "Parent", (int)EntityNetworkBehaviour::PARENT)); AS_CHECK(scriptEngine->RegisterEnumValue("EntityNetworkBehaviour", "Client", (int)EntityNetworkBehaviour::CLIENT)); AS_CHECK(scriptEngine->RegisterEnumValue("EntityNetworkBehaviour", "Server", (int)EntityNetworkBehaviour::SERVER)); } } // namespace Deer