Example #1
0
        // --------------------------------------------------------------------------------------------
        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);
        }
Example #2
0
        // --------------------------------------------------------------------------------------------
        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);
        }
Example #3
0
        // --------------------------------------------------------------------------------------------
        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);
        }
Example #4
0
 // --------------------------------------------------------------------------------------------
 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;
 }
Example #5
0
 public void OnUseSkillConfirmed(Unit unit, Unit.EFacing facing, IntVector2 targetCoord)
 {
     _unitOptionsView.Hide();
     _game.QueueAction(new UseSkillAction(_game.CurrentPlayer.playerIndex, unit.id, facing, targetCoord), () => { });
 }
Example #6
0
 public void OnSkillTargetSelected(Unit unit, Unit.EFacing facing, BoardTile target)
 {
     QueueAction(new UseSkillAction(CurrentPlayer.playerIndex, unit.id, facing, target.Coord), () => { });
 }