コード例 #1
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));
    }
コード例 #2
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);
    }