From 97ea12df328582ed2e69ee23a76590c547716a53 Mon Sep 17 00:00:00 2001 From: namark <namark@disroot.org> Date: Wed, 16 Dec 2020 04:25:11 +0400 Subject: [PATCH] Consequences of disallowing 0 duration motion -_- --- circular_maze.cpp | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/circular_maze.cpp b/circular_maze.cpp index b2eeb2a..e7f0072 100644 --- a/circular_maze.cpp +++ b/circular_maze.cpp @@ -392,7 +392,8 @@ using radial_motion_t = movement<float, motion::quadratic_curve>; using circular_motion_t = movement<float, motion::quadratic_curve>; melody<circular_motion_t, radial_motion_t> -radial_motion; +complex_radial_motion; +radial_motion_t simple_radial_motion; struct radial_movement { @@ -484,21 +485,28 @@ void start(Program& program) if(diagram) maze.diagram(frame); - if(!radial_motion.done()) + if(!complex_radial_motion.done()) { float unwrapped_angle = maze.current_angle; - auto result = radial_motion.move(std::forward_as_tuple( + auto result = complex_radial_motion.move(std::forward_as_tuple( unwrapped_angle, maze.player_level) , delta); maze.current_angle = wrap(unwrapped_angle, 1.f); - if(!result.success) + if(result.done) { radial_movements.pop(); circular_velocity = 0; } } + else if(!simple_radial_motion.done()) + { + auto result = simple_radial_motion.move(maze.player_level, delta); + + if(result.done) + radial_movements.pop(); + } else { if(!empty(radial_movements)) @@ -507,14 +515,22 @@ void start(Program& program) auto circular_distance = mod_difference(maze.current_angle, wrap(3/4.f - movement.path, 1.f), 1.f); auto radial_distance = movement.level - maze.player_level; - radial_motion = melody( - circular_motion_t{ abs(circular_distance) * 10s, - maze.current_angle, - maze.current_angle + circular_distance }, - radial_motion_t{ abs(radial_distance) * 100ms, - maze.player_level, - movement.level } - ); + auto radial_motion = radial_motion_t + { + abs(radial_distance) * 100ms, + maze.player_level, movement.level + }; + if(abs(circular_distance) > 0) + { + complex_radial_motion = melody( + circular_motion_t{ abs(circular_distance) * 10s, + maze.current_angle, + maze.current_angle + circular_distance }, + radial_motion + ); + } + else + simple_radial_motion = radial_motion; } if(pressed(scancode::h) || pressed(scancode::left)) -- GitLab