mirror of
https://github.com/scp-fs2open/fs2open.github.com.git
synced 2026-11-07 22:56:30 -10:00
gravity fixes
This commit is contained in:
1 parent
224503391f
commit
8dbe0e7b8a
2 files changed
+32
-29
No files matched your search
+30
-28
@@ -8824,38 +8824,40 @@ void ai_chase()
|
||||
// Set predicted_enemy_pos.
|
||||
// See if attacking a subsystem.
|
||||
weapon_info* wip = ai_get_weapon(&shipp->weapons);
|
||||
bool ballistic = !IS_VEC_NULL(&The_mission.gravity) && wip->gravity_const != 0.0f;
|
||||
if (aip->targeted_subsys != NULL && get_shield_pct(En_objp) < HULL_DAMAGE_THRESHOLD_PERCENT) {
|
||||
Assert(En_objp->type == OBJ_SHIP);
|
||||
vec3d target_pos;
|
||||
get_subsystem_pos(&target_pos, En_objp, aip->targeted_subsys);
|
||||
if (wip) {
|
||||
bool ballistic = !IS_VEC_NULL(&The_mission.gravity) && wip->gravity_const != 0.0f;
|
||||
if (aip->targeted_subsys != NULL && get_shield_pct(En_objp) < HULL_DAMAGE_THRESHOLD_PERCENT) {
|
||||
Assert(En_objp->type == OBJ_SHIP);
|
||||
vec3d target_pos;
|
||||
get_subsystem_pos(&target_pos, En_objp, aip->targeted_subsys);
|
||||
|
||||
if (!ballistic)
|
||||
predicted_enemy_pos = target_pos;
|
||||
else {
|
||||
vec3d gravity_vec = The_mission.gravity * wip->gravity_const;
|
||||
has_valid_ballistic_trajectory =
|
||||
physics_lead_ballistic_trajectory(&Pl_objp->pos, &target_pos, &aip->last_aim_enemy_vel, wip->max_speed, &gravity_vec, &predicted_enemy_pos);
|
||||
|
||||
if (has_valid_ballistic_trajectory)
|
||||
predicted_enemy_pos = Pl_objp->pos + predicted_enemy_pos * vm_vec_dist(&Pl_objp->pos, &target_pos);
|
||||
else
|
||||
if (!ballistic)
|
||||
predicted_enemy_pos = target_pos;
|
||||
}
|
||||
else {
|
||||
vec3d gravity_vec = The_mission.gravity * wip->gravity_const;
|
||||
has_valid_ballistic_trajectory =
|
||||
physics_lead_ballistic_trajectory(&Pl_objp->pos, &target_pos, &aip->last_aim_enemy_vel, wip->max_speed, &gravity_vec, &predicted_enemy_pos);
|
||||
|
||||
predicted_vec_to_enemy = real_vec_to_enemy;
|
||||
} else {
|
||||
if (!ballistic)
|
||||
set_predicted_enemy_pos(&predicted_enemy_pos, Pl_objp, &aip->last_aim_enemy_pos, &aip->last_aim_enemy_vel, aip);
|
||||
else {
|
||||
vec3d gravity_vec = The_mission.gravity * wip->gravity_const;
|
||||
has_valid_ballistic_trajectory =
|
||||
physics_lead_ballistic_trajectory(&Pl_objp->pos, &aip->last_aim_enemy_pos, &aip->last_aim_enemy_vel, wip->max_speed, &gravity_vec, &predicted_enemy_pos);
|
||||
|
||||
if (has_valid_ballistic_trajectory)
|
||||
predicted_enemy_pos = Pl_objp->pos + predicted_enemy_pos * vm_vec_dist(&Pl_objp->pos, &aip->last_aim_enemy_pos);
|
||||
else
|
||||
if (has_valid_ballistic_trajectory)
|
||||
predicted_enemy_pos = Pl_objp->pos + predicted_enemy_pos * vm_vec_dist(&Pl_objp->pos, &target_pos);
|
||||
else
|
||||
predicted_enemy_pos = target_pos;
|
||||
}
|
||||
|
||||
predicted_vec_to_enemy = real_vec_to_enemy;
|
||||
} else {
|
||||
if (!ballistic)
|
||||
set_predicted_enemy_pos(&predicted_enemy_pos, Pl_objp, &aip->last_aim_enemy_pos, &aip->last_aim_enemy_vel, aip);
|
||||
else {
|
||||
vec3d gravity_vec = The_mission.gravity * wip->gravity_const;
|
||||
has_valid_ballistic_trajectory =
|
||||
physics_lead_ballistic_trajectory(&Pl_objp->pos, &aip->last_aim_enemy_pos, &aip->last_aim_enemy_vel, wip->max_speed, &gravity_vec, &predicted_enemy_pos);
|
||||
|
||||
if (has_valid_ballistic_trajectory)
|
||||
predicted_enemy_pos = Pl_objp->pos + predicted_enemy_pos * vm_vec_dist(&Pl_objp->pos, &aip->last_aim_enemy_pos);
|
||||
else
|
||||
set_predicted_enemy_pos(&predicted_enemy_pos, Pl_objp, &aip->last_aim_enemy_pos, &aip->last_aim_enemy_vel, aip);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1368,7 +1368,8 @@ int aifft_rotate_turret(object *objp, ship *shipp, ship_subsys *ss, object *lep,
|
||||
set_predicted_enemy_pos_turret(predicted_enemy_pos, &gun_pos, objp, &enemy_point, &target_vel, wip->max_speed, ss->turret_time_enemy_in_range * (weapon_system_strength + 1.0f)/2.0f);
|
||||
else {
|
||||
vec3d shoot_vec;
|
||||
if (physics_lead_ballistic_trajectory(&gun_pos, &enemy_point, &target_vel, wip->max_speed, &The_mission.gravity, &shoot_vec)) {
|
||||
vec3d gravity_vec = The_mission.gravity * wip->gravity_const;
|
||||
if (physics_lead_ballistic_trajectory(&gun_pos, &enemy_point, &target_vel, wip->max_speed, &gravity_vec, &shoot_vec)) {
|
||||
*predicted_enemy_pos = gun_pos + shoot_vec * 1000.0f;
|
||||
} else {
|
||||
if ((ss->system_info->flags[Model::Subsystem_Flags::Turret_reset_idle]) && (timestamp_elapsed(ss->rotation_timestamp))) {
|
||||
|
||||
Reference in new issue
Block a user