diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/3rdparty/buildvm/buildvm.exe | bin | 123392 -> 121856 bytes | |||
-rw-r--r-- | src/3rdparty/minilua/minilua.exe | bin | 219136 -> 209920 bytes | |||
-rw-r--r-- | src/libjin/Time/je_timer.cpp | 2 | ||||
-rw-r--r-- | src/libjin/Utils/je_log.cpp | 10 | ||||
-rw-r--r-- | src/libjin/ai/je_state_machine.cpp | 134 | ||||
-rw-r--r-- | src/libjin/ai/je_state_machine.h | 66 | ||||
-rw-r--r-- | src/lua/common/je_lua_function.cpp | 45 | ||||
-rw-r--r-- | src/lua/common/je_lua_function.h | 46 | ||||
-rw-r--r-- | src/lua/common/je_lua_reference.cpp | 31 | ||||
-rw-r--r-- | src/lua/common/je_lua_reference.h | 27 | ||||
-rw-r--r-- | src/lua/modules/ai/je_lua_state_machine.cpp | 10 | ||||
-rw-r--r-- | src/lua/modules/time/je_lua_timer.cpp | 51 |
12 files changed, 264 insertions, 158 deletions
diff --git a/src/3rdparty/buildvm/buildvm.exe b/src/3rdparty/buildvm/buildvm.exe Binary files differindex 493ffc0..9cacff6 100644 --- a/src/3rdparty/buildvm/buildvm.exe +++ b/src/3rdparty/buildvm/buildvm.exe diff --git a/src/3rdparty/minilua/minilua.exe b/src/3rdparty/minilua/minilua.exe Binary files differindex 96c032d..512e93b 100644 --- a/src/3rdparty/minilua/minilua.exe +++ b/src/3rdparty/minilua/minilua.exe diff --git a/src/libjin/Time/je_timer.cpp b/src/libjin/Time/je_timer.cpp index 3315abf..a3edca7 100644 --- a/src/libjin/Time/je_timer.cpp +++ b/src/libjin/Time/je_timer.cpp @@ -88,7 +88,7 @@ namespace JinEngine Timer::Handler::~Handler() { - if (finishCallback) + if (finishCallback != nullptr) finishCallback(paramters); } diff --git a/src/libjin/Utils/je_log.cpp b/src/libjin/Utils/je_log.cpp index 1704ce3..e369e14 100644 --- a/src/libjin/Utils/je_log.cpp +++ b/src/libjin/Utils/je_log.cpp @@ -16,19 +16,19 @@ void Loghelper::log(Level _level, const char* _fmt, ...) switch (_level) { case LV_ERROR: - levelStr = "[Jin internal error]: "; + levelStr = "[Jin Error]: "; break; case LV_WARNING: - levelStr = "[Jin internal warning]: "; + levelStr = "[Jin Warning]: "; break; case LV_INFO: - levelStr = "[Jin internal info]: "; + levelStr = "[Jin Info]: "; break; case LV_DEBUG: - levelStr = "[Jin internal debug]: "; + levelStr = "[Jin Debug]: "; break; default: - levelStr = "[Jin internal unknow]: "; + levelStr = "[Jin Unknow]: "; break; } char buffer[FORMAT_MSG_BUFFER_SIZE + 1] = { 0 }; diff --git a/src/libjin/ai/je_state_machine.cpp b/src/libjin/ai/je_state_machine.cpp index 27b24a0..6208265 100644 --- a/src/libjin/ai/je_state_machine.cpp +++ b/src/libjin/ai/je_state_machine.cpp @@ -10,18 +10,18 @@ namespace JinEngine { StateMachine::StateMachine(Mode mode, void* userdata) - : mCurrentState("Empty") + : mCurrentState(0) , mUserData(userdata) , mMode(mode) { - addState("Empty"); + addState(0); } StateMachine::~StateMachine() { } - void StateMachine::invokeCallback(const string& from, const string& to) + void StateMachine::invokeCallback(int from, int to) { if (mExitCallback != nullptr) mExitCallback(from, mUserData); @@ -29,11 +29,11 @@ namespace JinEngine mTraslateCallback(from, to, mUserData); if (mEnterCallback != nullptr) mEnterCallback(to, mUserData); - map<string, StateChangeCallback>::iterator it = mOnExitState.find(from); + map<int, StateChangeCallback>::iterator it = mOnExitState.find(from); if (it != mOnExitState.end()) it->second(mUserData); - map<pair<string, string>, StateTranslateCallback>::iterator transItr - = mOnStateTranslate.find(pair<string, string>(from, to)); + map<pair<int, int>, StateTranslateCallback>::iterator transItr + = mOnStateTranslate.find(pair<int, int>(from, to)); if (transItr != mOnStateTranslate.end()) transItr->second(mUserData); it = mOnEnterState.find(to); @@ -43,10 +43,10 @@ namespace JinEngine void StateMachine::stepwiseProcess() { - map<string, State>::iterator it = mStates.find(mCurrentState); + map<int, State>::iterator it = mStates.find(mCurrentState); if (it == mStates.end()) { - jin_log_error("The state %s is not exist.", mCurrentState); + jin_log_error("The state [%d] is not exist.", mCurrentState); return; } State& state = it->second; @@ -71,17 +71,17 @@ namespace JinEngine // Call update if (mUpdateCallback != nullptr) mUpdateCallback(mCurrentState, mUserData); - map<string, StateUpdateCallback>::iterator uit = mOnUpdateState.find(mCurrentState); + map<int, StateUpdateCallback>::iterator uit = mOnUpdateState.find(mCurrentState); if (uit != mOnUpdateState.end()) uit->second(mUserData); } void StateMachine::iterativeProcess() { - map<string, State>::iterator it = mStates.find(mCurrentState); + map<int, State>::iterator it = mStates.find(mCurrentState); if (it == mStates.end()) { - jin_log_error("The state %s is not exist.", mCurrentState); + jin_log_error("The state [%d] is not exist.", mCurrentState); return; } State& state = it->second; @@ -107,7 +107,7 @@ namespace JinEngine // Call update if (mUpdateCallback != nullptr) mUpdateCallback(mCurrentState, mUserData); - map<string, StateUpdateCallback>::iterator uit = mOnUpdateState.find(mCurrentState); + map<int, StateUpdateCallback>::iterator uit = mOnUpdateState.find(mCurrentState); if (uit != mOnUpdateState.end()) uit->second(mUserData); // Recursive. @@ -131,10 +131,10 @@ namespace JinEngine bool StateMachine::processCondition(const Condition& condition) { - map<string, Parameter>::iterator it = mParameters.find(condition.parameter); + map<int, Parameter>::iterator it = mParameters.find(condition.parameter); if (it == mParameters.end()) { - jin_log_error("The parameter %s is not exist", condition.parameter); + jin_log_error("The parameter <%d> is not exist", condition.parameter); return false; } Parameter& p = it->second; @@ -180,73 +180,73 @@ namespace JinEngine return false; } - const string& StateMachine::getCurrentState() + int StateMachine::getCurrentState() { return mCurrentState; } - void StateMachine::addParameteri(const std::string& name) + void StateMachine::addParameteri(int name) { if (mParameters.find(name) != mParameters.end()) { - jin_log_error("The parameter %s is already exist.", name); + jin_log_error("The parameter <%d> is already exist.", name); return; } Parameter p; p.type = ParameterType::Int; p.value._int = 0; - mParameters.insert(pair<string, Parameter>(name, p)); + mParameters.insert(pair<int, Parameter>(name, p)); } - void StateMachine::addParameterf(const std::string& name) + void StateMachine::addParameterf(int name) { if (mParameters.find(name) != mParameters.end()) { - jin_log_error("The parameter %s is already exist.", name); + jin_log_error("The parameter <%d> is already exist.", name); return; } Parameter p; p.type = ParameterType::Float; p.value._float = 0.0f; - mParameters.insert(pair<string, Parameter>(name, p)); + mParameters.insert(pair<int, Parameter>(name, p)); } - void StateMachine::addParameterb(const std::string& name) + void StateMachine::addParameterb(int name) { if (mParameters.find(name) != mParameters.end()) { - jin_log_error("The parameter %s is already exist.", name); + jin_log_error("The parameter <%d> is already exist.", name); return; } Parameter p; p.type = ParameterType::Bool; p.value._bool = false; - mParameters.insert(pair<string, Parameter>(name, p)); + mParameters.insert(pair<int, Parameter>(name, p)); } - void StateMachine::addParametert(const std::string& name) + void StateMachine::addParametert(int name) { if (mParameters.find(name) != mParameters.end()) { - jin_log_error("The parameter %s is already exist.", name); + jin_log_error("The parameter <%d> is already exist.", name); return; } Parameter p; p.type = ParameterType::Trigger; p.value._trigger = false; - mParameters.insert(pair<string, Parameter>(name, p)); + mParameters.insert(pair<int, Parameter>(name, p)); } - void StateMachine::addState(const std::string& name) + void StateMachine::addState(int name) { if (mStates.find(name) != mStates.end()) { - jin_log_error("The state %s is already exist.", name); + jin_log_error("The state [%d] is already exist.", name); return; } State state; state.name = name; - mStates.insert(pair<string, State>(name, state)); + mStates.insert(pair<int, State>(name, state)); } const char* StateMachine::parameterTypeString(ParameterType type) @@ -260,37 +260,37 @@ namespace JinEngine } } - void StateMachine::addTransition(const std::string& from, const std::string& to, const Conditions& conditions) + void StateMachine::addTransition(int from, int to, const Conditions& conditions) { - map<string, State>::iterator it; + map<int, State>::iterator it; it = mStates.find(from); if (it == mStates.end()) { - jin_log_error("The state %s is not exist.", from); + jin_log_error("The state [%d] is not exist.", from); return; } State& fromState = it->second; it = mStates.find(to); if (it == mStates.end()) { - jin_log_error("The state %s is not exist.", to); + jin_log_error("The state [%d] is not exist.", to); return; } // Check condtion correctness. for (int i = 0; i < conditions.conditions.size(); ++i) { const Condition& condition = conditions.conditions[i]; - map<string, Parameter>::iterator itp; + map<int, Parameter>::iterator itp; itp = mParameters.find(condition.parameter); if (itp == mParameters.end()) { - jin_log_error("The parameter %s is not exist.", condition.parameter); + jin_log_error("The parameter <%d> is not exist.", condition.parameter); return; } Parameter& p = itp->second; if (p.type != condition.type) { - jin_log_error("The type of parameter %s is a %s, but the transition gives a %s value." + jin_log_error("The type of parameter <%d> is a %s, but the transition gives a %s value." , condition.parameter, parameterTypeString(p.type), parameterTypeString(condition.type)); return; } @@ -302,43 +302,43 @@ namespace JinEngine fromState.transitions.push_back(transition); } - void StateMachine::setParameteri(const std::string& name, int value) + void StateMachine::setParameteri(int name, int value) { - map<string, Parameter>::iterator it = mParameters.find(name); + map<int, Parameter>::iterator it = mParameters.find(name); if (it == mParameters.end()) { - jin_log_error("The state %s is not exist.", name); + jin_log_error("The state [%d] is not exist.", name); return; } Parameter& p = it->second; if (p.type != ParameterType::Int) { - jin_log_error("The type of parameter %s is %s, but try to assign a int value to it", name, parameterTypeString(p.type)); + jin_log_error("The type of parameter <%d> is %s, but try to assign a int value to it", name, parameterTypeString(p.type)); return; } p.value._int = value; } - void StateMachine::setParameterf(const std::string& name, float value) + void StateMachine::setParameterf(int name, float value) { - map<string, Parameter>::iterator it = mParameters.find(name); + map<int, Parameter>::iterator it = mParameters.find(name); if (it == mParameters.end()) { - jin_log_error("The state %s is not exist.", name); + jin_log_error("The state [%d] is not exist.", name); return; } Parameter& p = it->second; if (p.type != ParameterType::Float) { - jin_log_error("The type of parameter %s is %s, but try to assign a float value to it", name, parameterTypeString(p.type)); + jin_log_error("The type of parameter <%d> is %s, but try to assign a float value to it", name, parameterTypeString(p.type)); return; } p.value._float = value; } - void StateMachine::setParameterb(const std::string& name, bool value) + void StateMachine::setParameterb(int name, bool value) { - map<string, Parameter>::iterator it = mParameters.find(name); + map<int, Parameter>::iterator it = mParameters.find(name); if (it == mParameters.end()) { jin_log_error("The state %s is not exist.", name); @@ -347,15 +347,15 @@ namespace JinEngine Parameter& p = it->second; if (p.type != ParameterType::Bool) { - jin_log_error("The type of parameter %s is %s, but try to assign a bool value to it", name, parameterTypeString(p.type)); + jin_log_error("The type of parameter <%d> is %s, but try to assign a bool value to it", name, parameterTypeString(p.type)); return; } p.value._bool = value; } - void StateMachine::setParametert(const std::string& name) + void StateMachine::setParametert(int name) { - map<string, Parameter>::iterator it = mParameters.find(name); + map<int, Parameter>::iterator it = mParameters.find(name); if (it == mParameters.end()) { jin_log_error("The state %s is not exist.", name); @@ -364,61 +364,61 @@ namespace JinEngine Parameter& p = it->second; if (p.type != ParameterType::Trigger) { - jin_log_error("The type of parameter %s is %s, but try to assign a trigger value to it", name, parameterTypeString(p.type)); + jin_log_error("The type of parameter <%d> is %s, but try to assign a trigger value to it", name, parameterTypeString(p.type)); return; } p.value._trigger = true; } - void StateMachine::forceToState(const std::string& name) + void StateMachine::forceToState(int name) { if (mStates.find(name) == mStates.end()) { - jin_log_error("The state %s is not exist.", name); + jin_log_error("The state [%d] is not exist.", name); return; } mCurrentState = name; } - void StateMachine::addEnterListener(const std::string& state, const StateChangeCallback& callback) + void StateMachine::addEnterListener(int state, const StateChangeCallback& callback) { if (mOnEnterState.find(state) != mOnEnterState.end()) { - jin_log_error("The enter listener of %s is already exist.", state); + jin_log_error("The enter listener of [%d] is already exist.", state); return; } - mOnEnterState.insert(pair<string, StateChangeCallback>(state, callback)); + mOnEnterState.insert(pair<int, StateChangeCallback>(state, callback)); } - void StateMachine::addUpdateListener(const std::string& state, const StateUpdateCallback& callback) + void StateMachine::addUpdateListener(int state, const StateUpdateCallback& callback) { if (mOnUpdateState.find(state) != mOnUpdateState.end()) { - jin_log_error("The update listener of %s is already exist.", state); + jin_log_error("The update listener of [%d] is already exist.", state); return; } - mOnUpdateState.insert(pair<string, StateUpdateCallback>(state, callback)); + mOnUpdateState.insert(pair<int, StateUpdateCallback>(state, callback)); } - void StateMachine::addExitListener(const std::string& state, const StateChangeCallback& callback) + void StateMachine::addExitListener(int state, const StateChangeCallback& callback) { if (mOnExitState.find(state) != mOnExitState.end()) { - jin_log_error("The exit listener of %s is already exist.", state); + jin_log_error("The exit listener of [%d] is already exist.", state); return; } - mOnExitState.insert(pair<string, StateChangeCallback>(state, callback)); + mOnExitState.insert(pair<int, StateChangeCallback>(state, callback)); } - void StateMachine::addTranslateListener(const std::string& from, const std::string& to, const StateChangeCallback& callback) + void StateMachine::addTranslateListener(int from, int to, const StateChangeCallback& callback) { - if (mOnStateTranslate.find(pair<string, string>(from, to)) != mOnStateTranslate.end()) + if (mOnStateTranslate.find(pair<int, int>(from, to)) != mOnStateTranslate.end()) { - jin_log_error("The traslate listener of %s to %s is already exist.", from, to); + jin_log_error("The traslate listener of [%d] to [%d] is already exist.", from, to); return; } - pair<string, string> key(from, to); - mOnStateTranslate.insert(pair<pair<string, string>, StateTranslateCallback>(key, callback)); + pair<int, int> key(from, to); + mOnStateTranslate.insert(pair<pair<int, int>, StateTranslateCallback>(key, callback)); } void StateMachine::setUpdateListener(const SingleStateCallback& callback) diff --git a/src/libjin/ai/je_state_machine.h b/src/libjin/ai/je_state_machine.h index 6cd3f17..c928989 100644 --- a/src/libjin/ai/je_state_machine.h +++ b/src/libjin/ai/je_state_machine.h @@ -68,7 +68,7 @@ namespace JinEngine /// struct Condition { - std::string parameter; + int parameter; ParameterExpression expression; ParameterType type; ParameterValue value; @@ -100,7 +100,7 @@ namespace JinEngine conditions = condition.conditions; } - inline Conditions& andi(const std::string& parameter, ParameterExpression expression, int value) + inline Conditions& andi(int parameter, ParameterExpression expression, int value) { Condition condition; condition.expression = expression; @@ -111,7 +111,7 @@ namespace JinEngine return *this; } - inline Conditions& andf(const std::string& parameter, ParameterExpression expression , float value) + inline Conditions& andf(int parameter, ParameterExpression expression , float value) { Condition condition; condition.expression = expression; @@ -122,7 +122,7 @@ namespace JinEngine return *this; } - inline Conditions& andb(const std::string& parameter, ParameterExpression expression, bool value) + inline Conditions& andb(int parameter, ParameterExpression expression, bool value) { Condition condition; condition.expression = expression; @@ -133,7 +133,7 @@ namespace JinEngine return *this; } - inline Conditions& andt(const std::string& parameter) + inline Conditions& andt(int parameter) { Condition condition; condition.parameter = parameter; @@ -165,12 +165,12 @@ namespace JinEngine /// /// /// - typedef std::function<void(const std::string&, void*)> SingleStateCallback; + typedef std::function<void(int, void*)> SingleStateCallback; /// /// /// - typedef std::function<void(const std::string&, const std::string, void*)> DoubleStateCallback; + typedef std::function<void(int, const int, void*)> DoubleStateCallback; /// /// State machine constructor. @@ -195,82 +195,82 @@ namespace JinEngine /// /// Get current state name. /// - const std::string& getCurrentState(); + int getCurrentState(); /// /// Add a integer parameter. /// - void addParameteri(const std::string& name); + void addParameteri(int name); /// /// /// - void addParameterf(const std::string& name); + void addParameterf(int name); /// /// /// - void addParameterb(const std::string& name); + void addParameterb(int name); /// /// /// - void addParametert(const std::string& name); + void addParametert(int name); /// /// Add a state. /// - void addState(const std::string& name); + void addState(int name); /// /// /// - void addTransition(const std::string& from, const std::string& to, const Conditions& conditions); + void addTransition(int from, int to, const Conditions& conditions); /// /// Set parameter value. /// - void setParameteri(const std::string& name, int value); + void setParameteri(int name, int value); /// /// Set parameter value. /// - void setParameterf(const std::string& name, float value); + void setParameterf(int name, float value); /// /// Set parameter value. /// - void setParameterb(const std::string& name, bool value); + void setParameterb(int name, bool value); /// /// Set parameter value. /// - void setParametert(const std::string& name); + void setParametert(int name); /// /// Force change to state. /// - void forceToState(const std::string& name); + void forceToState(int name); /// /// /// - void addEnterListener(const std::string& state, const StateChangeCallback& callback); + void addEnterListener(int state, const StateChangeCallback& callback); /// /// Call state update function. /// - void addUpdateListener(const std::string& state, const StateUpdateCallback& callback); + void addUpdateListener(int state, const StateUpdateCallback& callback); /// /// /// - void addExitListener(const std::string& state, const StateChangeCallback& callback); + void addExitListener(int state, const StateChangeCallback& callback); /// /// /// - void addTranslateListener(const std::string& from, const std::string& to, const StateChangeCallback& callback); + void addTranslateListener(int from, int to, const StateChangeCallback& callback); /// /// @@ -309,7 +309,7 @@ namespace JinEngine struct Transition { Conditions conditions; ///< Condition to active transition. - std::string state; ///< State to translate to. + int state; ///< State to translate to. }; /// @@ -317,7 +317,7 @@ namespace JinEngine /// struct State { - std::string name; ///< Name of state. + int name; ///< Name of state. std::vector<Transition> transitions; ///< All transitions this state have. }; @@ -343,32 +343,32 @@ namespace JinEngine /// /// /// - void invokeCallback(const std::string& from, const std::string& to); + void invokeCallback(int from, int to); /// /// All state this state machine keeps. /// - std::map<std::string, State> mStates; + std::map<int, State> mStates; /// /// /// - std::map<std::string, StateChangeCallback> mOnEnterState; + std::map<int, StateChangeCallback> mOnEnterState; /// /// /// - std::map<std::string, StateUpdateCallback> mOnUpdateState; + std::map<int, StateUpdateCallback> mOnUpdateState; /// /// /// - std::map<std::string, StateChangeCallback> mOnExitState; + std::map<int, StateChangeCallback> mOnExitState; /// /// From first to second. /// - std::map<std::pair<std::string, std::string>, StateTranslateCallback> mOnStateTranslate; + std::map<std::pair<int, int>, StateTranslateCallback> mOnStateTranslate; /// /// @@ -393,12 +393,12 @@ namespace JinEngine /// /// Current state. /// - std::string mCurrentState; + int mCurrentState; /// /// All parameters. /// - std::map<std::string, Parameter> mParameters; + std::map<int, Parameter> mParameters; Mode mMode; diff --git a/src/lua/common/je_lua_function.cpp b/src/lua/common/je_lua_function.cpp new file mode 100644 index 0000000..e202d99 --- /dev/null +++ b/src/lua/common/je_lua_function.cpp @@ -0,0 +1,45 @@ +#include "je_lua_function.h" + +namespace JinEngine +{ + namespace Lua + { + + LuaFunc::LuaFunc(lua_State* L) + : mLuaFunc(nullptr) + , mParams(0) + , mL(L) + { + } + + LuaFunc::~LuaFunc() + { + delete mLuaFunc; + for (auto p : mParams) + delete p; + } + + void LuaFunc::setFunc(int i, uint nresults ) + { + if (mLuaFunc != nullptr) + delete mLuaFunc; + mLuaFunc = new LuaRef(mL, i); + mNResults = nresults; + } + + void LuaFunc::pushParam(int i) + { + mParams.push_back(new LuaRef(mL, i)); + } + + uint LuaFunc::call() + { + mLuaFunc->push(); + for (auto p : mParams) + p->push(); + luax_call(mL, mParams.size(), mNResults); + return mNResults; + } + + } +}
\ No newline at end of file diff --git a/src/lua/common/je_lua_function.h b/src/lua/common/je_lua_function.h new file mode 100644 index 0000000..a2d5ccc --- /dev/null +++ b/src/lua/common/je_lua_function.h @@ -0,0 +1,46 @@ +#ifndef __JIN_COMMON_FUNCTION_H +#define __JIN_COMMON_FUNCTION_H + +#include <vector> + +#include "libjin/jin.h" +#include "../luax.h" +#include "je_lua_reference.h" + +namespace JinEngine +{ + namespace Lua + { + + class LuaFunc + { + public: + LuaFunc(lua_State* L); + ~LuaFunc(); + + /// + /// + /// + void setFunc(int i, uint nresults); + + /// + /// + /// + void pushParam(int i); + + /// + /// + /// + uint call(); + + private: + LuaRef* mLuaFunc; + std::vector<LuaRef*> mParams; + lua_State* mL; + uint mNResults; + }; + + } // namespace Lua +} // namespace JinEngine + +#endif // __JIN_COMMON_REFERENCE_H
\ No newline at end of file diff --git a/src/lua/common/je_lua_reference.cpp b/src/lua/common/je_lua_reference.cpp new file mode 100644 index 0000000..90223de --- /dev/null +++ b/src/lua/common/je_lua_reference.cpp @@ -0,0 +1,31 @@ +#include "je_lua_reference.h" + +namespace JinEngine +{ + namespace Lua + { + + LuaRef::LuaRef(lua_State* L, int i) + : mL(L) + { + luax_pushvalue(mL, i); + mIndex = luax_ref(mL, LUA_REGISTRYINDEX); + } + + LuaRef::~LuaRef() + { + unref(); + } + + void LuaRef::unref() + { + luax_unref(mL, LUA_REGISTRYINDEX, mIndex); + } + + void LuaRef::push() + { + luax_rawgeti(mL, LUA_REGISTRYINDEX, mIndex); + } + + } +}
\ No newline at end of file diff --git a/src/lua/common/je_lua_reference.h b/src/lua/common/je_lua_reference.h index 28c3bc3..bde61b6 100644 --- a/src/lua/common/je_lua_reference.h +++ b/src/lua/common/je_lua_reference.h @@ -12,33 +12,18 @@ namespace JinEngine /// This class wraps the reference functionality built into Lua, which allows C++ code to refer to Lua /// variables. /// - class Reference + class LuaRef { public: - Reference(lua_State* L, unsigned int i) - : mL(L) - { - luax_pushvalue(mL, i); - mIndex = luax_ref(mL, LUA_REGISTRYINDEX); - } - - ~Reference() - { - unref(); - } - - void unref() - { - luax_unref(mL, LUA_REGISTRYINDEX, mIndex); - } + LuaRef(lua_State* L, int i); + ~LuaRef(); + + void unref(); /// /// Push value onto the stack. /// - void push() - { - luax_rawgeti(mL, LUA_REGISTRYINDEX, mIndex); - } + void push(); private: lua_State* const mL; diff --git a/src/lua/modules/ai/je_lua_state_machine.cpp b/src/lua/modules/ai/je_lua_state_machine.cpp index 9b95f43..82899b4 100644 --- a/src/lua/modules/ai/je_lua_state_machine.cpp +++ b/src/lua/modules/ai/je_lua_state_machine.cpp @@ -7,14 +7,14 @@ namespace JinEngine { namespace Lua { - + LUA_IMPLEMENT int l_addEnterCallback(lua_State* L) { - StateMachine* sm; - sm->addEnterListener("", [](void* p) -> void{ + //StateMachine* sm; + //sm->addEnterListener("", [](void* p) -> void{ - - }); + // + //}); return 0; } diff --git a/src/lua/modules/time/je_lua_timer.cpp b/src/lua/modules/time/je_lua_timer.cpp index c79c16b..239d1dd 100644 --- a/src/lua/modules/time/je_lua_timer.cpp +++ b/src/lua/modules/time/je_lua_timer.cpp @@ -1,4 +1,5 @@ #include "../types.h" +#include "lua/common/je_lua_function.h" #include "lua/common/je_lua_common.h" #include "je_lua_timer.h" @@ -23,23 +24,21 @@ namespace JinEngine delete param; } - Reference* func; - Reference* param; + LuaRef* func; + LuaRef* param; }; -#define TIMER_CALLBACK \ -[=](void* data)->void { \ - Callback* cbk = static_cast<Callback*>(data); \ - cbk->func->push(); \ - cbk->param->push(); \ - luax_call(L, 1, 0); \ -} + static Timer::TimerCallback Timer_Callback = [](void* data)->void + { + LuaFunc* func = static_cast<LuaFunc*>(data); + func->call(); + }; -#define FINISH_CALLBACK \ -[=](void* data) { \ - Callback* cbk = static_cast<Callback*>(data); \ - delete cbk; \ -} + static Timer::FinishCallback Finish_Callback = [](void* data)->void + { + LuaFunc* func = static_cast<LuaFunc*>(data); + delete func; + }; LUA_IMPLEMENT inline SharedTimer checkTimer(lua_State* L) { @@ -53,10 +52,10 @@ namespace JinEngine SharedTimer shared = checkTimer(L); Timer* timer = shared.getObject(); float s = luax_checknumber(L, 2); - Callback* callback = new Callback(); - callback->func = new Reference(L, 3); - callback->param = new Reference(L, 4); - Timer::Handler* handler = timer->every(s, TIMER_CALLBACK, callback, FINISH_CALLBACK); + LuaFunc* func = new LuaFunc(L); + func->setFunc(3, 0); + func->pushParam(4); + Timer::Handler* handler = timer->every(s, Timer_Callback, func, Finish_Callback); Proxy* proxy = luax_newinstance(L, JIN_TIME_HANDLER); proxy->bind(new Shared<Timer::Handler>(handler, JIN_TIME_HANDLER)); return 1; @@ -68,10 +67,10 @@ namespace JinEngine SharedTimer shared = checkTimer(L); Timer* timer = shared.getObject(); float s = luax_checknumber(L, 2); - Callback* callback = new Callback(); - callback->func = new Reference(L, 3); - callback->param = new Reference(L, 4); - Timer::Handler* handler = timer->after(s, TIMER_CALLBACK, callback, FINISH_CALLBACK); + LuaFunc* func = new LuaFunc(L); + func->setFunc(3, 0); + func->pushParam(4); + Timer::Handler* handler = timer->after(s, Timer_Callback, func, Finish_Callback); Proxy* proxy = luax_newinstance(L, JIN_TIME_HANDLER); proxy->bind(new Shared<Timer::Handler>(handler, JIN_TIME_HANDLER)); return 1; @@ -84,10 +83,10 @@ namespace JinEngine Timer* timer = shared.getObject(); float s = luax_checknumber(L, 2); int count = luax_checkinteger(L, 3); - Callback* callback = new Callback(); - callback->func = new Reference(L, 4); - callback->param = new Reference(L, 5); - Timer::Handler* handler = timer->repeat(s, count, TIMER_CALLBACK, callback, FINISH_CALLBACK); + LuaFunc* func = new LuaFunc(L); + func->setFunc(4, 0); + func->pushParam(5); + Timer::Handler* handler = timer->repeat(s, count, Timer_Callback, func, Finish_Callback); Proxy* proxy = luax_newinstance(L, JIN_TIME_HANDLER); proxy->bind(new Shared<Timer::Handler>(handler, JIN_TIME_HANDLER)); return 1; |