Major scripting update🕹

- Added Input wren module
- Added Math wren module
- Added Entity wren module
- Changed camera API
This commit is contained in:
Antoine Pilote
2021-06-10 22:23:53 -04:00
parent 41742ce0ad
commit 855bb1edd6
15 changed files with 473 additions and 43 deletions

View File

@@ -11,10 +11,6 @@ namespace ScriptAPI
class EngineModule : public ScriptModule
{
std::string ModuleName = "Engine";
std::string WrenAPI = "class Engine { \n"
"foreign static Log(msg) \n"
"}"
"";
std::string GetModuleName() override
{
@@ -24,7 +20,6 @@ namespace ScriptAPI
void RegisterModule(WrenVM* vm) override
{
RegisterMethod("Log(_)", (void*)Log);
WrenInterpretResult result = wrenInterpret(vm, "main", WrenAPI.c_str());
}
static void Log(WrenVM* vm)
@@ -33,6 +28,4 @@ namespace ScriptAPI
Logger::Log(msg);
}
};
}

View File

@@ -0,0 +1,38 @@
#pragma once
#include "wren.h"
#include <string>
#include <src/Core/Logger.h>
#include "ScriptModule.h"
#include <iostream>
#include <wren.h>
namespace ScriptAPI
{
class EngineModule : public ScriptModule
{
std::string ModuleName = "Engine";
std::string WrenAPI = "class Engine { \n"
"foreign static Log(msg) \n"
"}"
"";
std::string GetModuleName() override
{
return "Engine";
}
void RegisterModule(WrenVM* vm) override
{
RegisterMethod("Log(_)", (void*)Log);
WrenInterpretResult result = wrenInterpret(vm, "main", WrenAPI.c_str());
}
static void Log(WrenVM* vm)
{
std::string msg = wrenGetSlotString(vm, 1);
Logger::Log(msg);
}
};
}

View File

@@ -0,0 +1,105 @@
#pragma once
#include "wren.h"
#include <string>
#include <src/Core/Logger.h>
#include "ScriptModule.h"
#include <iostream>
#include <wren.h>
#include "../Core/Maths.h"
#include "../Core/Input.h"
namespace ScriptAPI
{
class InputModule : public ScriptModule
{
std::string GetModuleName() override
{
return "Input";
}
void RegisterModule(WrenVM* vm) override
{
RegisterMethod("GetMouseX()", GetMouseX);
RegisterMethod("GetMouseY()", (void*)GetMouseY);
RegisterMethod("IsKeyDown_(_)", (void*)IsKeyDown);
RegisterMethod("IsKeyPressed_(_)", (void*)IsKeyPressed);
RegisterMethod("IsKeyReleased_(_)", (void*)IsKeyReleased);
RegisterMethod("IsMouseButtonDown_(_)", (void*)IsMouseButtonDown);
RegisterMethod("IsMouseButtonPressed_(_)", (void*)IsMouseButtonPressed);
RegisterMethod("IsMouseButtonReleased_(_)", (void*)IsMouseButtonReleased);
RegisterMethod("HideMouse()", (void*)HideMouse);
RegisterMethod("ShowMouse()", (void*)ShowMouse);
RegisterMethod("IsMouseHidden()", (void*)IsMouseHidden);
}
static void GetMouseX(WrenVM* vm)
{
wrenSetSlotDouble(vm, 0, Input::GetMouseX());
}
static void GetMouseY(WrenVM* vm)
{
wrenSetSlotDouble(vm, 0, Input::GetMouseY());
}
static void IsMouseButtonDown(WrenVM* vm)
{
int key = wrenGetSlotDouble(vm, 1);
bool result = Input::IsMouseButtonDown(key);
wrenSetSlotBool(vm, 0, result);
}
static void IsMouseButtonPressed(WrenVM* vm)
{
int key = (int)wrenGetSlotDouble(vm, 1);
bool result = Input::IsMouseButtonPressed(key);
wrenSetSlotBool(vm, 0, result);
}
static void IsMouseButtonReleased(WrenVM* vm)
{
int key = wrenGetSlotDouble(vm, 1);
bool result = Input::IsMouseButtonReleased(key);
wrenSetSlotBool(vm, 0, result);
}
static void IsKeyDown(WrenVM* vm)
{
int key = wrenGetSlotDouble(vm, 1);
bool result = Input::IsKeyDown(key);
wrenSetSlotBool(vm, 0, result);
}
static void IsKeyPressed(WrenVM* vm)
{
int key = wrenGetSlotDouble(vm, 1);
bool result = Input::IsKeyPressed(key);
wrenSetSlotBool(vm, 0, result);
}
static void IsKeyReleased(WrenVM* vm)
{
int key = wrenGetSlotDouble(vm, 1);
bool result = Input::IsKeyReleased(key);
wrenSetSlotBool(vm, 0, result);
}
static void HideMouse(WrenVM* vm)
{
Input::HideMouse();
}
static void ShowMouse(WrenVM* vm)
{
Input::ShowMouse();
}
static void IsMouseHidden(WrenVM* vm)
{
wrenSetSlotBool(vm, 0, Input::IsMouseHidden());
}
};
}

View File

@@ -0,0 +1,39 @@
#pragma once
#include "wren.h"
#include <string>
#include <src/Core/Logger.h>
#include "ScriptModule.h"
#include <iostream>
#include <wren.h>
#include "../Core/Maths.h"
namespace ScriptAPI
{
class MathModule : public ScriptModule
{
std::string ModuleName = "Math";
std::string GetModuleName() override
{
return "Math";
}
void RegisterModule(WrenVM* vm) override
{
RegisterMethod("Sqrt_(_,_,_)", (void*)Sqrt);
}
static void Sqrt(WrenVM* vm)
{
float x = wrenGetSlotDouble(vm, 0);
float y = wrenGetSlotDouble(vm, 0);
float z = wrenGetSlotDouble(vm, 0);
float result = glm::sqrt((x * x) + (y * y) + (z * z));
wrenSetSlotDouble(vm, 0, result);
}
};
}

View File

@@ -28,6 +28,8 @@ namespace ScriptAPI
{
RegisterMethod("GetEntityID(_)", (void*)GetEntity);
RegisterMethod("EntityHasComponent(_,_)", (void*)EntityHasComponent);
RegisterMethod("SetLightIntensity_(_,_)", (void*)SetLightIntensity);
RegisterMethod("GetLightIntensity_(_)", (void*)GetLightIntensity);
}
static void GetEntity(WrenVM* vm)
@@ -74,5 +76,30 @@ namespace ScriptAPI
wrenSetSlotBool(vm, 0, result);
}
}
static void SetLightIntensity(WrenVM* vm)
{
int handle = wrenGetSlotDouble(vm, 1);
float intensity = wrenGetSlotDouble(vm, 2);
Entity ent = Entity((entt::entity)handle, Engine::GetCurrentScene().get());
auto& light = ent.GetComponent<LightComponent>();
light.Strength = intensity;
}
static void GetLightIntensity(WrenVM* vm)
{
int handle = wrenGetSlotDouble(vm, 1);
float intensity = wrenGetSlotDouble(vm, 2);
Entity ent = Entity((entt::entity)handle, Engine::GetCurrentScene().get());
auto& light = ent.GetComponent<LightComponent>();
wrenSetSlotDouble(vm, 0, light.Strength);
}
static void SetCameraDirection(WrenVM* vm)
{
}
};
}