53 _bInitialized = M_FALSE;
55 _self = _player = NULL;
56 _perceptsGlobal = NULL;
58 _strCurrentState = std::string(
"");
59 _pCurrentState = NULL;
68 _perceptsGlobal = pGlobalPercepts;
72 std::map<std::string, aiAgentState*>::iterator i;
74 for(i=_vStates.begin(); i!=_vStates.end(); i++)
76 i->second->_self = _self;
77 i->second->_player = _player;
86 ASSERT( _vStates.find(
id)==_vStates.end(),
"State ID already registered",
id.c_str() );
89 _vStates[id] = pState;
92 _vStates[id]->_self = _self;
93 _vStates[id]->_player = _player;
94 _vStates[id]->_agent =
this;
97 void aiAgent::state(std::string
id)
100 ASSERT( _vStates.find(
id)!=_vStates.end(),
"State ID is not registered",
id.c_str() );
103 if(
id != _strCurrentState )
105 _vStates[id]->perceive_active( _strCurrentState );
106 if(_pCurrentState) _pCurrentState->perceive_inactive(
id );
110 _strCurrentState = id;
111 _pCurrentState = _vStates[_strCurrentState];
121 char strState_Name[128], strState_Class[128];
124 fp->readSectionSeparator(strState_Name);
126 if( strstr(strState_Name,
"START") )
130 fp->readText(strState_Name);
131 ASSERT( _vStates.find(std::string(strState_Name))!=_vStates.end(),
132 "State ID=%s is not registered", strState_Name );
134 _pCurrentState = _vStates[strState_Name];
135 _strCurrentState = std::string(strState_Name);
136 _bInitialized = M_FALSE;
143 fp->readText(strState_Class);
147 fp->readObj(pState, M_FALSE);
150 add(strState_Name, pState);
160 void aiAgent::perceptsClear()
167 void aiAgent::perceive(
unsigned id, aiPerceptData data)
169 _percepts[id] = data;
175 void aiAgent::execute(
class laTimer *pt)
178 ASSERT( _self && _player && _perceptsGlobal,
"Controller objects are nil.");
179 ASSERT(_pCurrentState,
"Current state is nil.");
184 _pCurrentState->perceive_active( _strCurrentState );
185 _bInitialized = M_TRUE;
189 _percepts.dispatch( _pCurrentState, M_FALSE );
190 _perceptsGlobal->dispatch( _pCurrentState, M_TRUE );
Single state of the AI-controlled creature.
Flying creature behaviour.
laNamedClass * instantiate(std::string strClassName)
Instantiate class by name.
Crawling creature behaviour.
Class aiController is an abstract class for behaviours which can be performed by objects.
Lava-jumper creature behaviour.
#define REGISTER_CLASS(class_name)
Handy macro for registering named class prototype.
Active (interactive) object.