Esempio n. 1
0
    private cellScript.Direction GetDirection()
    {
        Vector3 curPos          = transform.position;
        Vector3 playerPos       = player.transform.position;
        float   currentDistance = MahattanDistance(curPos, playerPos);

        cellScript.Direction direction = cellScript.Direction.None;

        // try to move horizontally
        if (MahattanDistance(curPos + Vector3.right * 3, playerPos) < currentDistance &&
            !movement.GetNextPosition(cellScript.Direction.Right).Equals(gridMovement.NotMovable))
        {
            direction = cellScript.Direction.Right;
        }
        else if (MahattanDistance(curPos - Vector3.right * 3, playerPos) < currentDistance &&
                 !movement.GetNextPosition(cellScript.Direction.Left).Equals(gridMovement.NotMovable))
        {
            direction = cellScript.Direction.Left;
        }
        // try to move vertically
        else if (MahattanDistance(curPos + Vector3.forward * 3, playerPos) < currentDistance &&
                 !movement.GetNextPosition(cellScript.Direction.Up).Equals(gridMovement.NotMovable))
        {
            direction = cellScript.Direction.Up;
        }
        else if (MahattanDistance(curPos - Vector3.forward * 3, playerPos) < currentDistance &&
                 !movement.GetNextPosition(cellScript.Direction.Down).Equals(gridMovement.NotMovable))
        {
            direction = cellScript.Direction.Down;
        }

        return(direction);
    }
Esempio n. 2
0
 private void MoveInDirection(cellScript.Direction direction)
 {
     nextPosition = movement.GetNextPosition(direction);
     // next position is available in this direction
     // so we can move now
     if (!nextPosition.Equals(gridMovement.NotMovable))
     {
         isMoving = true;
     }
 }
Esempio n. 3
0
    private void ChasePlayer()
    {
        cellScript.Direction direction = GetDirection();

        if (direction.Equals(cellScript.Direction.None))
        {
            moveCount++;
            if (moveCount == 2)
            {
                moveCount         = 0;
                player.playerTurn = true;
                manager.SaveState();
            }
        }
        else
        {
            nextPosition = movement.GetNextPosition(direction);
            isMoving     = true;
        }
    }
Esempio n. 4
0
    public Vector3 GetNextPosition(cellScript.Direction direction)
    {
        cellScript next = current.neighborInDirection[direction];

        // there is a cell in this direction, ok
        if (next != null)
        {
            // check if that cell is movable or not
            if (current.neighbors[next])
            {
                // if movable, then move
                // get x and z offset, y unchanged
                float   xoffset = next.transform.position.x - transform.position.x;
                float   zoffset = next.transform.position.z - transform.position.z;
                Vector3 motion  = new Vector3(xoffset, 0.0f, zoffset);
                return(transform.position + motion);
            }
            // else stay
        }
        return(NotMovable);
    }