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); }
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); }
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); }
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)); }
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 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); } } }
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); }
private void CleanIndicator() { BoardVisuals.RemoveIndicator(Owner); indicatorList.Clear(); }
public override void EnterCooldown() { BoardVisuals.RemoveTilesFromHighlightsByUnit(owner); StartCoroutine(countdown(Random.Range(0, 4), () => SetState(UnitStates.IDLE))); }