private IEnumerator Animate() { // TODO play animations, etc yield return(null); ApplyAbility(); RoundController.EndTurn(); owner.ChangeState <SelectUnitState>(); }
protected override void OnTouch(object sender, InfoEventArgs <Point> e) { Tile tile = Board.GetTile(e.info); Unit actor = RoundController.Current; // End turn if select itself if (tile == actor.Tile) { RoundController.EndTurn(); owner.ChangeState <SelectUnitState>(); return; } bool inMoveRange = RangeManager.MoveRange.Contains(tile); bool inAbilityRange = RangeManager.AbilityRangeAndOrigin.ContainsKey(tile); // Restart turn if out of range if (!inMoveRange && !inAbilityRange) { owner.ChangeState <RestartUnitState>(); return; } // If another origin of attack tile, move there if (RangeManager.AbilityRangeAndOrigin[actor.turn.TargetTile].Contains(tile)) { actor.turn.SelectMovement(tile); owner.ChangeState <PerformMovement>(); return; } // Cancel attack and move if (inMoveRange) { actor.turn.SelectMovement(tile); actor.turn.SelectTarget(null); owner.ChangeState <PerformMovement>(); return; } // If not a target, return if (!actor.GetComponentInChildren <AbilityTarget>().IsTarget(tile)) { return; } // If in range, attack if (RangeManager.AbilityRangeAndOrigin[tile].Contains(actor.Tile)) { owner.ChangeState <PerformAbilityState>(); return; } }
protected override void OnTouch(object sender, InfoEventArgs <Point> e) { Tile tile = Board.GetTile(e.info); Unit actor = RoundController.Current; // End turn if select itself if (tile == actor.Tile) { RoundController.EndTurn(); owner.ChangeState <SelectUnitState>(); return; } bool inMoveRange = RangeManager.MoveRange.Contains(tile); bool inAbilityRange = RangeManager.AbilityRangeAndOrigin.ContainsKey(tile); // Restart turn if out of range if (!inMoveRange && !inAbilityRange) { owner.ChangeState <RestartUnitState>(); return; } // Just move to empty tile if (inMoveRange) { actor.turn.SelectMovement(tile); owner.ChangeState <PerformMovement>(); return; } // If not a target, return if (!actor.GetComponentInChildren <AbilityTarget>().IsTarget(tile)) { return; } // If not in range to target, move to one of origins if (tile.content != null) { var attackOrigins = RangeManager.AbilityRangeAndOrigin[tile]; actor.turn.SelectMovement(attackOrigins[0]); actor.turn.SelectTarget(tile); owner.ChangeState <PerformMovement>(); return; } }