Make npcs not die inside when stuck but use reverse strategy again
This commit is contained in:
parent
5fa315fbcf
commit
05c8e66668
@ -15,6 +15,7 @@ void game::NpcCharacter::VehicleChanged()
|
||||
path_.clear();
|
||||
gas_ = false;
|
||||
stuck_counter_ = 0;
|
||||
vehicle_state_ = NVT_NORMAL;
|
||||
speed_limit_ = 0.0f;
|
||||
|
||||
if (GetVehicle() && IsDriver())
|
||||
@ -87,6 +88,22 @@ void game::NpcCharacter::VehicleThink()
|
||||
if (!IsDriver() || !GetVehicle() || !roads_)
|
||||
return;
|
||||
|
||||
if (vehicle_state_ == NVT_REVERSING)
|
||||
{
|
||||
if (reversing_frames_ > 0)
|
||||
{
|
||||
--reversing_frames_;
|
||||
}
|
||||
else
|
||||
{
|
||||
vehicle_state_ = NVT_NORMAL;
|
||||
stuck_counter_ = 0;
|
||||
vehicle_->SetInput(game::VIN_BACKWARD, false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
const auto& vehicle_trans = GetVehicle()->GetRootTransform();
|
||||
|
||||
const glm::vec3& pos = vehicle_trans.position;
|
||||
@ -203,8 +220,14 @@ void game::NpcCharacter::VehicleThink()
|
||||
// BotThink(s);
|
||||
//});
|
||||
|
||||
GetVehicle()->SetInputs(0); // stop
|
||||
is_driver_ = false; // TODO: fix
|
||||
vehicle_->SetSteering(true, -angle); // try turn away while reversing
|
||||
vehicle_->SetInputs(0); // stop
|
||||
vehicle_->SetInput(game::VIN_BACKWARD, true);
|
||||
vehicle_state_ = NVT_REVERSING;
|
||||
reversing_frames_ = 50; // reverse for 50 frames
|
||||
|
||||
// GetVehicle()->SetInputs(0); // stop
|
||||
// is_driver_ = false; // TODO: fix
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,6 +8,12 @@ namespace game
|
||||
|
||||
class OpenWorld;
|
||||
|
||||
enum NpcVehicleThinkState
|
||||
{
|
||||
NVT_NORMAL,
|
||||
NVT_REVERSING,
|
||||
};
|
||||
|
||||
class NpcCharacter : public ControllableCharacter
|
||||
{
|
||||
public:
|
||||
@ -32,11 +38,13 @@ private:
|
||||
private:
|
||||
|
||||
// driver
|
||||
NpcVehicleThinkState vehicle_state_ = NVT_NORMAL;
|
||||
const assets::MapGraph* roads_;
|
||||
glm::vec3 seg_start_;
|
||||
std::deque<size_t> path_;
|
||||
bool gas_ = false;
|
||||
size_t stuck_counter_ = 0;
|
||||
size_t reversing_frames_ = 0;
|
||||
glm::vec3 last_pos_ = glm::vec3(0.0f);
|
||||
float speed_limit_ = 0.0f;
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user