private void DeselectUnit(GridController gridController) { gridController.DeselectUnit(); gridController.RemoveActionPath(); playerClickManager.Reset(); tile.UpdateClickHint(); }
public void SetAction(Unit selectedPlayerUnit, Tile target, ClickButton clickButton) { if (grid == null) { grid = Harmony.Finder.GridController; } playerUnit = selectedPlayerUnit; tileToConfirm = target; var path = new List <Tile> { selectedPlayerUnit.CurrentTile }; if (clickButton == ClickButton.LeftClick) { switch (target.LeftClickType) { case ClickType.MoveTo: if (target.IsAvailable) { unitTurnAction = new Action(selectedPlayerUnit.UnitMover.PrepareMove(target, false)); } break; case ClickType.None: break; default: throw new Exception("Player click manager should only manage actions clicks, not selecting or other"); } } else if (clickButton == ClickButton.RightClick) { switch (target.RightClickType) { case ClickType.MoveTo: unitTurnAction = new Action(selectedPlayerUnit.UnitMover.PrepareMove(target, false)); break; case ClickType.Rest: unitTurnAction = new Action(selectedPlayerUnit.UnitMover.PrepareMove(target, false), ActionType.Rest); break; case ClickType.Attack: if (selectedPlayerUnit.TargetIsInRange(target.LinkedTargetable)) { unitTurnAction = new Action(path, ActionType.Attack, target.LinkedTargetable); } else { var adjacentTile = grid.FindAvailableAdjacentTile(target, selectedPlayerUnit); if (adjacentTile != null) { unitTurnAction = new Action(selectedPlayerUnit.UnitMover.PrepareMove(adjacentTile, false), ActionType.Attack, target.LinkedTargetable); } } break; case ClickType.Heal: if (selectedPlayerUnit.TargetIsInRange(target.LinkedUnit)) { unitTurnAction = new Action(path, ActionType.Heal, target.LinkedUnit); } else { var adjacentTile = grid.FindAvailableAdjacentTile(target, selectedPlayerUnit); if (adjacentTile != null) { unitTurnAction = new Action(selectedPlayerUnit.UnitMover.PrepareMove(adjacentTile, false), ActionType.Heal, target.LinkedUnit); } } break; case ClickType.Recruit: if (selectedPlayerUnit.TargetIsInRange(target.LinkedUnit)) { unitTurnAction = new Action(path, ActionType.Recruit, target.LinkedUnit); } else { var adjacentTile = grid.FindAvailableAdjacentTile(target, selectedPlayerUnit); if (adjacentTile != null) { unitTurnAction = new Action(selectedPlayerUnit.UnitMover.PrepareMove(adjacentTile, false), ActionType.Recruit, target.LinkedUnit); } } break; case ClickType.None: break; default: throw new Exception("Player click manager should only manage actions clicks, not selecting or other"); } } grid.RemoveActionPath(); if (unitTurnAction != null) { grid.DisplayAction(unitTurnAction, selectedPlayerUnit); } }