// wait for condition to be met inline void wait(void) { Lock lock(_mutex); // wait and check if condition is met: while( !testCondition() ) if( pthread_cond_wait(&_cond._cond, &_mutex._mutex)!=0 ) throw Threads::Exception("Conditional::wait(): " "pthread_cond_wait() failed"); };
int asyncAwaitCondition (int timeout, AsyncConditionTester *testCondition, void *data) { TimePeriod period; startTimePeriod(&period, timeout); while (!(testCondition && testCondition(data))) { long int elapsed; if (afterTimePeriod(&period, &elapsed)) return 0; awaitAction(timeout - elapsed); } return 1; }
void AiEntity::updateState() { // test conditions AiSpecies* species = gSpeciesData.get(mType); size_t totalStates = species->stateMachine.mStates.size(); bool isDone = false; for (size_t i = 0; i < totalStates && !isDone; i++) { if (species->stateMachine.mStates[i].state == mCurrentState) { if (testCondition(species->stateMachine.mStates[i].condition)) { mCurrentState = species->stateMachine.mStates[i].nextState; isDone = true; } } } switch(mCurrentState) { case AISTATE_ALL: printf("AiEntity::updateState(): AISTATE_ALL: should not be here...\n"); mCurrentState = AISTATE_STOP; break; case AISTATE_STOP: break; case AISTATE_WANDER: break; case AISTATE_MOVE_TO_WAYPOINT: break; case AISTATE_PURSUE: break; case AISTATE_ATTACK_MELEE: break; case AISTATE_ATTACK_RANGE: break; case AISTATE_RANGE: break; case AISTATE_FLEE: break; case AISTATE_FOLLOW: break; default: printf("AiEntity::updateState(): unknown state\n"); mCurrentState = AISTATE_STOP; break; } }
PyObject* Actionary::testPostAssertions(iPAR* ipar) { return testCondition(ipar,5); }
PyObject* Actionary::testDuringAssertions(iPAR* ipar) { return testCondition(ipar,4); }
PyObject* Actionary::testExecutionSteps(iPAR* ipar) { return testCondition(ipar, 3); }
PyObject* Actionary::testPreparatorySpec(iPAR* ipar) { return testCondition(ipar, 2); }
PyObject* Actionary::testCulminationCond(iPAR* ipar) { return testCondition(ipar, 1); }
PyObject* Actionary::testApplicabilityCond(iPAR* ipar) { return testCondition(ipar, 0); }
int main() { testCondition(); return 0; }