当たり判定共通化
移動ルーチン毎に重複して持っていた当たり判定処理を共通化しました。
結果、直進ルーチンはこうなります。
rect straight_routine( routine_type::self& self, rect r, input_command cmd, const stage_map* map) { float vx = -1.2f; float vy = 0.0f; while (true) { const move_info& mv = move(r, vx, vy, *map); r.x = mv.x; r.y = mv.y; vx = mv.vx; vy = mv.vy; boost::tie(r, cmd, map) = self.yield(r); } HAMIGAKI_COROUTINE_UNREACHABLE_RETURN(r) }
関数move()が速度を元に次の位置を決定する関数です。
当たり判定の結果ブロックにぶつかったり、ジャンプ中の重力の影響から速度が変化することがあるので、move()は位置だけでなく速度も返します。
この速度の変化があるためmove()の呼び出しをコルーチンの外に持っていくことができませんでした。
そうするには、コルーチンを速度ベースから加速度ベースの処理に変更したほうがよさそうです。
ダッシュ時のみ横方向の最高速が上がるので、加速度と最高速を返す感じにしてみます。