You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.3 KiB
65 lines
1.3 KiB
#include "bot_common.h" |
|
|
|
// Begin defusing the bomb |
|
|
|
void DefuseBombState::OnEnter(CCSBot *me) |
|
{ |
|
me->Crouch(); |
|
me->SetDisposition(CCSBot::SELF_DEFENSE); |
|
me->GetChatter()->Say("DefusingBomb"); |
|
} |
|
|
|
// Defuse the bomb |
|
|
|
void DefuseBombState::OnUpdate(CCSBot *me) |
|
{ |
|
const Vector *bombPos = me->GetGameState()->GetBombPosition(); |
|
CCSBotManager *ctrl = TheCSBots(); |
|
|
|
if (bombPos == NULL) |
|
{ |
|
me->PrintIfWatched("In Defuse state, but don't know where the bomb is!\n"); |
|
me->Idle(); |
|
return; |
|
} |
|
|
|
// look at the bomb |
|
me->SetLookAt("Defuse bomb", bombPos, PRIORITY_HIGH); |
|
|
|
// defuse... |
|
me->UseEnvironment(); |
|
|
|
if (gpGlobals->time - me->GetStateTimestamp() > 1.0f) |
|
{ |
|
// if we missed starting the defuse, give up |
|
if (ctrl->GetBombDefuser() == NULL) |
|
{ |
|
me->PrintIfWatched("Failed to start defuse, giving up\n"); |
|
me->Idle(); |
|
return; |
|
} |
|
else if (ctrl->GetBombDefuser() != me) |
|
{ |
|
// if someone else got the defuse, give up |
|
me->PrintIfWatched("Someone else started defusing, giving up\n"); |
|
me->Idle(); |
|
return; |
|
} |
|
} |
|
|
|
// if bomb has been defused, give up |
|
if (!ctrl->IsBombPlanted()) |
|
{ |
|
me->Idle(); |
|
return; |
|
} |
|
} |
|
|
|
void DefuseBombState::OnExit(CCSBot *me) |
|
{ |
|
me->StandUp(); |
|
me->ResetStuckMonitor(); |
|
me->SetTask(CCSBot::SEEK_AND_DESTROY); |
|
me->SetDisposition(CCSBot::ENGAGE_AND_INVESTIGATE); |
|
me->ClearLookAt(); |
|
}
|
|
|