// Check the given directions and reverse directions
    // to get a proper move direction
    // return zero if moster cannot move to none of them.
    private Vector3 ChooseDirection(Vector3 first, Vector3 second)
    {
        // check order
        // 1. first
        // 2. second
        // 3. -second
        // 4. -first

        if (!gridMove.IsReverseDirection(first) && !gridMove.CheckWall(first))
        {
            return(first);
        }

        if (!gridMove.IsReverseDirection(second) && !gridMove.CheckWall(second))
        {
            return(second);
        }

        first  *= -1.0f;
        second *= -1.0f;

        if (!gridMove.IsReverseDirection(second) && !gridMove.CheckWall(second))
        {
            return(second);
        }

        if (!gridMove.IsReverseDirection(first) && !gridMove.CheckWall(first))
        {
            return(first);
        }

        return(Vector3.zero);
    }
    public void OnGrid(Vector3 newPos)
    {
        // 보석을 줍는다.
        m_map.PickUpItem(newPos);
        Vector3 direction;

        if (GlobalParam.GetInstance().IsAdvertiseMode())
        {
            direction = GetAdvModeMoveDirection();
        }
        else
        {
            direction = GetMoveDirection();
        }

        // 키 입력 없음(방향 전환 하지 않는다).
        if (direction == Vector3.zero)
        {
            return;
        }

        // 키 입력 방향으로 이동(이동할 수 있는 경우).
        if (!m_grid_move.CheckWall(direction))
        {
            m_grid_move.SetDirection(direction);
        }
    }
Exemple #3
0
    public void OnGrid(Vector3 newPos)
    {
        // 捡起宝石
        m_map.PickUpItem(newPos);
        Vector3 direction;

        if (GlobalParam.GetInstance().IsAdvertiseMode())
        {
            direction = GetAdvModeMoveDirection();
        }
        else
        {
            direction = GetMoveDirection();
        }

        // 没有按键输入(不转换方向)
        if (direction == Vector3.zero)
        {
            return;
        }

        // 先按键输入的方向移动(允许移动的情况下)
        if (!m_grid_move.CheckWall(direction))
        {
            m_grid_move.SetDirection(direction);
        }
    }
Exemple #4
0
    public void OnGrid(Vector3 newPos)
    {
        // 宝石を拾う.
        m_map.PickUpItem(newPos);
        Vector3 direction;

        if (GlobalParam.GetInstance().IsAdvertiseMode())
        {
            direction = GetAdvModeMoveDirection();
        }
        else
        {
            direction = GetMoveDirection();
        }

        // キー入力なし(方向転換しない).
        if (direction == Vector3.zero)
        {
            return;
        }

        // キー入力の方向へ移動(移動できる場合).
        if (!m_grid_move.CheckWall(direction))
        {
            m_grid_move.SetDirection(direction);
        }
    }
Exemple #5
0
    //  从候选值中获取可能的移动方向
    //  参数:
    //  first   第一候选值
    //  second  第二候选值
    //  返回值:
    //  移动方向/ 不允许移动时为Vector3.zero
    private Vector3 DirectionChoice(Vector3 first, Vector3 second)
    {
        // 按照下列顺序
        // 第一候选值
        // 第二候选值
        // 第二候选值的反方向
        // 第一候选值的反方向
        //
        // 进行探测,返回允许移动的方向

        // 第一候选值
        if (!m_grid_move.IsReverseDirection(first) &&
            !m_grid_move.CheckWall(first))
        {
            return(first);
        }

        // 第二候选值
        if (!m_grid_move.IsReverseDirection(second) &&
            !m_grid_move.CheckWall(second))
        {
            return(second);
        }

        first  *= -1.0f;
        second *= -1.0f;
        // 第二候选值的反方向
        if (!m_grid_move.IsReverseDirection(second) &&
            !m_grid_move.CheckWall(second))
        {
            return(second);
        }
        // 第一候选值的反方向
        if (!m_grid_move.IsReverseDirection(first) &&
            !m_grid_move.CheckWall(first))
        {
            return(first);
        }

        return(Vector3.zero);
    }
Exemple #6
0
    //  이동 방향의 후보를 참고하여 이동 가능한 방향을 구한다.
    //  인수:
    //  first   제1 후보.
    //  second  제2 후보.
    //  반환값:
    //  이동 방향/ 이동 불가능하다면 Vector3.zero
    private Vector3 DirectionChoice(Vector3 first, Vector3 second)
    {
        // 제1 후보.
        // 제2 후보.
        // 제2 후보의 역방향.
        // 제1 후보의 역방향.
        //
        // 순서를 점검해 이동 가능한 방향으로 보낸다.

        // 제1 후보.
        if (!m_grid_move.IsReverseDirection(first) &&
            !m_grid_move.CheckWall(first))
        {
            return(first);
        }

        // 제2 후보.
        if (!m_grid_move.IsReverseDirection(second) &&
            !m_grid_move.CheckWall(second))
        {
            return(second);
        }

        first  *= -1.0f;
        second *= -1.0f;
        // 제2 후보의 역방향.
        if (!m_grid_move.IsReverseDirection(second) &&
            !m_grid_move.CheckWall(second))
        {
            return(second);
        }
        // 제1 후보의 역방향.
        if (!m_grid_move.IsReverseDirection(first) &&
            !m_grid_move.CheckWall(first))
        {
            return(first);
        }

        return(Vector3.zero);
    }
Exemple #7
0
    //  移動方向の候補を参考にして移動可能な方向を得る.
    //  引数:
    //  first   第一候補.
    //  second  第二候補.
    //  戻り値:
    //  移動方向/ 移動不可能ならVector3.zero
    private Vector3 DirectionChoice(Vector3 first, Vector3 second)
    {
        // 第一候補.
        // 第二候補.
        // 第二候補の逆方向.
        // 第ー候補の逆方向.
        //
        // の順番に調べて、移動可能ならその方向を返す.

        // 第一候補.
        if (!m_grid_move.IsReverseDirection(first) &&
            !m_grid_move.CheckWall(first))
        {
            return(first);
        }

        // 第二候補.
        if (!m_grid_move.IsReverseDirection(second) &&
            !m_grid_move.CheckWall(second))
        {
            return(second);
        }

        first  *= -1.0f;
        second *= -1.0f;
        // 第二候補の逆方向.
        if (!m_grid_move.IsReverseDirection(second) &&
            !m_grid_move.CheckWall(second))
        {
            return(second);
        }
        // 第ー候補の逆方向.
        if (!m_grid_move.IsReverseDirection(first) &&
            !m_grid_move.CheckWall(first))
        {
            return(first);
        }

        return(Vector3.zero);
    }
Exemple #8
0
    public void OnGrid(Vector3 position)
    {
        map.PickupItem(position);

        var direction = GetMoveDirection();

        // no input
        if (direction == Vector3.zero) return;

        if (!gridMove.CheckWall(direction))
        {
            gridMove.Direction = direction;
        }
    }