void BugAI::AI_STATE_Idle() { if(ComputeStimuli()) { ComputeState(); m_pServerDE->SetNextUpdate(m_hObject,0.1f); return; } else m_pServerDE->SetNextUpdate(m_hObject,0.2f); switch(Metacmd) { case 1: char szSound[256]; _mbscpy((unsigned char*)szSound, (const unsigned char*)SOUND_IDLE); m_pAnim_Sound->GetSoundPath(szSound,m_pServerDE->IntRandom(1,NUM_BUG_IDLE)); PlayAISound(szSound, 1000.0f); Metacmd++; break; case 2: MC_Idle(); break; case 3: m_fRadsLeft = m_pServerDE->Random(-1.56f,1.56f); Metacmd++; break; case 4: MC_Turn(); break; case 5: MC_Run(); break; case 6: SetNewState(STATE_Idle); break; } return; }
void BugAI::AI_STATE_Escape_RunAway() { //SCHLEGZ 4/22/98 4:51:21 PM: sanity check if(m_hTarget == DNULL) { SetNewState(STATE_Idle); return; } switch(Metacmd) { case 1: char szSound[256]; _mbscpy((unsigned char*)szSound, (const unsigned char*)SOUND_FEAR); m_pAnim_Sound->GetSoundPath(szSound,m_pServerDE->IntRandom(1,NUM_BUG_FEAR)); PlayAISound(szSound, 1000.0f); Metacmd++; break; case 2: MC_FaceTarget(); break; case 3: m_fRadsLeft = 3.14f; Metacmd++; break; case 4: MC_Turn(); break; case 5: MC_Run(); break; case 6: ComputeState(); break; } return; }
void CultistAI::AI_STATE_AttackClose() { DFLOAT fHeight = (DFLOAT)fabs(m_vTargetPos.y - m_MoveObj.GetPos().y); //SCHLEGZ 4/22/98 4:51:21 PM: sanity check if(m_hTarget == DNULL) { if(fHeight <= m_vDims.y) SetNewState(STATE_SearchVisualTarget); else ComputeState(); return; } m_fStimuli[SIGHT] = VEC_DIST(m_MoveObj.GetPos(),m_vTargetPos); DBOOL bAbove = (m_vTargetPos.y - m_MoveObj.GetPos().y) > 0; switch(Metacmd) { case 1: MC_FaceTarget(); break; case 2: MC_BestWeapon(); break; case 3: if(m_fStimuli[SIGHT] <= (m_fSeeingDist * 0.25) || m_nCurMetacmd == MC_FIRE_STAND || fHeight > m_vDims.y) { MC_Fire_Stand(); } else Metacmd++; break; case 4: if(m_fStimuli[SIGHT] > (m_fSeeingDist * 0.25) && m_fStimuli[SIGHT] < (m_fSeeingDist * 0.5)) { MC_FaceTarget(); Metacmd--; if(!IsLedge(m_MoveObj.GetForwardVector()) && fHeight <= m_vDims.y && m_nCurMetacmd != MC_FIRE_STAND) { if(m_nInjuredLeg) MC_Walk(); else MC_Run(); } else { MC_Fire_Stand(); } } else Metacmd++; break; case 5: ComputeState(); break; } return; }
void Prophet::AI_STATE_Escape_RunAway() { DFLOAT fHeight = (DFLOAT)fabs(m_vTargetPos.y - m_MoveObj.GetPos().y); //SCHLEGZ 4/22/98 4:51:21 PM: sanity check if(m_hTarget == DNULL && m_nCurMetacmd != MC_FIRE_STAND) { if(fHeight <= m_vDims.y) SetNewState(STATE_SearchVisualTarget); else ComputeState(); return; } switch(Metacmd) { case 1: MC_FaceTarget(); m_InventoryMgr.ChangeWeapon(WEAP_MELEE); break; case 2: m_fStimuli[SIGHT] = VEC_DIST(m_MoveObj.GetPos(),m_vTargetPos); if(m_fStimuli[SIGHT] <= 75.0f) MC_Fire_Stand(); else { MC_FaceTarget(); Metacmd--; if(!IsLedge(m_MoveObj.GetForwardVector()) && fHeight <= m_vDims.y) { MC_Run(); } else { MC_Idle(); } } break; case 3: ComputeState(); break; } return; }
void GremlinAI::AI_STATE_AttackClose() { DFLOAT fHeight = (DFLOAT)fabs(m_vTargetPos.y - m_MoveObj.GetPos().y); //SCHLEGZ 4/22/98 4:51:21 PM: sanity check if(m_hTarget == DNULL) { ComputeState(); return; } m_fStimuli[SIGHT] = VEC_DIST(m_MoveObj.GetPos(),m_vTargetPos); MC_FaceTarget(); Metacmd--; DBOOL bAbove = (m_vTargetPos.y - m_MoveObj.GetPos().y) > 0; switch(Metacmd) { case 1: MC_FaceTarget(); break; case 2: if(m_fStimuli[SIGHT] <= 75.0f || m_nCurMetacmd == MC_FIRE_STAND || (bAbove && fHeight > m_vDims.y)) { MC_Fire_Stand(); } else { if(m_fStimuli[SIGHT] > (m_fSeeingDist * 0.33)) ComputeState(); else MC_Run(); } break; case 3: ComputeState(); break; } return; }
void CivilianAI::AI_STATE_Escape_RunAway() { DVector vDims; m_pServerDE->GetObjectDims(m_hObject,&vDims); DFLOAT fDim = (DFLOAT)sqrt((vDims.x * vDims.x) + (vDims.z * vDims.z)) + 0.1f; switch(Metacmd) { case 1: { m_hTrackObject = FindObjectInRadius(m_pServerDE->GetClass("ExitHint"), m_fSeeingDist, FIND_VISIBLE); if(m_hTrackObject) { m_pServerDE->GetObjectPos(m_hTrackObject,&m_vTrackObjPos); DFLOAT fDist = VEC_DIST(m_vTrackObjPos, m_MoveObj.GetPos()); if(fDist <= fDim/2) { SetNewState(STATE_Escape_Hide); break; } MC_FacePos(m_vTrackObjPos); DRotation rRot; DVector vU, vR, vF, vMyF; m_pServerDE->GetObjectRotation(m_hTrackObject, &rRot); m_pServerDE->GetRotationVectors(&rRot, &vU, &vR, &vF); VEC_COPY(vMyF, m_MoveObj.GetForwardVector()); DFLOAT fHintDp = (vMyF.x * vF.x) + (vMyF.y * vF.y) + (vMyF.z * vF.z); if(fHintDp > 0) { if(!m_MoveObj.CalculatePath(m_vTrackObjPos)) SetNewState(STATE_Escape_Hide); } else SetNewState(STATE_Escape_Hide); } else SetNewState(STATE_Escape_Hide); break; } case 2: { DVector* pvPos = m_MoveObj.GetNextPathPoint(); if(pvPos) MC_FacePos(*pvPos); else SetNewState(STATE_Escape_RunAway); break; } case 3: { DVector vPoint = *m_MoveObj.GetNextPathPoint(); vPoint.y = m_MoveObj.GetPos().y; if(VEC_DIST(vPoint, m_MoveObj.GetPos()) <= fDim/2) { if(!m_MoveObj.MoveToNextPathPoint()) { MC_FacePos(m_vTargetPos); } else { Metacmd = 2; } } else MC_Run(); break; } case 4: ComputeState(); break; } return; }
void OpheliaREV::AI_STATE_Escape_RunAway() { if(Metacmd > 1) { int nStimType = ComputeStimuli(); if(nStimType > 0) { ComputeState(nStimType); return; } } DFLOAT fDim = (DFLOAT)sqrt((m_vDims.x * m_vDims.x) + (m_vDims.z * m_vDims.z)) + 0.1f; switch(Metacmd) { case 1: m_hTrackObject = FindObjectInRadius(m_pServerDE->GetClass("ExitHint"), m_fSeeingDist, FIND_VISIBLE | FIND_AVOID_TARGET); if(m_hTrackObject) { m_pServerDE->GetObjectPos(m_hTrackObject,&m_vTrackObjPos); MC_FacePos(m_vTrackObjPos); if(!m_MoveObj.CalculatePath(m_vTrackObjPos)) SetNewState(STATE_Idle); } else SetNewState(STATE_AttackFar); break; case 2: { DVector* pvPos = m_MoveObj.GetNextPathPoint(); if(pvPos) MC_FacePos(*pvPos); else SetNewState(STATE_Escape_RunAway); break; } case 3: { DVector vPoint = *m_MoveObj.GetNextPathPoint(); vPoint.y = m_MoveObj.GetPos().y; if(VEC_DIST(vPoint, m_MoveObj.GetPos()) <= fDim/2) { if(!m_MoveObj.MoveToNextPathPoint()) { MC_FacePos(m_vTargetPos); } else { Metacmd = 2; } } else MC_Run(); break; } case 4: ComputeState(); break; } return;}