From a99906317d91401f7f7adfd508f36d98501124ae Mon Sep 17 00:00:00 2001 From: Hartmut Seichter Date: Mon, 2 Apr 2018 11:34:53 +0200 Subject: [PATCH] refactored scripting to hide actual script implementation --- src/CMakeLists.txt | 5 +- src/core/include/pw/core/axisangle.hpp | 2 + src/core/include/pw/core/globals.hpp | 5 + src/core/include/pw/core/image.hpp | 4 + src/core/include/pw/core/quaternion.hpp | 7 ++ src/core/include/pw/core/vector.hpp | 5 +- src/core/src/core.cpp | 4 +- src/engine/pixwerx.cpp | 9 -- src/scripting/include/pw/scripting/script.hpp | 19 ++-- src/scripting/src/CMakeLists.txt | 7 ++ src/scripting/src/script.cpp | 91 ++++++++++++++----- src/scripts/demos/simple_000.lua | 22 ++++- src/ui/include/pw/ui/window.hpp | 4 +- src/ui/src/window.cpp | 18 ++-- 14 files changed, 140 insertions(+), 62 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 560b4c5..1b9f4d7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,4 @@ -include_directories( - ${CMAKE_CURRENT_SOURCE_DIR}/deps/lua-5.3.4/src - ${CMAKE_CURRENT_SOURCE_DIR}/deps/sol - ) + add_subdirectory(deps) add_subdirectory(core) diff --git a/src/core/include/pw/core/axisangle.hpp b/src/core/include/pw/core/axisangle.hpp index 0330ec7..9fbf8c3 100644 --- a/src/core/include/pw/core/axisangle.hpp +++ b/src/core/include/pw/core/axisangle.hpp @@ -28,6 +28,8 @@ public: }; +typedef axisangle axisangled; + } diff --git a/src/core/include/pw/core/globals.hpp b/src/core/include/pw/core/globals.hpp index d603c79..15d8e1c 100644 --- a/src/core/include/pw/core/globals.hpp +++ b/src/core/include/pw/core/globals.hpp @@ -2,4 +2,9 @@ #define PW_CORE_GLOBALS_HPP +#include + +#include + + #endif diff --git a/src/core/include/pw/core/image.hpp b/src/core/include/pw/core/image.hpp index f71c3ee..0dba463 100644 --- a/src/core/include/pw/core/image.hpp +++ b/src/core/include/pw/core/image.hpp @@ -2,9 +2,13 @@ #define PW_CORE_IMAGE_HPP #include +#include namespace pw { +class image : public referenced { + +}; } diff --git a/src/core/include/pw/core/quaternion.hpp b/src/core/include/pw/core/quaternion.hpp index 0763ea6..15f9c2b 100644 --- a/src/core/include/pw/core/quaternion.hpp +++ b/src/core/include/pw/core/quaternion.hpp @@ -58,6 +58,13 @@ public: _q.set(x,y,z,w); } + inline void set_x(const T& v) { x() = v; } + inline void set_y(const T& v) { y() = v; } + inline void set_z(const T& v) { z() = v; } + inline void set_w(const T& v) { w() = v; } + + + inline const vector4 as_vector() const { return _q; } inline T& x() { return _q.x(); } diff --git a/src/core/include/pw/core/vector.hpp b/src/core/include/pw/core/vector.hpp index 8b6e932..5b43346 100644 --- a/src/core/include/pw/core/vector.hpp +++ b/src/core/include/pw/core/vector.hpp @@ -65,8 +65,7 @@ public: // Vec3 ----------------------------------------------------------------------- template -class vector3 : public vector<3,T> -{ +class vector3 : public vector<3,T> { public: using vector<3,T>::operator=; @@ -79,6 +78,8 @@ public: void set(T c1, T c2, T c3) { (*this)(0) = c1; (*this)(1) = c2; (*this)(2) = c3; } + vector3 clone() const { return vector3(*this); } + inline void set_x(const T& v) { x() = v; } inline void set_y(const T& v) { y() = v; } inline void set_z(const T& v) { z() = v; } diff --git a/src/core/src/core.cpp b/src/core/src/core.cpp index 2057d18..1632142 100644 --- a/src/core/src/core.cpp +++ b/src/core/src/core.cpp @@ -1,8 +1,8 @@ //#include -#include -#include +//#include +//#include #include "pw/core/matrixbase.hpp" diff --git a/src/engine/pixwerx.cpp b/src/engine/pixwerx.cpp index fda3a26..c59766a 100644 --- a/src/engine/pixwerx.cpp +++ b/src/engine/pixwerx.cpp @@ -53,14 +53,5 @@ int main(int argc,const char** argv) { pw::script s; -#if 1 return s.run(sout.str().c_str()); -#else - - s.load(sout.str()); - -// s.main_loop(); - - -#endif } diff --git a/src/scripting/include/pw/scripting/script.hpp b/src/scripting/include/pw/scripting/script.hpp index ab15597..b1e9f94 100644 --- a/src/scripting/include/pw/scripting/script.hpp +++ b/src/scripting/include/pw/scripting/script.hpp @@ -1,28 +1,29 @@ #ifndef PW_SCRIPTING_SCRIPT_HPP #define PW_SCRIPTING_SCRIPT_HPP -#include + +#include + +#include namespace pw { class script { -protected: - - scripting::state _state; - scripting::table _namespace; - public: script(); ~script(); - bool load(const std::string &s); - int run(const std::string& s); + struct state { + virtual int run(const std::string& script) = 0; + }; + protected: - void load_modules(); + std::unique_ptr _state; + }; } diff --git a/src/scripting/src/CMakeLists.txt b/src/scripting/src/CMakeLists.txt index 8d7e934..24478ff 100644 --- a/src/scripting/src/CMakeLists.txt +++ b/src/scripting/src/CMakeLists.txt @@ -20,4 +20,11 @@ target_include_directories( ../include ) +target_include_directories( + pwscripting + PUBLIC + ${CMAKE_SOURCE_DIR}/src/deps/lua-5.3.4/src + ${CMAKE_SOURCE_DIR}/src/deps/sol + ) + target_link_libraries(pwscripting lua pwcore) diff --git a/src/scripting/src/script.cpp b/src/scripting/src/script.cpp index 2eeadea..f340e86 100644 --- a/src/scripting/src/script.cpp +++ b/src/scripting/src/script.cpp @@ -1,56 +1,101 @@ #include "pw/scripting/script.hpp" + +#include "pw/scripting/scripting.hpp" + #include "pw/core/vector.hpp" +#include "pw/core/quaternion.hpp" +#include "pw/core/axisangle.hpp" -pw::script::script() { +struct lua_state : public pw::script::state { - // create global pw namespace - _namespace = _state.create_named_table("pw"); + pw::scripting::state _state; + pw::scripting::table _namespace; - // add the script as a user type - _namespace.new_usertype