/**************************************************************************** * KewlettEngineer.SNL * A Kewlett that fixes the generator * DAVIDE Jan 19, 2003 ****************************************************************************/ #inherit "Kewlett.SNL" VAR g_Generator; VAR g_GenFixTime, g_MaxPumpFixTime, g_IsFixingGen; VAR g_CurTriggerID; VAR g_GenNeedsFixing; /**************************************************************************** * Called when the object is first created * TimS March 7 2002 ****************************************************************************/ OnCreate() { ::OnCreate(); AddProperty2(THIS, "Personality", "Aggressive", "AI"); AddProperty1( THIS, "Colour", "AICOLOUR_ENGINEER" ); g_Generator = 0; g_GenFixTime = 0; g_MaxPumpFixTime = 15; g_IsFixingGen = 0; g_CurTriggerID = -1; g_GenNeedsFixing = 0; SetTriggers( "TRIGGER_TYPE_RepairMachine" ); } /***************************************************************************/ /**************************************************************************** * Called when the object is first turned on * TimS March 3 2002 ****************************************************************************/ OnBeginScript() { ::OnBeginScript(); FX_ReplaceTexture( THIS, "GAMEDATA_DDS_KEWLETTA", "GAMEDATA_DDS_KEW_ENG_MAP" ); AddChildMesh( THIS, "GAMEDATA_TMS_K_ENG_HELMET", 4 ); AddChildMesh( THIS, "GAMEDATA_TMS_FIXORAY", 8 ); SetProperty1(THIS, "AIRange", -1); // set the generator as the target g_Generator = ClosestObjectWithOBL(THIS, "Generator"); SetGenericTarget(THIS, g_Generator); SetGenericTargetPosition(THIS, (GetX(g_Generator)+120), GetY(g_Generator), GetZ(g_Generator)); } /***************************************************************************/ /**************************************************************************** * HandleTrigger() * Called when a special case (level specific) of a trigger needs to be handled. * DAVIDE October 31 2002 ****************************************************************************/ HandleTrigger( triggerType, srcX, srcY, srcZ, triggerID ) { if( triggerType == "TRIGGER_TYPE_RepairMachine" ) { // need to repair the generator g_CurTriggerID = triggerID; SetAIState(THIS, "AISTATE_Idle" ); SwitchGoals(THIS, "GOAL_PERFORM_TASK1", 1.0 ); RemoveTrigger(g_CurTriggerID); } } /***************************************************************************/ /**************************************************************************** * Called when the job JOB_START_TASK1 is called. Used to set special goal * data. * DAVIDE Jan 20 2003 ****************************************************************************/ OnStartTask1() { // determine if we need to run to the generator if(g_Generator) { g_GenNeedsFixing = QueryProperty_Number( g_Generator, "NeedFixing" ); if(g_GenNeedsFixing) { JobDone(THIS); //SYS_Break(); } else JobFailed(THIS); } else { JobFailed(THIS); } } /***************************************************************************/ /**************************************************************************** * Called when the job JOB_PERFORM_TASK1 is called. Used to set special goal * data. * DAVIDE Jan 20 2003 ****************************************************************************/ OnBeginTask1() { if(g_IsFixingGen == 0) { g_GenFixTime = g_MaxPumpFixTime; g_IsFixingGen = 1; } } /***************************************************************************/ /**************************************************************************** * Called when the job JOB_PERFORM_TASK1 is called. Used to process the * RunJob() part of the AI. * DAVIDE Jan 20 2003 ****************************************************************************/ OnHeartBeatTask1(seconds) { if(g_IsFixingGen == 1) { g_GenFixTime = g_GenFixTime - seconds; if(g_GenFixTime <= 0) { g_GenFixTime = g_MaxPumpFixTime; g_IsFixingGen = 0; // RemoveTrigger(g_CurTriggerID); // have the generator replace the pump CallFunction(g_Generator, "OnPumpFixed"); JobDone(THIS); } } } /***************************************************************************/ /**************************************************************************** * Called when the job JOB_END_TASK1 is called. Used to clear special goal * data. * DAVIDE Jan 20 2003 ****************************************************************************/ OnEndTask1() { } /***************************************************************************/ /**************************************************************************** * Called when destroyed * DAVIDE Jan 19 2003 ****************************************************************************/ OnDestroyed() { // reset the generator's "need fixing" property so it can reset the // spawn point CallFunction(g_Generator, "ResetTimer"); } /***************************************************************************/ /**************************************************************************** * Called when object leaves World Boundaries, and needs to reset the * generator timer. * DAVIDE Feb 10 2003 ****************************************************************************/ SetToBeDeleted() { OnDestroyed(); } /***************************************************************************/