gravity fixes

This commit is contained in:
Asteroth committed 2023-11-29 02:34:26 -05:00
1 parent 224503391f
commit 8dbe0e7b8a
2 files changed
+32 -29

No files matched your search

+30 -28
View File
@@ -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);
}
}
}
}
+2 -1
View File
@@ -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))) {