feat: Added event calling into Python
+ Added onInit, onTick, onExit, onTime events
This commit is contained in:
22
src/main.cpp
Normal file
22
src/main.cpp
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#include <sqapi.h>
|
||||||
|
#include <pybind11/embed.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <pybind11/embed.h>
|
||||||
|
#include "sqevents.h"
|
||||||
|
|
||||||
|
namespace py = pybind11;
|
||||||
|
py::scoped_interpreter guard{};
|
||||||
|
|
||||||
|
py::module_ g2o = py::module_::import("g2o");
|
||||||
|
py::module_ scripts = py::module_::import("scripts");
|
||||||
|
|
||||||
|
extern "C" SQRESULT SQRAT_API sqmodule_load(HSQUIRRELVM vm, HSQAPI api)
|
||||||
|
{
|
||||||
|
|
||||||
|
SqModule::Initialize(vm, api);
|
||||||
|
Sqrat::DefaultVM::Set(vm);
|
||||||
|
|
||||||
|
registerSquirrelEvents();
|
||||||
|
|
||||||
|
return SQ_OK;
|
||||||
|
}
|
||||||
68
src/sqevents.cpp
Normal file
68
src/sqevents.cpp
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
#include <sqapi.h>
|
||||||
|
#include <pybind11/embed.h>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
namespace py = pybind11;
|
||||||
|
using namespace pybind11::literals;
|
||||||
|
|
||||||
|
extern py::module_ g2o;
|
||||||
|
|
||||||
|
void addEventHandler(const char* eventName, SQFUNCTION closure, unsigned int priority = 9999)
|
||||||
|
{
|
||||||
|
using namespace SqModule;
|
||||||
|
|
||||||
|
Sqrat::Function sq_addEventHandler = Sqrat::RootTable().GetFunction("addEventHandler");
|
||||||
|
|
||||||
|
if (sq_addEventHandler.IsNull())
|
||||||
|
return;
|
||||||
|
|
||||||
|
HSQOBJECT closureHandle;
|
||||||
|
|
||||||
|
sq_newclosure(vm, closure, 0);
|
||||||
|
sq_getstackobj(vm, -1, &closureHandle);
|
||||||
|
|
||||||
|
Sqrat::Function func(vm, Sqrat::RootTable().GetObject(), closureHandle);
|
||||||
|
sq_addEventHandler(eventName, func, priority);
|
||||||
|
|
||||||
|
sq_pop(vm, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
SQInteger sq_onInit(HSQUIRRELVM vm)
|
||||||
|
{
|
||||||
|
py::object result = g2o.attr("callEvent")("onInit");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SQInteger sq_onExit(HSQUIRRELVM vm)
|
||||||
|
{
|
||||||
|
py::object result = g2o.attr("callEvent")("onExit");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SQInteger sq_onTick(HSQUIRRELVM vm)
|
||||||
|
{
|
||||||
|
py::object result = g2o.attr("callEvent")("onTick");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SQInteger sq_onTime(HSQUIRRELVM vm)
|
||||||
|
{
|
||||||
|
SQInteger day, hour, min;
|
||||||
|
|
||||||
|
sq_getinteger(vm, 4, &day);
|
||||||
|
sq_getinteger(vm, 3, &hour);
|
||||||
|
sq_getinteger(vm, 2, &min);
|
||||||
|
|
||||||
|
py::dict kwargs = py::dict("day"_a=day, "hour"_a=hour, "min"_a=min);
|
||||||
|
g2o.attr("callEvent")("onTime", **kwargs);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void registerSquirrelEvents()
|
||||||
|
{
|
||||||
|
addEventHandler("onInit", sq_onInit, 0);
|
||||||
|
addEventHandler("onExit", sq_onExit, 0);
|
||||||
|
addEventHandler("onTick", sq_onTick, 0);
|
||||||
|
addEventHandler("onTime", sq_onTime, 0);
|
||||||
|
}
|
||||||
8
src/sqevents.h
Normal file
8
src/sqevents.h
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
SQInteger sq_onInit(HSQUIRRELVM);
|
||||||
|
SQInteger sq_onExit(HSQUIRRELVM);
|
||||||
|
SQInteger sq_onTick(HSQUIRRELVM);
|
||||||
|
SQInteger sq_onTime(HSQUIRRELVM);
|
||||||
|
|
||||||
|
void registerSquirrelEvents();
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#include <sqapi.h>
|
|
||||||
|
|
||||||
/* squirreldoc (func)
|
|
||||||
*
|
|
||||||
* This is an entry point for the module.
|
|
||||||
*
|
|
||||||
* @version 0.1
|
|
||||||
* @side shared
|
|
||||||
* @name sqmodule_load
|
|
||||||
* @param (HSQUIRRELVM) vm the squirrel vm.
|
|
||||||
* @param (HSQAPI) api the api ptr containing all of the squirrel functions.
|
|
||||||
* @return (int) returns a function status.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
extern "C" SQRESULT SQRAT_API sqmodule_load(HSQUIRRELVM vm, HSQAPI api)
|
|
||||||
{
|
|
||||||
SqModule::Initialize(vm, api);
|
|
||||||
|
|
||||||
return SQ_OK;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user