Make npcs not die inside when stuck but use reverse strategy again

This commit is contained in:
tovjemam 2026-05-08 21:01:53 +02:00
parent 5fa315fbcf
commit 05c8e66668
2 changed files with 33 additions and 2 deletions

View File

@ -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;
}
}

View File

@ -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;
};