Beispiel #1
0
    /// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    /// Neighbouring Boards codes
    /// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

    // function to help convert the enum to the appropriate board reference
    public Board boardEnumToReference(BoardDirection bd)
    {
        switch (bd)
        {
        case BoardDirection.Top:
            return(top);

        case BoardDirection.Bottom:
            return(bottom);

        case BoardDirection.Left:
            return(left);

        case BoardDirection.Right:
            return(right);

        case BoardDirection.TopLeft:
            return(topLeft);

        case BoardDirection.TopRight:
            return(topRight);

        case BoardDirection.BottomLeft:
            return(bottomLeft);

        case BoardDirection.BottomRight:
            return(bottomRight);

        default:
            return(null);
        }
    }
Beispiel #2
0
    public void PushTile(Tile tile, BoardDirection inDirection)
    {
        if (!this.IsValidTile(tile))
        {
            return;
        }

        var lastTile = this.PeekLastTile();

        // First tile
        if (lastTile == null)
        {
            this.AddTile(tile);
            return;
        }

        var nextSection = Board.Instance.Pathfind(lastTile, tile, inDirection);

        foreach (var nextTile in nextSection)
        {
            if (this.IsValidTile(nextTile))
            {
                this.AddTile(nextTile);
            }
        }
    }
Beispiel #3
0
 public static bool IsAgainst(HexagonEdget edget, BoardDirection direction, bool isUpper)
 {
     if (isUpper)
     {
         if (direction == BoardDirection.Right || direction == BoardDirection.BottomRight)
         {
             return(edget == HexagonEdget.UpperLeft);
         }
         if (direction == BoardDirection.Left || direction == BoardDirection.BottomLeft)
         {
             return(edget == HexagonEdget.UpperRight);
         }
         if (direction == BoardDirection.TopLeft || direction == BoardDirection.TopRight)
         {
             return(edget == HexagonEdget.UpperDown);
         }
     }
     else
     {
         if (direction == BoardDirection.Right || direction == BoardDirection.TopRight)
         {
             return(edget == HexagonEdget.DownLeft);
         }
         if (direction == BoardDirection.Left || direction == BoardDirection.TopLeft)
         {
             return(edget == HexagonEdget.DownRight);
         }
         if (direction == BoardDirection.BottomLeft || direction == BoardDirection.BottomRight)
         {
             return(edget == HexagonEdget.DownUp);
         }
     }
     return(true);
 }
Beispiel #4
0
    //--------------------------------------------------------------------------------------------------------
    private void StartNewGame()
    {
        foreach (Block block in blocks)
        {
            Destroy(block.gameObject);
        }

        // reset the sim
        blocks.Clear();
        swipeDir                  = BoardDirection.Null;
        CurrentWildChance         = 0f;
        CurrentDoubleChance       = 0f;
        CurrentTripleChance       = 0f;
        CurrentHungryNekoInterval = -1;
        MovesSinceLastHungryNeko  = 0;
        turnCount                 = 1;
        Score                 = 0;
        isGameOver            = false;
        ForceWildCardNextTurn = false;
        GlobalFood            = new List <Block>();
        foreach (HungryNeko neko in HungryNekos)
        {
            neko.Reset();
        }
        foreach (Hex hex in hexes)
        {
            hex.Occupant = null;
        }

        // reset high score
        HighScore = PlayerPrefs.GetInt(playerPrefHighScoreKey);
        NewHighScoreIndicator.SetActive(false);
        if (HighScore > 0)
        {
            CurrentHighScoreIndicator.SetActive(true);
            CurrentHighScoreLabel.text = "High Score: " + HighScore;
        }
        else
        {
            CurrentHighScoreIndicator.SetActive(false);
        }

        // reset other things
        ClearTutorials();
        UnlockProgressBar.Reset();
        ScoreMultPanel.ResetLevel();
        UnlockProgressBar.LevelLabel.text = (UnlockProgressBar.CurrentUnlock + 1).ToString();

        // record number of games started on this device
        int gamesStarted = PlayerPrefs.GetInt(playerPrefsGameCountKey) + 1;

        PlayerPrefs.SetInt(playerPrefsGameCountKey, gamesStarted);
        PlayerPrefs.Save();
        Debug.Log("Starting game " + gamesStarted + " on this device.");

        // start the game
        CreateBlocks();
        SaveGameState();
        allowInput = true;
    }
    public virtual void Init(Hexagon hexagon, BoardDirection direction, int count, float time, float speed, Color32 color)
    {
        Vector3 phyDirection = Board.Instance.GetPhysicDirection(direction);
        Vector3 positionA    = Vector3.zero;
        Vector3 positionB    = Vector3.zero;

        switch (direction)
        {
        case BoardDirection.BottomLeft:
        case BoardDirection.BottomRight:
            positionA = hexagon.left;
            positionB = hexagon.right;
            break;

        case BoardDirection.Left:
        case BoardDirection.TopLeft:
            positionA = hexagon.left;
            positionB = hexagon.top;
            break;

        case BoardDirection.Right:
        case BoardDirection.TopRight:
            positionA = hexagon.right;
            positionB = hexagon.top;
            break;
        }

        for (int i = 0; i < count; i++)
        {
            GameObject particleObj = EntityPool.Instance.Use("Particle") as GameObject;
            Particle   particle    = particleObj.GetComponent <Particle>();
            particle.transform.localPosition = positionA + (positionB - positionA).magnitude * UnityEngine.Random.Range(0f, 1f) * (positionB - positionA).normalized;
            particle.Animate(GetRandomDirectionFrom(phyDirection, 20f), time, speed + UnityEngine.Random.Range(-.5f, .5f), color);
        }
    }
        public void Move(BoardDirection direction, PictureBox GameBox)
        {
            switch (direction)
            {
            case BoardDirection.Left:
                if (xPos - speedX > BricksBreaker.BorderWidth)
                {
                    xPos -= speedX;
                }
                else
                {
                    xPos = BricksBreaker.BorderWidth;
                }
                break;

            case BoardDirection.Right:
                if (xPos + boardWidth + BricksBreaker.BorderWidth + speedX < GameBox.Width)
                {
                    xPos += speedX;
                }
                else
                {
                    xPos = GameBox.Width - boardWidth - BricksBreaker.BorderWidth;
                }
                break;
            }
        }
Beispiel #7
0
 public void OnHitClock(BoardDirection direction)
 {
     if (Hexagon.IsAgainst(triggerEdget, direction, piece.isUpper))
     {
         triggered = true;
     }
 }
Beispiel #8
0
 //--------------------------------------------------------------------------------------------------------
 public void SlideTo(HungryNeko neko, BoardDirection direction)
 {
     swipeDestHex   = null;
     swipeDestNeko  = neko;
     swipeDestPos   = neko.transform.position;
     swipeDirection = direction;
 }
Beispiel #9
0
 //--------------------------------------------------------------------------------------------------------
 public void SlideTo(Hex destHex, BoardDirection direction)
 {
     swipeDestHex   = destHex;
     swipeDestNeko  = null;
     swipeDestPos   = destHex.transform.position;
     swipeDirection = direction;
 }
    public static BoardDirection Default()
    {
        var dir = new BoardDirection();

        dir.SetDefault();
        return(dir);
    }
Beispiel #11
0
    private void FigureOutDirection()
    {
        Board board;

        if (Board.Instance != null)
        {
            board = Board.Instance;
        }
        else
        {
            GameObject boardObj = GameObject.Find("Board");
            board = boardObj.GetComponent <Board> ();
        }

        if (board == null)
        {
            return;
        }

        board.FixReference();
        BoardDirection[] directions = new BoardDirection[6] {
            BoardDirection.BottomLeft,
            BoardDirection.BottomRight,
            BoardDirection.Left,
            BoardDirection.Right,
            BoardDirection.TopRight,
            BoardDirection.TopLeft
        };
        int d = 0;

        while (d < directions.Length)
        {
            foreach (var i in children)
            {
                List <Piece> pieces = board.GetDirectionPieces(i, directions[d]);
                if (pieces.Count > 0)
                {
                    List <Piece> others = GetPieceWithout(i, children);
                    bool         valide = true;
                    foreach (var j in others)
                    {
                        if (!pieces.Contains(j))
                        {
                            valide = false;
                            break;
                        }
                    }
                    if (valide)
                    {
                        Piece.sortingDirection = directions[d];
                        return;
                    }
                }
            }
            d++;
        }
    }
Beispiel #12
0
        } //End public bool findFourInARow(BoardVals valToConsider)

        /// <summary>
        /// Determines the direction when going from tile1 to tile 2
        /// </summary>
        /// <param name="tile1"></param>
        /// <param name="tile2"></param>
        /// <returns></returns>
        private BoardDirection determineDirectionT1ToT2(Point tile1, Point tile2)
        {
            //Declare variables
            BoardDirection returnVal = BoardDirection.NUll;

            if (isValidSpace(tile1) && isValidSpace(tile2))
            {
                if (tile1.X > tile2.X)
                {
                    if (tile1.Y > tile2.Y)
                    {
                        returnVal = BoardDirection.UpLeft;
                    } //End if (tile1.Y > tile2.Y)
                    else if (tile1.Y < tile2.Y)
                    {
                        returnVal = BoardDirection.DownLeft;
                    } //End else if (tile1.Y < tile2.Y)
                    else
                    {
                        returnVal = BoardDirection.Left;
                    } //End else
                }     //End if (tile1.X > tile2.X)
                else if (tile1.X < tile2.X)
                {
                    if (tile1.Y > tile2.Y)
                    {
                        returnVal = BoardDirection.UpRight;
                    } //End if (tile1.Y > tile2.Y)
                    else if (tile1.Y < tile2.Y)
                    {
                        returnVal = BoardDirection.DownRight;
                    } //End else if (tile1.Y < tile2.Y)
                    else
                    {
                        returnVal = BoardDirection.Right;
                    } //End else
                }     //End else if (tile1.X < tile2.X)
                else
                {
                    if (tile1.Y > tile2.Y)
                    {
                        returnVal = BoardDirection.Up;
                    } //End if (tile1.Y > tile2.Y)
                    else if (tile1.Y < tile2.Y)
                    {
                        returnVal = BoardDirection.Down;
                    } //End else if (tile1.Y < tile2.Y)
                    else
                    {
                        returnVal = BoardDirection.NUll;
                    } //End else
                }     //End else
            }         //End if (isValidSpace(tile1) && isValidSpace(tile2))

            return(returnVal);
        } //End private BoardDirection determineDirectionT1ToT2(Point tile1, Point tile2)
Beispiel #13
0
    public override void OnInspectorGUI()
    {
        Level level = this.target as Level;

        EditorGUILayout.BeginHorizontal();
        step = level.step;
        EditorGUILayout.PropertyField(serializedObject.FindProperty("step"), true);
        serializedObject.ApplyModifiedProperties();
        EditorGUILayout.EndHorizontal();

        if (this.step != level.step)
        {
            Debug.Log("Change Step Count");
            this.step = level.step;
            int[]            newPieceIndex = new int[step];
            BoardDirection[] newDirection  = new BoardDirection[step];

            for (int i = 0; i < level.pieceIndex.Length; i++)
            {
                if (i < newPieceIndex.Length)
                {
                    newPieceIndex[i] = level.pieceIndex[i];
                }
            }
            for (int i = 0; i < level.moveDirection.Length; i++)
            {
                if (i < newDirection.Length)
                {
                    newDirection[i] = level.moveDirection[i];
                }
            }
            level.pieceIndex    = newPieceIndex;
            level.moveDirection = newDirection;
        }

        //level.step = step;

        for (int i = 0; i < step; i++)
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Piece:", EditorStyles.label, GUILayout.Width(60));
            if (i < level.pieceIndex.Length)
            {
                level.pieceIndex[i] = EditorGUILayout.IntField(level.pieceIndex[i], GUILayout.Width(60));
            }
            if (i < level.moveDirection.Length)
            {
                level.moveDirection[i] = (BoardDirection)EditorGUILayout.EnumPopup("Direction:", level.moveDirection[i]);
            }
            EditorGUILayout.EndHorizontal();
        }

        EditorUtility.SetDirty(level);

        serializedObject.ApplyModifiedProperties();
    }
Beispiel #14
0
 public void OnHitPiece(BoardDirection direction, float time)
 {
     if (clock != null)
     {
         clock.OnHitClock(direction);
         if (clock.triggered)
         {
             delayCall = new DelayCall();
             delayCall.Init(time, OnClock);
         }
     }
 }
Beispiel #15
0
    // neighbouring function to get all boards in this specific direction
    public List <Board> getAllBoardInDirection(BoardDirection bd)
    {
        List <Board> list  = new List <Board>();
        Board        chain = boardEnumToReference(bd);

        while (chain != null)
        { // recursively add the boards in the specified direction
            list.Add(chain);
            chain = chain.boardEnumToReference(bd);
        }
        return(list); // returns the list of boards in the direction
    }
    /// <remarks>More complex, intended for testing non-adjacent tiles.</remarks>
    public void Set(Tile from, Tile to, BoardDirection fromDirection)
    {
        if (from == null || to == null)
        {
            return;
        }

        var fromC = from.Coordinates;
        var toC   = to.Coordinates;

        var isGoingBackwardsX = false;
        var xDir    = Mathf.Sign(toC.x - fromC.x);
        var facingX = !Mathf.Approximately(fromDirection.Value.x, 0f);

        if (!Mathf.Approximately(xDir, 0f) && facingX)
        {
            isGoingBackwardsX = !Mathf.Approximately(Mathf.Sign(xDir), Mathf.Sign(fromDirection.Value.x));
        }

        var isGoingBackwardsY = false;
        var yDir    = Mathf.Sign(toC.y - fromC.y);
        var facingY = !Mathf.Approximately(fromDirection.Value.y, 0f);

        if (!Mathf.Approximately(yDir, 0f) && facingY)
        {
            isGoingBackwardsY = !Mathf.Approximately(Mathf.Sign(yDir), Mathf.Sign(fromDirection.Value.y));
        }

        if (facingX)
        {
            if (isGoingBackwardsX)
            {
                this.SetValue(0, Mathf.RoundToInt(yDir));
            }
            else
            {
                this.SetValue(Mathf.RoundToInt(xDir), 0);
            }
        }
        else if (facingY)
        {
            if (isGoingBackwardsY)
            {
                this.SetValue(Mathf.RoundToInt(xDir), 0);
            }
            else
            {
                this.SetValue(0, Mathf.RoundToInt(yDir));
            }
        }
    }
Beispiel #17
0
    // neighbouring function to get a board in this specific direction and distance
    public Board getBoardFromDirection(BoardDirection bd, int distance)
    {
        Board target = boardEnumToReference(bd); // initial

        for (int x = 1; x < distance; x++)
        { // recursively find the board in the specified direction
            if (target == null)
            {
                break; // no board here... do not continue...
            }
            target = target.boardEnumToReference(bd);
        }
        return(target);
    }
Beispiel #18
0
    //----------------------------------------------------------------------------------------------
    public static List <Tile> GetAllTilesInDirection(Tile source, BoardDirection dir, int range)
    {
        List <Tile> result    = new List <Tile>();
        Tile        nextTile  = source.GetNeighborInDirection(dir);
        int         rangeLeft = range;

        while (rangeLeft > 0 && nextTile != null)
        {
            result.Add(nextTile);
            nextTile = nextTile.GetNeighborInDirection(dir);
            rangeLeft--;
        }

        return(result);
    }
Beispiel #19
0
    //--------------------------------------------------------------------------------------------------------
    private void Update()
    {
        if (isGameOver)
        {
            return;
        }

        blocks.RemoveAll(b => b == null);

        if (!allowInput && !IsAnyBlockMoving)
        {
            // blocks just finished moving to their destinations
            if (!SomethingJustPromoted)
            {
                ScoreMultPanel.ResetLevel();
            }

            // this part sucks - somehow there's food left over from last frame?
            foreach (Block food in GlobalFood)
            {
                Destroy(food.gameObject);
            }
            GlobalFood.Clear();

            CreateBlocks();
            SaveGameState();
            allowInput            = true;
            SomethingJustPromoted = false;
        }

        swipeDir = GetSwipeDirection();

        if (swipeDir == BoardDirection.Null)
        {
            return;
        }

        ExecuteSwipe(out bool somethingMoved);

        if (!somethingMoved)
        {
            return;
        }

        turnCount++;
        allowInput = false;
        ClearTutorials();
    }
Beispiel #20
0
        public static BoardTile ProcessDPad(BoardTile boardTile, BoardDirection direction, ItemType item)
        {
            switch (direction)
            {
            case BoardDirection.UP:
                if (item == ItemType.Sliding)
                {
                    return(new BoardTile(boardTile.X, 7));
                }
                else
                {
                    return(new BoardTile(boardTile.X, boardTile.Y + 1));
                }

            case BoardDirection.DOWN:
                if (item == ItemType.Sliding)
                {
                    return(new BoardTile(boardTile.X, 0));
                }
                else
                {
                    return(new BoardTile(boardTile.X, boardTile.Y - 1));
                }

            case BoardDirection.LEFT:
                if (item == ItemType.Sliding)
                {
                    return(new BoardTile(0, boardTile.Y));
                }
                else
                {
                    return(new BoardTile(boardTile.X - 1, boardTile.Y));
                }

            case BoardDirection.RIGHT:
                if (item == ItemType.Sliding)
                {
                    return(new BoardTile(7, boardTile.Y));
                }
                else
                {
                    return(new BoardTile(boardTile.X + 1, boardTile.Y));
                }

            default:
                return(new BoardTile(-1, -1));
            }
        }
Beispiel #21
0
    //--------------------------------------------------------------------------------------------------------
    private static List <Hex> HexesInDirection(Hex source, BoardDirection dir)
    {
        List <Hex> result = new List <Hex> {
            source
        };
        Hex crawler = source;

        while (crawler.NeighborDirections.Contains(dir))
        {
            int dirIndex = crawler.NeighborDirections.FindIndex(d => d == dir);
            crawler = crawler.Neighbors[dirIndex];
            result.Add(crawler);
        }

        return(result);
    }
Beispiel #22
0
        /// <summary>
        /// MovePhaseの実装セット
        /// </summary>
        #region MovePhase

        public void SetDirection(int dir)
        {
            if (IsDuringTheMove)
            {
                return;
            }

            if (!board.CanMoveToDirection(currentSquare, BoardDirection.Up + dir))
            {
                Debug.Log("Nothing Square!");
                return;
            }
            int nextSquare = board.GetSquare(currentSquare).GetAdjacentSquares(BoardDirection.Up + dir).Number;

            if (board.PlayerIsInSquare(nextSquare))
            {
                Debug.Log("The square has already player!");
                return;
            }

            if (numberOfMoves != 0 && (int)moveDirectionHistories[numberOfMoves - 1] == (dir + 2) % 4)
            {
                numberOfMoves--;
                mobility       += board.GetSquare(nextSquare).ConsumptionOfMobility;
                moveDirection   = BoardDirection.Up + dir;
                IsDuringTheMove = true;
                currentSquare   = nextSquare;
                directionUI.SetActive(false);
                Debug.Log("Go Back");
                return;
            }

            if (mobility < board.GetSquare(nextSquare).ConsumptionOfMobility)
            {
                Debug.Log("Cannot Move!");
                return;
            }

            Debug.Log("Go Forward!");
            directionUI.SetActive(false);
            moveDirectionHistories[numberOfMoves] = BoardDirection.Up + dir;
            moveDirection = moveDirectionHistories[numberOfMoves];
            currentSquare = board.GetSquare(currentSquare).GetAdjacentSquares(BoardDirection.Up + dir).Number;
            numberOfMoves++;
            mobility       -= board.GetSquare(nextSquare).ConsumptionOfMobility;
            IsDuringTheMove = true;
        }
Beispiel #23
0
        public Player MovePlayer(BoardTile tile, BoardDirection direction)
        {
            var curPlayer = GetCurrentPlayer();
            var oldPos    = curPlayer.Position;
            // curPlayer.Position = tile;
            var othPlayer = PlayerList.GetAll().SingleOrDefault(plyr => plyr.Position.X == tile.X && plyr.Position.Y == tile.Y);

            if (othPlayer != null)
            {
                othPlayer.Position        = oldPos;
                othPlayer.FacingDirection = Utilities.Opposite(direction);
            }
            curPlayer.Position        = tile;
            curPlayer.FacingDirection = direction;
            curPlayer.MoveLeft       -= 1;
            return(curPlayer);
        }
Beispiel #24
0
    //----------------------------------------------------------------------------------------------
    private static BoardDirection GetOppositeDirection(BoardDirection dir)
    {
        switch (dir)
        {
        case BoardDirection.DownRight:
            return(BoardDirection.UpLeft);

        case BoardDirection.UpLeft:
            return(BoardDirection.DownRight);

        case BoardDirection.UpRight:
            return(BoardDirection.DownLeft);
        }

        // this must be BoardDirection.DownLeft
        return(BoardDirection.UpRight);
    }
Beispiel #25
0
    //----------------------------------------------------------------------------------------------
    private static (int, int) GetOffsetsForDirection(BoardDirection dir)
    {
        switch (dir)
        {
        case BoardDirection.DownRight:
            return(1, -1);

        case BoardDirection.UpLeft:
            return(-1, 1);

        case BoardDirection.UpRight:
            return(1, 1);
        }

        // this must be BoardDirection.DownLeft
        return(-1, -1);
    }
Beispiel #26
0
        } //End public BoardVals[,] getGameBoard()

        public BoardDirection getReverseDirection(BoardDirection direction)
        {
            //Declare variables
            BoardDirection reverseDirection = BoardDirection.NUll;

            switch (direction)
            {
            case BoardDirection.Up:
                reverseDirection = BoardDirection.Down;
                break;

            case BoardDirection.Down:
                reverseDirection = BoardDirection.Up;
                break;

            case BoardDirection.Left:
                reverseDirection = BoardDirection.Right;
                break;

            case BoardDirection.Right:
                reverseDirection = BoardDirection.Left;
                break;

            case BoardDirection.UpLeft:
                reverseDirection = BoardDirection.DownRight;
                break;

            case BoardDirection.UpRight:
                reverseDirection = BoardDirection.DownLeft;
                break;

            case BoardDirection.DownLeft:
                reverseDirection = BoardDirection.UpRight;
                break;

            case BoardDirection.DownRight:
                reverseDirection = BoardDirection.UpLeft;
                break;

            default:
                break;
            } //End switch (direction)

            return(reverseDirection);
        } //End public BoardDirection getReverseDirection(BoardDirection direction)
Beispiel #27
0
    //--------------------------------------------------------------------------------------------------------
    private static BoardDirection Opposite(BoardDirection dir)
    {
        switch (dir)
        {
        case BoardDirection.UpLeft: return(BoardDirection.DownRight);

        case BoardDirection.Up: return(BoardDirection.Down);

        case BoardDirection.DownLeft: return(BoardDirection.UpRight);

        case BoardDirection.UpRight: return(BoardDirection.DownLeft);

        case BoardDirection.Down: return(BoardDirection.Up);

        case BoardDirection.DownRight: return(BoardDirection.UpLeft);
        }
        return(BoardDirection.Null);
    }
Beispiel #28
0
    //--------------------------------------------------------------------------------------------------------
    private HungryNeko AdjacentHungryNeko(Hex hex, BoardDirection dir)
    {
        foreach (HungryNeko neko in HungryNekos)
        {
            if (neko.IsHungry)
            {
                for (int i = 0; i < neko.FeedingHexes.Count; i++)
                {
                    if (neko.FeedingHexes[i] == hex && neko.FeedingDirections[i] == dir)
                    {
                        return(neko);
                    }
                }
            }
        }

        return(null);
    }
Beispiel #29
0
    private bool CanReachTile(Tile tile, bool includeBackground, out BoardDirection inDirection)
    {
        inDirection = this.StartingDirection;

        var tileIsInPath = this.Path.Contains(tile);

        if (tileIsInPath)
        {
            return(false);
        }

        var tileHasPickup = Board.Instance.HasPickup(tile, includeBackground);

        if (!tileHasPickup)
        {
            return(false);
        }

        var lastTile      = this.Path.PeekLastTile() ?? this.AllowedStartingTile;
        var fromDirection = inDirection;

        if (!this.Path.IsClear())
        {
            // Change from direction to be from end of drawn path
            fromDirection.Set(this.Path.PeekSecondLastTile(), lastTile);
        }

        inDirection.Set(lastTile, tile, fromDirection);

        var pathSection       = Board.Instance.Pathfind(lastTile, tile, inDirection);
        var canPathfindToTile = true;

        foreach (var t in pathSection)
        {
            if (t != lastTile && this.Path.Contains(t))
            {
                canPathfindToTile = false;
                break;
            }
        }

        return(canPathfindToTile);
    }
Beispiel #30
0
 public bool CanLeave(bool isUpper, BoardDirection direction)
 {
     if (isUpper)
     {
         if (upperState == HexagonState.Rock)
         {
             return(false);
         }
         if (direction == BoardDirection.Right || direction == BoardDirection.TopRight)
         {
             return((blockState & (int)HexagonEdget.UpperRight) == 0);
         }
         if (direction == BoardDirection.Left || direction == BoardDirection.TopLeft)
         {
             return((blockState & (int)HexagonEdget.UpperLeft) == 0);
         }
         if (direction == BoardDirection.BottomRight || direction == BoardDirection.BottomLeft)
         {
             return((blockState & (int)HexagonEdget.UpperDown) == 0 && (blockState & (int)HexagonEdget.DownUp) == 0);
         }
     }
     else
     {
         if (lowerState == HexagonState.Rock)
         {
             return(false);
         }
         if (direction == BoardDirection.Right || direction == BoardDirection.BottomRight)
         {
             return((blockState & (int)HexagonEdget.DownRight) == 0);
         }
         if (direction == BoardDirection.Left || direction == BoardDirection.BottomLeft)
         {
             return((blockState & (int)HexagonEdget.DownLeft) == 0);
         }
         if (direction == BoardDirection.TopLeft || direction == BoardDirection.TopRight)
         {
             return((blockState & (int)HexagonEdget.UpperDown) == 0 && (blockState & (int)HexagonEdget.DownUp) == 0);
         }
     }
     return(true);
 }