108 lines
4.5 KiB
C++
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
|