// -------------------------------------------------------------------------------------------- protected override SharpUIBase BuildMainPanel() { SharpUINonDrawingGraphic toReturn = new SharpUINonDrawingGraphic("UIUnitOptionsView"); toReturn.SetFillSize(); toReturn.SubscribeToEvent(EEventType.Drag, (object sender, EventSystemEventArgs e) => { if (_following == null) { return; } PointerEventData pointerEventData = e.eventData as PointerEventData; if (_game.board.RaycastToPlane(pointerEventData.position, out Vector3 dragWorldPos)) { BoardTile draggingTile = _game.board.GetBoardTileAtPosition(dragWorldPos); if (draggingTile != null && _targetableTiles.Contains(draggingTile)) { _currentFacing = Unit.VectorToFacing(draggingTile.Transform.position - _following.BoardTile.Transform.position); _selectedBoardTile = draggingTile; _following.BoardTile.AddChild(_facingArrow); Quaternion facingRot = Unit.FacingToRotation(_currentFacing); _facingArrow.LocalRotation = Quaternion.Euler(90f, facingRot.eulerAngles.y - 90f, 0f); _facingArrow.LocalPosition = Vector3.up + (Quaternion.Euler(0f, facingRot.eulerAngles.y - 90f, 0f) * (Vector3.right * 2f)); } else { if (_facingArrow.IsBuilt) { _facingArrow.Destroy(); } _selectedBoardTile = null; _currentFacing = _following.Facing; } } }); toReturn.SubscribeToEvent(EEventType.Drop, (object sender, EventSystemEventArgs e) => { if (_facingArrow.IsBuilt) { if (_selectedBoardTile != null) { _listener.OnUseSkillConfirmed(_following, _currentFacing, _selectedBoardTile.Coord); } _facingArrow.Destroy(); } else { Hide(); } }); return(toReturn); }
// -------------------------------------------------------------------------------------------- public List <BoardTile> GetAffectedTiles(Unit.EFacing facing, IntVector2 startCoord) { BoardTile startTile = _game.board.GetTile(startCoord); List <BoardTile> toReturn = new List <BoardTile>(); switch (_skillData.areaType) { case SkillData.EAreaType.Single: toReturn.Add(startTile); break; default: throw new NotImplementedException($"GetTargetTiles not implemented for areaType {_skillData.areaType}"); } return(toReturn); }
// -------------------------------------------------------------------------------------------- public void TargetTowardTile(BoardTile boardTile) { // return if it is not the unit's owner's turn if (unit.Owner.playerIndex != _game.CurrentPlayer.playerIndex) { return; } // set CurrentlyTargeting to null and try to set it CurrentlyTargeting = null; int closestDistance = int.MaxValue; foreach (BoardTile targetableTile in _targetableTiles) { int distance = (boardTile.Coord - targetableTile.Coord).ManhattanDistance; if (distance > 1) { continue; } if (distance < closestDistance) { closestDistance = distance; CurrentlyTargeting = targetableTile; } } GameObject.SetActive(CurrentlyTargeting != null); if (CurrentlyTargeting == null) { return; } Unit.EFacing facing = Unit.VectorToFacing(CurrentlyTargeting.LocalPosition - unit.BoardTile.LocalPosition); LocalRotation = Unit.FacingToRotation(facing); LocalPosition = unit.BoardTile.LocalPosition + (LocalRotation * (Vector3.right * Offset.x)) + new Vector3(0f, Offset.y, 0f); }
// -------------------------------------------------------------------------------------------- public UseSkillAction(int playerIndex, int unitId, Unit.EFacing facingDir, IntVector2 targetCoord) : base(EType.UseSkill, playerIndex) { this.unitId = unitId; this.facingDir = (int)facingDir; this.targetCoord = targetCoord; }
public void OnUseSkillConfirmed(Unit unit, Unit.EFacing facing, IntVector2 targetCoord) { _unitOptionsView.Hide(); _game.QueueAction(new UseSkillAction(_game.CurrentPlayer.playerIndex, unit.id, facing, targetCoord), () => { }); }
public void OnSkillTargetSelected(Unit unit, Unit.EFacing facing, BoardTile target) { QueueAction(new UseSkillAction(CurrentPlayer.playerIndex, unit.id, facing, target.Coord), () => { }); }