aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/ai/je_state_machine.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2018-11-12 21:58:05 +0800
committerchai <chaifix@163.com>2018-11-12 21:58:05 +0800
commitaf62f267a24091a16cbafe844d59cdbd4e78f5b1 (patch)
tree3862cee497b30a9c54761c7cd60c5de5af4a78d3 /src/libjin/ai/je_state_machine.cpp
parent72e45f0062d727cedd576d1e1251f6722454a119 (diff)
*使用int做状态机key
Diffstat (limited to 'src/libjin/ai/je_state_machine.cpp')
-rw-r--r--src/libjin/ai/je_state_machine.cpp134
1 files changed, 67 insertions, 67 deletions
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)