private void Start()
    {
        boardVisuals = GameObject.FindObjectOfType <BoardVisuals>();
        Vector2Int newIndex = new Vector2Int(Mathf.FloorToInt(transform.position.x), Mathf.FloorToInt(transform.position.y));

        chessPiece.UpdateIndex(boardVisuals.board, newIndex);
    }
Esempio n. 2
0
    public override UnitState HandleInput(Controller controller)
    {
        var swappedAbility = SwapActiveAbility(controller);

        if (swappedAbility != null)
        {
            BoardVisuals.RemoveTilesFromHighlightsByUnit(Owner);
            CleanIndicator();
            return(swappedAbility);
        }

        List <PathfindingData> tilesInRange = GetTilesInRange();

        // handling a special case where the targetting is programmatic.
        // will ecentually need to accomodate for this in a more robust way using OOP
        if (abilityComponent.CurrentAbility.AutoTargets)
        {
            PathfindingData autoTarget = tilesInRange.FirstOrDefault(
                element => element.tile.IsOccupied() && element.tile.OccupiedBy.GetComponent <Monster> ()
                );

            if (autoTarget == null)
            {
                AudioComponent.PlaySound(Sounds.ERROR);
                onAbilityCanceled();
                return(new PlayerIdleState(Owner));
            }

            if (Owner.EnergyComponent.AdjustEnergy(-abilityComponent.CurrentAbility.EnergyCost) &&
                abilityComponent.PrepAbility(tilesInRange, autoTarget))
            {
                onAbilityCommited(Owner, abilityComponent.IndexOfCurrentAbility());
                return(new PlayerActingState(Owner, tilesInRange, autoTarget));
            }
        }

        Point mousePosition = BoardUtility.mousePosFromScreenPoint();

        HighlightTiles(tilesInRange, mousePosition);

        // user clicks on a walkable tile which is in range....
        if (controller.DetectInputFor(ControlTypes.CONFIRM))
        {
            PathfindingData selectedTarget = tilesInRange.Find(
                element => element.tile.Position == mousePosition
                );

            // transition to acting state if it's a valid selection
            // and we successfully prep our ability for use
            bool targetIsValid = selectedTarget != null && selectedTarget.tile.isWalkable;
            if (targetIsValid && Owner.EnergyComponent.AdjustEnergy(-abilityComponent.CurrentAbility.EnergyCost) &&
                abilityComponent.PrepAbility(tilesInRange, selectedTarget))
            {
                onAbilityCommited(Owner, abilityComponent.IndexOfCurrentAbility());
                return(new PlayerActingState(Owner, tilesInRange, selectedTarget));
            }
        }

        return(null);
    }
Esempio n. 3
0
    private void HandleRange(List <PathfindingData> tilesInRange)
    {
        // convert pathfinding struct to tiles for AddTileToHighlights func...
        List <Tile> tiles = new List <Tile> ();

        tilesInRange.ForEach(element => {
            tiles.Add(element.tile);
        });
        BoardVisuals.AddTileToHighlights(Owner, tiles);
    }
Esempio n. 4
0
    public override void Enter()
    {
        BoardVisuals.RemoveTilesFromHighlightsByUnit(Owner);
        BoardVisuals.RemoveIndicator(Owner);
        this.UpdateState();

        // Color baseColor = TempChangeColor ();
        // // start a timer with a callback to transition to the next state
        // CoroutineHelper.Instance.StartCountdown (cooldownDuration,
        //     () => this.UpdateState (baseColor));
    }
Esempio n. 5
0
    public override UnitState HandleInput(Controller controller)
    {
        var plan = controller.Brain.Think();

        if (NoValidActionsAreAvailable(plan))
        {
            return(null);
        }

        if (abilityComponent.CurrentAbility is AttackAbility)
        {
            BoardVisuals.AddIndicator(Owner, plan.affectedTiles.ConvertAll(data => data.tile));
        }

        return(new AIActingState(Owner, plan.tilesInRange, plan.targetLocation));
    }
Esempio n. 6
0
        private void HintChanged(object sender, ItemChangedEventArgs <Hint> e)
        {
            if (Effect != null)
            {
                var hint = Game.Instance.ActiveHint;

                if (hint != null)
                {
                    var pos = BoardVisuals.BoardToWorldPosition(Game.Instance.ActiveHint.ConcernedCell);
                    Effect.transform.position = pos;

                    SetEffectActive(true);
                }
                else
                {
                    SetEffectActive(false);
                }
            }
        }
Esempio n. 7
0
    private void HandleIndicator(List <PathfindingData> tilesInRange, Point mousePosition)
    {
        var selectedTile = Owner.Board.TileAt(mousePosition);
        var isValid      = tilesInRange.Exists(data => data.tile == selectedTile);

        // tile is not valid or already is highlighted, return
        if (!isValid)
        {
            return;
        }

        if (abilityComponent.CurrentAbility.AreaOfEffect > 0)
        {
            var aoeRange       = RangeUtil.GetAoERangeFromMousePosition(mousePosition, abilityComponent.CurrentAbility);
            var curFrameCenter = aoeRange.Find(data => data.shadow.distance == 0).tile;
            if (curFrameCenter == AoECenter)
            {
                return;
            }
            else
            {
                CleanIndicator();
                aoeRange.ForEach(data => {
                    if (data.shadow.distance == 0)
                    {
                        AoECenter = data.tile;
                    }
                    indicatorList.Add(data.tile);
                });
            }
        }
        else
        {
            if (indicatorList.Contains(selectedTile))
            {
                return;
            }
            CleanIndicator();
            indicatorList.Add(selectedTile);
        }
        BoardVisuals.AddIndicator(Owner, indicatorList);
    }
Esempio n. 8
0
 private void CleanIndicator()
 {
     BoardVisuals.RemoveIndicator(Owner);
     indicatorList.Clear();
 }
Esempio n. 9
0
 public override void EnterCooldown()
 {
     BoardVisuals.RemoveTilesFromHighlightsByUnit(owner);
     StartCoroutine(countdown(Random.Range(0, 4), () => SetState(UnitStates.IDLE)));
 }