Compare commits
No commits in common. "05c8e66668d3c95e64fe0b9a974452a4a6176f91" and "bb81cd360530a703554d3131871d5b0357c0164c" have entirely different histories.
05c8e66668
...
bb81cd3605
@ -15,7 +15,6 @@ void game::NpcCharacter::VehicleChanged()
|
||||
path_.clear();
|
||||
gas_ = false;
|
||||
stuck_counter_ = 0;
|
||||
vehicle_state_ = NVT_NORMAL;
|
||||
speed_limit_ = 0.0f;
|
||||
|
||||
if (GetVehicle() && IsDriver())
|
||||
@ -88,22 +87,6 @@ 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;
|
||||
@ -220,14 +203,8 @@ void game::NpcCharacter::VehicleThink()
|
||||
// BotThink(s);
|
||||
//});
|
||||
|
||||
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
|
||||
GetVehicle()->SetInputs(0); // stop
|
||||
is_driver_ = false; // TODO: fix
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,12 +8,6 @@ namespace game
|
||||
|
||||
class OpenWorld;
|
||||
|
||||
enum NpcVehicleThinkState
|
||||
{
|
||||
NVT_NORMAL,
|
||||
NVT_REVERSING,
|
||||
};
|
||||
|
||||
class NpcCharacter : public ControllableCharacter
|
||||
{
|
||||
public:
|
||||
@ -38,13 +32,11 @@ 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;
|
||||
};
|
||||
|
||||
@ -18,7 +18,7 @@ namespace game
|
||||
|
||||
static const char* GetRandomCarModel()
|
||||
{
|
||||
const char* vehicles[] = {"pickup_hd", "passat", "twingo", "polskifiat", "cow_static", "pig_static", "avia"};
|
||||
const char* vehicles[] = {"pickup_hd", "passat", "twingo", "polskifiat", "cow_static", "pig_static"};
|
||||
return vehicles[rand() % (sizeof(vehicles) / sizeof(vehicles[0]))];
|
||||
}
|
||||
|
||||
|
||||
@ -272,54 +272,12 @@ void game::Vehicle::ProcessInput()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (glm::abs(engineForce) > 0)
|
||||
flags_ |= VF_ACCELERATING;
|
||||
|
||||
if (glm::abs(breakingForce) > 0)
|
||||
flags_ |= VF_BREAKING;
|
||||
|
||||
const bool can_roll = wheels_on_ground_ <= (wheels_.size() / 2);
|
||||
|
||||
if (can_roll)
|
||||
++can_roll_frames_;
|
||||
else
|
||||
can_roll_frames_ = 0;
|
||||
|
||||
|
||||
const bool roll_left = in_left || (steering_analog_ && target_steering_ < -0.1f);
|
||||
const bool roll_right = in_right || (steering_analog_ && target_steering_ > 0.1f);
|
||||
|
||||
// check if airborne and apply roll if right/left pressed
|
||||
if (can_roll_frames_ >= 50 && (roll_left || roll_right))
|
||||
{
|
||||
btVector3 ang_vel = physics_->GetBtBody().getAngularVelocity();
|
||||
|
||||
const float max_vel = 5.0f;
|
||||
|
||||
btTransform trans = physics_->GetBtBody().getWorldTransform();
|
||||
btQuaternion quat = trans.getRotation();
|
||||
glm::quat rot_quat(quat.getW(), quat.getX(), quat.getY(), quat.getZ());
|
||||
glm::vec3 local_up_world = rot_quat * glm::vec3(0.0f, 0.0f, 1.0f);
|
||||
float roll_factor = glm::clamp(1.0f - local_up_world.z, 0.0f, 1.0f);
|
||||
glm::vec3 local_roll(0.0f, 0.5f * roll_factor, 0.0f);
|
||||
glm::vec3 local_ang_vel = glm::inverse(rot_quat) * glm::vec3(ang_vel.x(), ang_vel.y(), ang_vel.z());
|
||||
|
||||
if (glm::abs(local_ang_vel.y) < max_vel)
|
||||
{
|
||||
glm::vec3 world_roll = rot_quat * local_roll;
|
||||
glm::vec3 new_ang_vel = glm::vec3(ang_vel.x(), ang_vel.y(), ang_vel.z());
|
||||
|
||||
if (roll_left)
|
||||
new_ang_vel -= world_roll;
|
||||
|
||||
if (roll_right)
|
||||
new_ang_vel += world_roll;
|
||||
|
||||
ang_vel = btVector3(new_ang_vel.x, new_ang_vel.y, new_ang_vel.z);
|
||||
}
|
||||
|
||||
physics_->GetBtBody().setAngularVelocity(ang_vel);
|
||||
}
|
||||
}
|
||||
|
||||
void game::Vehicle::UpdateCrash()
|
||||
@ -366,17 +324,12 @@ void game::Vehicle::UpdateWheels()
|
||||
{
|
||||
auto& vehicle = physics_->GetBtVehicle();
|
||||
|
||||
wheels_on_ground_ = 0;
|
||||
|
||||
for (size_t i = 0; i < wheels_.size(); ++i)
|
||||
{
|
||||
auto& bt_wheel = vehicle.getWheelInfo(i);
|
||||
wheels_[i].speed = -(bt_wheel.m_rotation - wheels_[i].rotation) * 25.0f;
|
||||
wheels_[i].rotation = bt_wheel.m_rotation;
|
||||
wheels_[i].z_offset = tuning_ctx_.wheels[i].z_offset - bt_wheel.m_raycastInfo.m_suspensionLength;
|
||||
|
||||
if (bt_wheel.m_raycastInfo.m_isInContact)
|
||||
++wheels_on_ground_;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -131,10 +131,6 @@ private:
|
||||
size_t no_crash_frames_ = 0;
|
||||
|
||||
std::unique_ptr<DeformGrid> deformgrid_;
|
||||
|
||||
size_t wheels_on_ground_ = 0;
|
||||
size_t can_roll_frames_ = 0;
|
||||
|
||||
};
|
||||
|
||||
} // namespace game
|
||||
Loading…
x
Reference in New Issue
Block a user