private void ProcessMoveEvent(MoveEvent moveEvent)
        {
            IsInputEnabled = false;
            KVector2   from        = moveEvent.from;
            KVector2   to          = moveEvent.to;
            GameObject movedObject = FruitonsGrid[from.x, from.y];

            FruitonsGrid[to.x, to.y]     = movedObject;
            FruitonsGrid[from.x, from.y] = null;
            moveCoroutine = StartCoroutine(MoveCoroutine(movedObject.transform.position, to, movedObject));
            GridLayoutManager.ResetHighlights();
        }
Example #2
0
        public void LeftButtonUpLogic(RaycastHit[] hits)
        {
            if (!didMoveThisTurn)
            {
                if (hits.Length == 0)
                {
                    ClearAllAvailableActions();
                }
                gridLayoutManager.ResetHighlights();
            }

            Func <RaycastHit, bool> isHitGridTile =
                hit => battleViewer.GridLayoutManager.ContainsTile(hit.transform.gameObject);

            // We are only interested in clicks on the tiles.
            if (!hits.Any(isHitGridTile))
            {
                return;
            }

            GameObject hitTile = hits.FirstOrDefault(isHitGridTile).transform.gameObject;

            if (hitTile.Equals(default(GameObject)))
            {
                return;
            }
            Point      tilePosition = battleViewer.GridLayoutManager.GetIndicesOfTile(hitTile);
            GameObject hitFruiton   = battleViewer.FruitonsGrid[tilePosition.x, tilePosition.y];

            // A tile with a fruiton was clicked.
            if (hitFruiton != null)
            {
                bool performedAnyAction = false;
                // Find the action where the target is the clicked fruiton and perform it (if such action exists).
                performedAnyAction |= TryFindAndPerformAction(AttackAction.ID, tilePosition);
                performedAnyAction |= TryFindAndPerformAction(HealAction.ID, tilePosition);
                if (performedAnyAction)
                {
                    gridLayoutManager.ResetHighlights();
                }
                if (!didMoveThisTurn)
                {
                    // Check if I clicked on my fruiton in order to take action on him or only to select him.
                    if (!performedAnyAction && hitFruiton.GetComponent <ClientFruiton>().KernelFruiton.owner.id == ID)
                    {
                        battleViewer.GridLayoutManager.HighlightCell(tilePosition.x, tilePosition.y, Color.magenta);
                    }
                    availableActions = battleViewer.VisualizeAvailableTargetableActions(tilePosition);
                }
            }
            // A tile without fruiton was clicked.
            else
            {
                if (!TryFindAndPerformAction(MoveAction.ID, tilePosition))
                {
                    if (!didMoveThisTurn)
                    {
                        ClearAllAvailableActions();
                    }
                }
                else
                {
                    availableActions = battleViewer.VisualizeAvailableTargetableActions(tilePosition);
                    battleViewer.GridLayoutManager.HighlightCell(tilePosition.x, tilePosition.y, Color.magenta);
                }
            }
        }