当たり判定共通化

移動ルーチン毎に重複して持っていた当たり判定処理を共通化しました。
結果、直進ルーチンはこうなります。

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()の呼び出しをコルーチンの外に持っていくことができませんでした。
そうするには、コルーチンを速度ベースから加速度ベースの処理に変更したほうがよさそうです。
ダッシュ時のみ横方向の最高速が上がるので、加速度と最高速を返す感じにしてみます。