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)); }
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); }