Ejemplo n.º 1
0
void FSM::setOnEnter(std::string state, std::function<void()> onEnter)
{
	if (isContainState(state))
	{
		_onEnter[state] = onEnter;
	}
	else
	{
		cocos2d::log("FSM::setOnEnter:no state named %s", state.c_str());
	}
}
Ejemplo n.º 2
0
FSM* FSM::addEvent(std::string eventName, std::string from, std::string to)
{
	if ("" == eventName)
	{
		cocos2d::log("FSM::addEvent: eventName can't be empty!");
		return nullptr;
	}
	if (!isContainState(from))
	{
		cocos2d::log("FSM::addEvent: from state %s does not exit.", from.c_str());
		return nullptr;
	}
	if (!isContainState(to))
	{
		cocos2d::log("FSM::addEvent: to state %s does not exit.", to.c_str());
		return nullptr;
	}
	std::unordered_map<std::string, std::string>& oneEvent = _events[eventName];
	oneEvent[from] = to;
	return this;
}
Ejemplo n.º 3
0
void FSM::changeToState(std::string state)
{
	if (isContainState(state))
	{
		_previousState = _currentState;
		_currentState = state;
		cocos2d::log("FSM::changeToState: %s -> %s.", _previousState.c_str(), _currentState.c_str());
		if (_onEnters[state])
			_onEnters[state]();
	}
	else
	{
		cocos2d::log("FSM::changeToState: no such state as %s, state unchanged.", state.c_str());
	}
}