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();
|
path_.clear();
|
||||||
gas_ = false;
|
gas_ = false;
|
||||||
stuck_counter_ = 0;
|
stuck_counter_ = 0;
|
||||||
|
vehicle_state_ = NVT_NORMAL;
|
||||||
speed_limit_ = 0.0f;
|
speed_limit_ = 0.0f;
|
||||||
|
|
||||||
if (GetVehicle() && IsDriver())
|
if (GetVehicle() && IsDriver())
|
||||||
@ -87,6 +88,22 @@ void game::NpcCharacter::VehicleThink()
|
|||||||
if (!IsDriver() || !GetVehicle() || !roads_)
|
if (!IsDriver() || !GetVehicle() || !roads_)
|
||||||
return;
|
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 auto& vehicle_trans = GetVehicle()->GetRootTransform();
|
||||||
|
|
||||||
const glm::vec3& pos = vehicle_trans.position;
|
const glm::vec3& pos = vehicle_trans.position;
|
||||||
@ -203,8 +220,14 @@ void game::NpcCharacter::VehicleThink()
|
|||||||
// BotThink(s);
|
// BotThink(s);
|
||||||
//});
|
//});
|
||||||
|
|
||||||
GetVehicle()->SetInputs(0); // stop
|
vehicle_->SetSteering(true, -angle); // try turn away while reversing
|
||||||
is_driver_ = false; // TODO: fix
|
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;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,12 @@ namespace game
|
|||||||
|
|
||||||
class OpenWorld;
|
class OpenWorld;
|
||||||
|
|
||||||
|
enum NpcVehicleThinkState
|
||||||
|
{
|
||||||
|
NVT_NORMAL,
|
||||||
|
NVT_REVERSING,
|
||||||
|
};
|
||||||
|
|
||||||
class NpcCharacter : public ControllableCharacter
|
class NpcCharacter : public ControllableCharacter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -32,11 +38,13 @@ private:
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
// driver
|
// driver
|
||||||
|
NpcVehicleThinkState vehicle_state_ = NVT_NORMAL;
|
||||||
const assets::MapGraph* roads_;
|
const assets::MapGraph* roads_;
|
||||||
glm::vec3 seg_start_;
|
glm::vec3 seg_start_;
|
||||||
std::deque<size_t> path_;
|
std::deque<size_t> path_;
|
||||||
bool gas_ = false;
|
bool gas_ = false;
|
||||||
size_t stuck_counter_ = 0;
|
size_t stuck_counter_ = 0;
|
||||||
|
size_t reversing_frames_ = 0;
|
||||||
glm::vec3 last_pos_ = glm::vec3(0.0f);
|
glm::vec3 last_pos_ = glm::vec3(0.0f);
|
||||||
float speed_limit_ = 0.0f;
|
float speed_limit_ = 0.0f;
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user