From 41742ce0ade0bab11fac1be62df93767f7c548a6 Mon Sep 17 00:00:00 2001 From: Antoine Pilote Date: Thu, 10 Jun 2021 15:15:11 -0400 Subject: [PATCH] =?UTF-8?q?Added=20Wren=20scene=20module=20=E2=9B=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/resources/Interface/Testing.interface | 4 +- Editor/resources/Scripts/Engine.wren | 25 +++++-- Editor/resources/Scripts/test.wren | 8 +- Nuake/src/Scripting/Modules/SceneModule.h | 78 ++++++++++++++++++++ Nuake/src/Scripting/ScriptingEngine.cpp | 3 + 5 files changed, 107 insertions(+), 11 deletions(-) create mode 100644 Nuake/src/Scripting/Modules/SceneModule.h diff --git a/Editor/resources/Interface/Testing.interface b/Editor/resources/Interface/Testing.interface index c12e00d1..90534fc3 100644 --- a/Editor/resources/Interface/Testing.interface +++ b/Editor/resources/Interface/Testing.interface @@ -3,10 +3,10 @@ groups="screen" color="25 25 25 9" > -

Hello, world

+

Hello, world!

+ - diff --git a/Editor/resources/Scripts/Engine.wren b/Editor/resources/Scripts/Engine.wren index 4ccbd944..8129176e 100644 --- a/Editor/resources/Scripts/Engine.wren +++ b/Editor/resources/Scripts/Engine.wren @@ -2,14 +2,25 @@ class Engine { foreign static Log(msg) } -class Vector3 { - construct new(x, y, z) { - _x = x - _y = y - _z = z +class Scene { + foreign static GetEntityID(name) + + static GetEntity(name) { + var entId = Scene.GetEntityID(name) + var ent = Entity.new(entId) + return ent } + + foreign static EntityHasComponent(id, name) } class Entity { - foreign GetComponent(type) -} \ No newline at end of file + construct new(id) { + _entityId = id + } + + HasComponent(component) { + return Scene.EntityHasComponent(_entityId, component) + } +} + diff --git a/Editor/resources/Scripts/test.wren b/Editor/resources/Scripts/test.wren index fc35bfea..aef4f421 100644 --- a/Editor/resources/Scripts/test.wren +++ b/Editor/resources/Scripts/test.wren @@ -1,4 +1,4 @@ -import "Scripts/Engine" for Engine +import "Scripts/Engine" for Engine, Scene, Entity class Test { init() { System.print("hello init") @@ -13,6 +13,10 @@ class Test { } static hello() { - Engine.Log("Hello from foreign") + var entity = Scene.GetEntity("Trenchbroom map") + var hasTransform = entity.HasComponent("Transform") + var hasLight = entity.HasComponent("Light") + + Engine.Log("trasnform: %(hasTransform) light:%(hasLight)") } } \ No newline at end of file diff --git a/Nuake/src/Scripting/Modules/SceneModule.h b/Nuake/src/Scripting/Modules/SceneModule.h new file mode 100644 index 00000000..624e9c66 --- /dev/null +++ b/Nuake/src/Scripting/Modules/SceneModule.h @@ -0,0 +1,78 @@ +#pragma once +#include "wren.h" +#include +#include +#include "ScriptModule.h" +#include +#include +#include "Engine.h" +#include "../Scene/Entities/Entity.h" +#include +#include +#include +#include +#include + +namespace ScriptAPI +{ + + + class SceneModule : public ScriptModule + { + std::string GetModuleName() override + { + return "Scene"; + } + + void RegisterModule(WrenVM* vm) override + { + RegisterMethod("GetEntityID(_)", (void*)GetEntity); + RegisterMethod("EntityHasComponent(_,_)", (void*)EntityHasComponent); + } + + static void GetEntity(WrenVM* vm) + { + std::string name = wrenGetSlotString(vm, 1); + int handle = Engine::GetCurrentScene()->GetEntity(name).GetHandle(); + wrenSetSlotDouble(vm, 0, handle); + } + + static void EntityHasComponent(WrenVM* vm) + { + int handle = wrenGetSlotDouble(vm, 1); + std::string name = wrenGetSlotString(vm, 2); + Entity ent = Entity((entt::entity)handle, Engine::GetCurrentScene().get()); + + if (name == "Transform") + { + bool result = ent.HasComponent(); + wrenSetSlotBool(vm, 0, result); + } + if (name == "Light") + { + bool result = ent.HasComponent(); + wrenSetSlotBool(vm, 0, result); + } + if (name == "QuakeMap") + { + bool result = ent.HasComponent(); + wrenSetSlotBool(vm, 0, result); + } + if (name == "Camera") + { + bool result = ent.HasComponent(); + wrenSetSlotBool(vm, 0, result); + } + if (name == "Script") + { + bool result = ent.HasComponent(); + wrenSetSlotBool(vm, 0, result); + } + if (name == "Rigidbody") + { + bool result = ent.HasComponent(); + wrenSetSlotBool(vm, 0, result); + } + } + }; +} \ No newline at end of file diff --git a/Nuake/src/Scripting/ScriptingEngine.cpp b/Nuake/src/Scripting/ScriptingEngine.cpp index c88a0535..7e501b88 100644 --- a/Nuake/src/Scripting/ScriptingEngine.cpp +++ b/Nuake/src/Scripting/ScriptingEngine.cpp @@ -3,6 +3,7 @@ #include "../Core/FileSystem.h" #include #include +#include WrenVM* ScriptingEngine::m_WrenVM; @@ -88,6 +89,8 @@ void ScriptingEngine::Init() Ref engineModule = CreateRef(); RegisterModule(engineModule); + Ref sceneModule = CreateRef(); + RegisterModule(sceneModule); }