|
|
@@ -8,19 +8,48 @@ namespace py = pybind11;
|
|
|
|
|
|
class Engine;
|
|
|
|
|
|
-PYBIND11_MODULE(karioka, m)
|
|
|
+PYBIND11_EMBEDDED_MODULE(karioka, m)
|
|
|
{
|
|
|
m.doc() = "kariokaEngine Python API";
|
|
|
|
|
|
- // Bind the Engine class itself
|
|
|
+ // Bind the Engine class
|
|
|
py::class_<Engine, std::unique_ptr<Engine, py::nodelete>> engine_cls(m, "Engine");
|
|
|
|
|
|
- // Simple log function
|
|
|
- m.def("log", [](const std::string& msg) {
|
|
|
+ // Bind useful methods from Engine
|
|
|
+ engine_cls.def("DebugInfo", &Engine::DebugInfo);
|
|
|
+ engine_cls.def("StopRunning", &Engine::StopRunning);
|
|
|
+ engine_cls.def("IsRunning", &Engine::IsRunning);
|
|
|
+
|
|
|
+ // State management
|
|
|
+ engine_cls.def("RequestStateChange", &Engine::RequestStateChange);
|
|
|
+ engine_cls.def("RequestPopState", &Engine::RequestPopState);
|
|
|
+
|
|
|
+ // SDL resources
|
|
|
+ engine_cls.def("GetRenderer", &Engine::GetRenderer, py::return_value_policy::reference);
|
|
|
+ engine_cls.def("GetWindow", &Engine::GetWindow, py::return_value_policy::reference);
|
|
|
+
|
|
|
+ // Logging
|
|
|
+ engine_cls.def("log", [](Engine& self, const std::string& msg) {
|
|
|
SDL_Log("[PY] %s", msg.c_str());
|
|
|
});
|
|
|
|
|
|
- // Get engine reference
|
|
|
+ // Static accessor
|
|
|
engine_cls.def_static("get", &Engine::Get, py::return_value_policy::reference);
|
|
|
+
|
|
|
+ // === Convenient top-level functions ==
|
|
|
m.def("engine", &Engine::Get, py::return_value_policy::reference);
|
|
|
+
|
|
|
+ m.def("log", [](const std::string& msg) {
|
|
|
+ SDL_Log("[PY] %s", msg.c_str());
|
|
|
+ });
|
|
|
+
|
|
|
+ m.def("quit", []() {
|
|
|
+ Engine::Get().StopRunning();
|
|
|
+ SDL_Log("[PY] Quit requested from Python");
|
|
|
+ });
|
|
|
+
|
|
|
+ m.def("run_script", [](const std::string& filename) {
|
|
|
+ Engine::Get().RunPythonScript(filename);
|
|
|
+ });
|
|
|
+
|
|
|
}
|