Reorganized script api files
Added access to BlockOutComponent to the scripting systemdev
parent
f0dd9e4e4d
commit
0c2b5b2def
@ -0,0 +1,159 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
* File - component_api.cpp
|
||||||
|
* Author - Joey Pollack
|
||||||
|
* Date - 2023/01/05 (y/m/d)
|
||||||
|
* Mod Date - 2023/01/05 (y/m/d)
|
||||||
|
* Description - static methods for all component related foreign classes
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#include "component_api.h"
|
||||||
|
|
||||||
|
#include <world/components.h>
|
||||||
|
#include <world/world.h>
|
||||||
|
#include <world/entity.h>
|
||||||
|
|
||||||
|
namespace lunarium
|
||||||
|
{
|
||||||
|
World* ComponentAPI::mpWorld = nullptr;
|
||||||
|
void ComponentAPI::Initialize(World* pWorld, WrenState& script_state)
|
||||||
|
{
|
||||||
|
mpWorld = pWorld;
|
||||||
|
SetupForeignClassVelocityComp(script_state);
|
||||||
|
SetupForeignClassBlockOutComp(script_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
// VELOCITY COMPONENT
|
||||||
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
void ComponentAPI::SetupForeignClassVelocityComp(WrenState& script_state)
|
||||||
|
{
|
||||||
|
script_state.RegisterForeignClass({"Components", "VelocityComponent", sizeof(VelocityComponent*),
|
||||||
|
{(WrenForeignMethodFn)&ComponentAPI::VelocityCompAllocate, &ComponentAPI::VelocityCompFinalise}});
|
||||||
|
|
||||||
|
script_state.RegisterForeignMethod({"Components", "VelocityComponent", false, "GetVelocityX()",&ComponentAPI::GetVelocityXFM});
|
||||||
|
script_state.RegisterForeignMethod({"Components", "VelocityComponent", false, "GetVelocityY()",(WrenForeignMethodFn)&ComponentAPI::GetVelocityYFM});
|
||||||
|
script_state.RegisterForeignMethod({"Components", "VelocityComponent", false, "SetVelocity(_,_)", (WrenForeignMethodFn)&ComponentAPI::SetVelocityFM});
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentAPI::VelocityCompAllocate(WrenVM* vm)
|
||||||
|
{
|
||||||
|
VelocityComponent** vcp = (VelocityComponent**)wrenSetSlotNewForeign(vm, 0, 0, sizeof(VelocityComponent*));
|
||||||
|
std::string str_entity_id = wrenGetSlotString(vm, 1);
|
||||||
|
LUUID entity_id = std::stoull(str_entity_id);
|
||||||
|
Entity* pEnt = mpWorld->GetEntity(entity_id);
|
||||||
|
if (!pEnt->HasComponent<VelocityComponent>())
|
||||||
|
{
|
||||||
|
Logger::Error(LogCategory::SCRIPTING, "Cannot allocate foreign class VelocityComponent - the entity does not have the component");
|
||||||
|
(*vcp) = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*vcp) = &pEnt->GetComponent<VelocityComponent>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentAPI::VelocityCompFinalise(void* data)
|
||||||
|
{
|
||||||
|
// Nothing to clean up
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentAPI::GetVelocityXFM(WrenVM* vm)
|
||||||
|
{
|
||||||
|
VelocityComponent** vcp = (VelocityComponent**)wrenGetSlotForeign(vm, 0);
|
||||||
|
wrenEnsureSlots(vm, 1);
|
||||||
|
wrenSetSlotDouble(vm, 0, (*vcp)->Velocity.x);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentAPI::GetVelocityYFM(WrenVM* vm)
|
||||||
|
{
|
||||||
|
VelocityComponent** vcp = (VelocityComponent**)wrenGetSlotForeign(vm, 0);
|
||||||
|
wrenEnsureSlots(vm, 1);
|
||||||
|
wrenSetSlotDouble(vm, 0, (*vcp)->Velocity.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentAPI::SetVelocityFM(WrenVM* vm)
|
||||||
|
{
|
||||||
|
VelocityComponent** vcp = (VelocityComponent**)wrenGetSlotForeign(vm, 0);
|
||||||
|
double x = wrenGetSlotDouble(vm, 1);
|
||||||
|
double y = wrenGetSlotDouble(vm, 2);
|
||||||
|
|
||||||
|
(*vcp)->Velocity.x = x;
|
||||||
|
(*vcp)->Velocity.y = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
// BLOCKOUT COMPONENT
|
||||||
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
void ComponentAPI::SetupForeignClassBlockOutComp(WrenState& script_state)
|
||||||
|
{
|
||||||
|
script_state.RegisterForeignClass({"Components", "BlockOutComponent", sizeof(BlockOutComponent*),
|
||||||
|
{(WrenForeignMethodFn)&ComponentAPI::BlockOutCompAllocate, &ComponentAPI::BlockOutCompFinalise}});
|
||||||
|
|
||||||
|
script_state.RegisterForeignMethod({"Components", "BlockOutComponent", false, "GetColor()",&ComponentAPI::GetColorFM});
|
||||||
|
script_state.RegisterForeignMethod({"Components", "BlockOutComponent", false, "GetSize()",(WrenForeignMethodFn)&ComponentAPI::GetSizeFM});
|
||||||
|
script_state.RegisterForeignMethod({"Components", "BlockOutComponent", false, "SetColor(_,_,_,_)", (WrenForeignMethodFn)&ComponentAPI::SetColorFM});
|
||||||
|
script_state.RegisterForeignMethod({"Components", "BlockOutComponent", false, "SetSize(_,_)", (WrenForeignMethodFn)&ComponentAPI::SetSizeFM});
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentAPI::BlockOutCompAllocate(WrenVM* vm)
|
||||||
|
{
|
||||||
|
BlockOutComponent** vcp = (BlockOutComponent**)wrenSetSlotNewForeign(vm, 0, 0, sizeof(BlockOutComponent*));
|
||||||
|
std::string str_entity_id = wrenGetSlotString(vm, 1);
|
||||||
|
LUUID entity_id = std::stoull(str_entity_id);
|
||||||
|
Entity* pEnt = mpWorld->GetEntity(entity_id);
|
||||||
|
if (!pEnt->HasComponent<BlockOutComponent>())
|
||||||
|
{
|
||||||
|
Logger::Error(LogCategory::SCRIPTING, "Cannot allocate foreign class BlockOutComponent - the entity does not have the component");
|
||||||
|
(*vcp) = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*vcp) = &pEnt->GetComponent<BlockOutComponent>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentAPI::BlockOutCompFinalise(void* data)
|
||||||
|
{
|
||||||
|
// Nothing to clean up
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentAPI::GetColorFM(WrenVM* vm)
|
||||||
|
{
|
||||||
|
BlockOutComponent** vcp = (BlockOutComponent**)wrenGetSlotForeign(vm, 0);
|
||||||
|
wrenEnsureSlots(vm, 5);
|
||||||
|
wrenSetSlotDouble(vm, 1, (*vcp)->Color.r);
|
||||||
|
wrenSetSlotDouble(vm, 2, (*vcp)->Color.g);
|
||||||
|
wrenSetSlotDouble(vm, 3, (*vcp)->Color.b);
|
||||||
|
wrenSetSlotDouble(vm, 4, (*vcp)->Color.a);
|
||||||
|
wrenSetSlotNewList(vm, 0);
|
||||||
|
wrenInsertInList(vm, 0, 0, 4);
|
||||||
|
wrenInsertInList(vm, 0, 0, 3);
|
||||||
|
wrenInsertInList(vm, 0, 0, 2);
|
||||||
|
wrenInsertInList(vm, 0, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ComponentAPI::GetSizeFM(WrenVM* vm)
|
||||||
|
{
|
||||||
|
BlockOutComponent** vcp = (BlockOutComponent**)wrenGetSlotForeign(vm, 0);
|
||||||
|
wrenEnsureSlots(vm, 3);
|
||||||
|
wrenSetSlotDouble(vm, 1, (*vcp)->Size.x);
|
||||||
|
wrenSetSlotDouble(vm, 2, (*vcp)->Size.y);
|
||||||
|
wrenSetSlotNewList(vm, 0);
|
||||||
|
wrenInsertInList(vm, 0, 0, 2);
|
||||||
|
wrenInsertInList(vm, 0, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentAPI::SetColorFM(WrenVM* vm)
|
||||||
|
{
|
||||||
|
BlockOutComponent** vcp = (BlockOutComponent**)wrenGetSlotForeign(vm, 0);
|
||||||
|
(*vcp)->Color.r = wrenGetSlotDouble(vm, 1);
|
||||||
|
(*vcp)->Color.g = wrenGetSlotDouble(vm, 2);
|
||||||
|
(*vcp)->Color.b = wrenGetSlotDouble(vm, 3);
|
||||||
|
(*vcp)->Color.a = wrenGetSlotDouble(vm, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentAPI::SetSizeFM(WrenVM* vm)
|
||||||
|
{
|
||||||
|
BlockOutComponent** vcp = (BlockOutComponent**)wrenGetSlotForeign(vm, 0);
|
||||||
|
(*vcp)->Size.x = wrenGetSlotDouble(vm, 1);
|
||||||
|
(*vcp)->Size.y = wrenGetSlotDouble(vm, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,48 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
* File - component_api.h
|
||||||
|
* Author - Joey Pollack
|
||||||
|
* Date - 2023/01/05 (y/m/d)
|
||||||
|
* Mod Date - 2023/01/05 (y/m/d)
|
||||||
|
* Description - static methods for all component related foreign classes
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef LUNARIUM_COMPONENT_API_H_
|
||||||
|
#define LUNARIUM_COMPONENT_API_H_
|
||||||
|
|
||||||
|
#include <core/common_defs.h>
|
||||||
|
#include <scripting/wren_state.h>
|
||||||
|
#include <scripting/wren_script.h>
|
||||||
|
#include <utils/op_res.h>
|
||||||
|
|
||||||
|
namespace lunarium
|
||||||
|
{
|
||||||
|
class World;
|
||||||
|
class ComponentAPI
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static void Initialize(World* pWorld, WrenState& script_state);
|
||||||
|
|
||||||
|
// VelocityComponent
|
||||||
|
static void SetupForeignClassVelocityComp(WrenState& script_state);
|
||||||
|
static void VelocityCompAllocate(WrenVM* vm);
|
||||||
|
static void VelocityCompFinalise(void* data);
|
||||||
|
static void GetVelocityXFM(WrenVM* vm);
|
||||||
|
static void GetVelocityYFM(WrenVM* vm);
|
||||||
|
static void SetVelocityFM(WrenVM* vm);
|
||||||
|
|
||||||
|
// Blockout Component
|
||||||
|
static void SetupForeignClassBlockOutComp(WrenState& script_state);
|
||||||
|
static void BlockOutCompAllocate(WrenVM* vm);
|
||||||
|
static void BlockOutCompFinalise(void* data);
|
||||||
|
static void GetColorFM(WrenVM* vm);
|
||||||
|
static void GetSizeFM(WrenVM* vm);
|
||||||
|
static void SetColorFM(WrenVM* vm);
|
||||||
|
static void SetSizeFM(WrenVM* vm);
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
static World* mpWorld;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // LUNARIUM_COMPONENT_API_H_
|
||||||
Loading…
Reference in New Issue