108 lines
4.5 KiB
C++

#include "DeerRender/Scripting/InternalAPI/Entity.h"
#include "DeerCore/Scripting/ScriptEnvironmentContextData.h"
#include "DeerCore/EntityEnviroment.h"
#include "angelscript.h"
namespace Deer {
template <typename T>
T& Scripting::getContextEntityComponent(EntityHandle handle) {
asIScriptContext* context = asGetActiveContext();
ScriptEnvironmentContextData* environmentData = (ScriptEnvironmentContextData*)context->GetUserData();
if (handle.environmentId == 0) {
return environmentData->world->entityEnvironment->getEntity(handle.entityId).getComponent<T>();
}
// Implement entity reference of other environments
return environmentData->world->entityEnvironment->getEntity(handle.entityId).getComponent<T>();
}
// MESH COMPONENT
bool Scripting::mesh_isActive(EntityHandle& handle) {
MeshComponent& meshComponent = getContextEntityComponent<MeshComponent>(handle);
return meshComponent.active;
}
void Scripting::mesh_setActive(bool state, EntityHandle& handle) {
MeshComponent& meshComponent = getContextEntityComponent<MeshComponent>(handle);
meshComponent.active = state;
}
bool Scripting::mesh_hasMesh(EntityHandle& handle) {
MeshComponent& meshComponent = getContextEntityComponent<MeshComponent>(handle);
return meshComponent.mesh.isValid();
}
void Scripting::mesh_clear(EntityHandle& handle) {
MeshComponent& meshComponent = getContextEntityComponent<MeshComponent>(handle);
meshComponent.mesh = Resource<GPUMesh>();
}
Resource<GPUMesh> Scripting::mesh_getMesh(EntityHandle& handle) {
MeshComponent& meshComponent = getContextEntityComponent<MeshComponent>(handle);
return meshComponent.mesh;
}
void Scripting::mesh_setMesh(Resource<GPUMesh> mesh, EntityHandle& handle) {
MeshComponent& meshComponent = getContextEntityComponent<MeshComponent>(handle);
meshComponent.mesh = mesh;
}
// SHADER
bool Scripting::shader_hasShader(EntityHandle& handle) {
ShaderComponent& shaderComponent = getContextEntityComponent<ShaderComponent>(handle);
return shaderComponent.shader.isValid();
}
void Scripting::shader_clear(EntityHandle& handle) {
ShaderComponent& shaderComponent = getContextEntityComponent<ShaderComponent>(handle);
shaderComponent.shader = Resource<Shader>();
}
Resource<Shader> Scripting::shader_getShader(EntityHandle& handle) {
ShaderComponent& shaderComponent = getContextEntityComponent<ShaderComponent>(handle);
return shaderComponent.shader;
}
void Scripting::shader_setShader(Resource<Shader> shader, EntityHandle& handle) {
ShaderComponent& shaderComponent = getContextEntityComponent<ShaderComponent>(handle);
shaderComponent.shader = shader;
}
Resource<Texture> Scripting::shader_getTexture(EntityHandle& handle) {
ShaderComponent& shaderComponent = getContextEntityComponent<ShaderComponent>(handle);
return shaderComponent.texture;
}
void Scripting::shader_setTexture(Resource<Texture> texture, EntityHandle& handle) {
ShaderComponent& shaderComponent = getContextEntityComponent<ShaderComponent>(handle);
shaderComponent.texture = texture;
}
// CAMERA
float Scripting::camera_getFov(EntityHandle& handle) {
CameraComponent& cameraComponent = getContextEntityComponent<CameraComponent>(handle);
return cameraComponent.fov;
}
float Scripting::camera_getAspectRation(EntityHandle& handle) {
CameraComponent& cameraComponent = getContextEntityComponent<CameraComponent>(handle);
return cameraComponent.aspect;
}
float Scripting::camera_getNearZ(EntityHandle& handle) {
CameraComponent& cameraComponent = getContextEntityComponent<CameraComponent>(handle);
return cameraComponent.nearZ;
}
float Scripting::camera_getFarZ(EntityHandle& handle) {
CameraComponent& cameraComponent = getContextEntityComponent<CameraComponent>(handle);
return cameraComponent.farZ;
}
void Scripting::camera_setFov(float fov, EntityHandle& handle) {
CameraComponent& cameraComponent = getContextEntityComponent<CameraComponent>(handle);
cameraComponent.fov = fov;
}
void Scripting::camera_setAspectRation(float ratio, EntityHandle& handle) {
CameraComponent& cameraComponent = getContextEntityComponent<CameraComponent>(handle);
cameraComponent.aspect = ratio;
}
void Scripting::camera_setNearZ(float nearZ, EntityHandle& handle) {
CameraComponent& cameraComponent = getContextEntityComponent<CameraComponent>(handle);
cameraComponent.nearZ = nearZ;
}
void Scripting::camera_setFarZ(float farZ, EntityHandle& handle) {
CameraComponent& cameraComponent = getContextEntityComponent<CameraComponent>(handle);
cameraComponent.farZ = farZ;
}
} // namespace Deer