#ifndef AI_PATROL #define AI_PATROL //trigger type 18 (trigger_time) object ai_patrol : ai_darkmod_base { float m_current_patrol_duration; //duration in seconds float m_max_patrol_duration; //time in minutes of expected patrol loop, spawnarg float m_update_period; //going to be a constant 1 second string m_route; //spawnarg target0 void RunningLate(string m_route); void init(); void updateLoop(); }; void ai_patrol::init() { sys.println ("ai_patrol::init() " + getKey("name")); m_current_patrol_duration = 0.0; m_max_patrol_duration = getFloatKey( "max_patrol_duration" ); m_update_period = 1.0; //checks every second m_route = getKey("target0"); thread updateLoop(); }; void ai_patrol::updateLoop() { while (!AI_DEAD || !AI_KNOCKEDOUT) { if (m_current_patrol_duration == m_max_patrol_duration) { RunningLate(m_route); } m_current_patrol_duration = m_current_patrol_duration + 1.0; wait( m_update_period ); // wait a second } } void ai_patrol::RunningLate(string m_route) { sys.println(m_route + " is running late"); //I was thinking $patrol_captain.DispatchSearch(m_route) would work here but it doesn't. This might be a place where the stim comes in? } // CAPTAIN object patrol_captain : ai_darkmod_base { float dummy; // void DispatchSearch(string m_route); void init(); void updateLoop(); }; void patrol_captain::init() { sys.println("patrol_captain::init()"); dummy = 1.0; thread updateLoop(); } void patrol_captain::updateLoop() { while (!AI_DEAD || !AI_KNOCKEDOUT) { wait(5); } } // BACKUP object patrol_backup : ai_darkmod_base { float dummy; void init(); void updateLoop(); }; void patrol_backup::init() { sys.println("patrol_backup::init()"); dummy = 1.0; thread updateLoop(); } void patrol_backup::updateLoop() { while (!AI_DEAD || !AI_KNOCKEDOUT) { wait(5); } } #endif // AI_PATROL