diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/critter.cpp | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/src/critter.cpp b/src/critter.cpp index 4068c782..8be3678b 100644 --- a/src/critter.cpp +++ b/src/critter.cpp @@ -49,24 +49,21 @@ constexpr auto arrows_to_dir(bool left, bool right, bool up, bool down) constexpr Vector2 rotation_to_vec(rotation r) { constexpr double c = move_speed * frame_time; + constexpr double d = c / Vector2d{1, 1}.length(); - CORRADE_ASSUME(r < rotation_COUNT); + constexpr Vector2 array[8] = { + Vector2(Vector2d{ 0, -1} * c), + Vector2(Vector2d{ 1, -1} * d), + Vector2(Vector2d{ 1, 0} * c), + Vector2(Vector2d{ 1, 1} * d), + Vector2(Vector2d{ 0, 1} * c), + Vector2(Vector2d{-1, 1} * d), + Vector2(Vector2d{-1, 0} * c), + Vector2(Vector2d{-1, -1} * d), + }; - constexpr double d = c / Vector2d{1, 1}.length(); - switch (r) - { - using enum rotation; - case NE: return Vector2(Vector2d{ 1, -1} * d); - case SE: return Vector2(Vector2d{ 1, 1} * d); - case SW: return Vector2(Vector2d{-1, 1} * d); - case NW: return Vector2(Vector2d{-1, -1} * d); - case N: return Vector2(Vector2d{ 0, -1} * c); - case E: return Vector2(Vector2d{ 1, 0} * c); - case S: return Vector2(Vector2d{ 0, 1} * c); - case W: return Vector2(Vector2d{-1, 0} * c); - } - std::unreachable(); - fm_assert(false); + CORRADE_ASSUME(r < rotation_COUNT); + return array[(size_t)r]; } constexpr std::array<rotation, 3> rotation_to_similar(rotation r) |