Skip to content

Commit 365a595

Browse files
committed
gamestate: Use absolute difference for calculating angles.
1 parent ea3c717 commit 365a595

File tree

2 files changed

+6
-14
lines changed

2 files changed

+6
-14
lines changed

libopenage/gamestate/system/apply_effect.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,11 @@ const time::time_t ApplyEffect::apply_effect(const std::shared_ptr<gamestate::Ga
6767
auto path_angle = path_vector.to_angle();
6868

6969
if (not turn_speed->is_infinite_positive()) {
70-
auto angle_diff = path_angle - effector_angle;
71-
if (angle_diff < 0) {
72-
// get the positive difference
73-
angle_diff = angle_diff * -1;
74-
}
70+
auto angle_diff = path_angle.abs_diff(effector_angle);
71+
7572
if (angle_diff > 180) {
7673
// always use the smaller angle
77-
angle_diff = angle_diff - 360;
78-
angle_diff = angle_diff * -1;
74+
angle_diff = coord::phys_angle_t::same_type_but_unsigned{360} - angle_diff;
7975
}
8076

8177
double turn_time = angle_diff.to_double() / turn_speed->get();

libopenage/gamestate/system/move.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -171,15 +171,11 @@ const time::time_t Move::move_default(const std::shared_ptr<gamestate::GameEntit
171171

172172
// rotation
173173
if (not turn_speed->is_infinite_positive()) {
174-
auto angle_diff = path_angle - current_angle;
175-
if (angle_diff < 0) {
176-
// get the positive difference
177-
angle_diff = angle_diff * -1;
178-
}
174+
auto angle_diff = path_angle.abs_diff(current_angle);
175+
179176
if (angle_diff > 180) {
180177
// always use the smaller angle
181-
angle_diff = angle_diff - 360;
182-
angle_diff = angle_diff * -1;
178+
angle_diff = coord::phys_angle_t::same_type_but_unsigned{360} - angle_diff;
183179
}
184180

185181
// Set an intermediate position keyframe to halt the game entity

0 commit comments

Comments
 (0)