Пример #1
0
        private void MoveTo(DirectionButton dir, Vector3 destPosition)
        {
            m_animationController.UpdateAnimation(_positionDiff, _lastPositionDiff, _isMoving);

            if (!_isMoving || (destPosition == transform.position))
            {
                ClampCurrentPosition();
                return;
            }

            if (_isMoving && (dir != DirectionButton.NONE) && (dir == _lastCollisionDir))
            {
                ClampCurrentPosition();
                if (!(_lastCollidedObject is null))
                {
                    onCollision.Invoke(_lastCollidedObject);
                }

                return;
            }

            if (_isMoving)
            {
                _lastCollidedObject = null;
                _lastCollisionDir   = DirectionButton.NONE;
            }

            var tr = transform;

            tr.position = Vector3.MoveTowards(tr.position, destPosition, Time.deltaTime * m_Speed);
            tr.rotation = new Quaternion(0, 0, 0, 0);
        }
    IEnumerator PlayerAction(Player player, DirectionButton direction)
    {
        var lastPos = player.data.position;

        CallDirection(player, direction.GetDirection());

        var cell = board.GetCell(player.data.position);

        if (player.data.position == Vector2Int.zero)
        {
            if (player.data.heldBitcoins < 3)
            {
                ++player.data.heldBitcoins;
                audioSource.PlayOneShot(gotBitcoinSound);
            }

            player.data.position = lastPos;
        }
        else if (player.data.position == player.data.startPosition)
        {
            player.data.baseBitcoins += player.data.heldBitcoins;
            player.data.heldBitcoins  = 0;
        }
        else if ((cell & Board.Cell.AnyPlayer) != 0)
        {
            var other = GetPlayerAtCell(cell);

            Steal(player, other);

            player.data.position = lastPos;
        }

        yield return(new WaitForSeconds(moveDelay));
    }
Пример #3
0
        void OnCollisionEnter2D(Collision2D col)
        {
            _lastCollidedObject = col;
            _lastCollisionDir   = _lastDirection;

            ClampCurrentPosition();

            onCollision.Invoke(col);
        }
Пример #4
0
        private void MovementUpdate(DirectionButton dir)
        {
            if (!_isMoving)
            {
                _currentTilesToMove = m_TilesPerStep;
            }

            Move(dir, _currentTilesToMove);
        }
Пример #5
0
        public void Move(DirectionButton dir, int tiles)
        {
            _currentTilesToMove = tiles;

            Vector3 destPosition = CalculateDestinationPosition(
                transform.position, dir, tiles
                );

            MoveTo(dir, destPosition);
        }
Пример #6
0
        void OnCollisionStay2D(Collision2D col)
        {
            _lastCollidedObject = col;
            _lastCollisionDir   = _lastDirection;

            if (_isMoving)
            {
                onCollision.Invoke(col);
            }

            StopMoving();
        }
Пример #7
0
        public void TriggerDirectionButton(DirectionButton dir)
        {
            if (!CanMove() && IsMoving())
            {
                StopMoving();
            }

            if (CanMove())
            {
                MovementUpdate(dir);
            }
        }
Пример #8
0
        private void FixedUpdate()
        {
            if (!CanMove() && IsMoving())
            {
                StopMoving();
            }

            DirectionButton dir = LegacyInputManager.GetPressedDirectionButton();

            if (!IsMoving() && dir == DirectionButton.NONE)
            {
                return;
            }

            TriggerDirectionButton(dir);
        }
Пример #9
0
 private void SetDirectionIndicator(bool isReverse)
 {
     if (isReverse)
     {
         BackwardArrow.Visibility = Visibility.Collapsed;
         ForwardArrow.Visibility  = Visibility.Visible;
         ToolTipService.SetToolTip(DirectionButton, "Forwards");
         DirectionButton.SetValue(AutomationProperties.NameProperty, "Set playback direction to forwards");
     }
     else
     {
         BackwardArrow.Visibility = Visibility.Visible;
         ForwardArrow.Visibility  = Visibility.Collapsed;
         ToolTipService.SetToolTip(DirectionButton, "Reverse");
         DirectionButton.SetValue(AutomationProperties.NameProperty, "Set playback direction to reverse");
     }
 }
Пример #10
0
    IEnumerator PlayerAction(Player player, DirectionButton direction)
    {
        var lastPos = player.data.position;

        CallDirection(player, direction.GetDirection());

        var cell = board.GetCell(player.data.position);

        Debug.Log(cell);

        if (player.data.position == Vector2Int.zero)
        {
            Debug.Log($"{player.data.playerName} is mining!");

            if (player.data.heldBitcoins < 3)
            {
                ++player.data.heldBitcoins;
                audioSource.PlayOneShot(gotBitcoinSound);
            }

            player.data.position = lastPos;
        }
        else if (player.data.position == player.data.startPosition)
        {
            Debug.Log($"{player.data.playerName} is storing!");

            player.data.baseBitcoins += player.data.heldBitcoins;
            player.data.heldBitcoins  = 0;
        }
        else if (GetPlayer(player.data.position, player, out Player other))
        {
            Debug.Log(
                $"{player.data.playerName} is stealing from " +
                $"{other.data.playerName}!"
                );

            Steal(player, other);

            player.data.position = lastPos;
        }

        yield return(new WaitForSeconds(moveDelay));
    }
Пример #11
0
        public static Vector2 GetDirectionButtonVector(DirectionButton dir)
        {
            switch (dir)
            {
            case DirectionButton.UP:
                return(Vector2.up);

            case DirectionButton.DOWN:
                return(Vector2.down);

            case DirectionButton.LEFT:
                return(Vector2.left);

            case DirectionButton.RIGHT:
                return(Vector2.right);

            default:
                return(Vector2.zero);
            }
        }
Пример #12
0
        void Update()
        {
            ActionButton    action    = LegacyInputManager.GetPressedActionButton();
            DirectionButton dir       = m_animationController.GetLastAnimationDirection();
            Vector3         dirVector = LegacyInputManager.GetDirectionButtonVector(dir);
            RaycastHit2D    hit       = CheckInteractableRaycast(dirVector);

            if (!hit || !hit.collider || !hit.collider.gameObject.HasComponent <Interactable>())
            {
                Debug.DrawRay(transform.position, dirVector, Color.red);
                Debug.DrawRay(transform.position, hit.point, Color.blue);
                return;
            }

            Debug.DrawRay(transform.position, dirVector, Color.green);
            Debug.DrawRay(transform.position, hit.point, Color.blue);

            hit.collider.gameObject.GetComponent <Interactable>()
            .Interact(new InteractionContext(dir, action, m_DialogManager));
        }
Пример #13
0
        private Vector3 CalculateDestinationPosition(Vector3 origin, DirectionButton dir, int tiles = 1)
        {
            if (_inputDelayCoolDown > 0)
            {
                _inputDelayCoolDown--;
            }

            if (_inputEnabled)
            {
                _destinationPosition = origin;
                CalculateMovement(dir, tiles);
            }

            if (_isMoving)
            {
                if (origin == _destinationPosition)
                {
                    // done moving in a tile
                    _isMoving     = false;
                    _inputEnabled = true;
                    CalculateMovement(dir, tiles);
                }

                if (origin == _destinationPosition)
                {
                    return(origin);
                }

                return(_destinationPosition);
            }

            _positionDiff.x = 0;
            _positionDiff.y = 0;
            _positionDiff.z = 0;

            return(ClampPosition(origin));
        }
Пример #14
0
        public void UpdateAnimation(DirectionButton dir)
        {
            var pos = LegacyInputManager.GetDirectionButtonVector(dir);

            UpdateAnimation(pos, pos);
        }
Пример #15
0
 public InteractionContext(DirectionButton direction, ActionButton action, DialogManager dialogManager)
 {
     this.direction     = direction;
     this.action        = action;
     this.dialogManager = dialogManager;
 }
Пример #16
0
        // Returns the calculated final destination vector
        private void CalculateMovement(DirectionButton dir, int tiles = 1)
        {
            if (_inputDelayCoolDown > 0)
            {
                return;
            }

            if (dir == DirectionButton.NONE)
            {
                return;
            }

            float x = 0, y = 0, z = 0;

            switch (dir)
            {
            case DirectionButton.UP:
            {
                y = tiles;
            }
            break;

            case DirectionButton.RIGHT:
            {
                x = tiles;
            }
            break;

            case DirectionButton.DOWN:
            {
                y = tiles * -1;
            }
            break;

            case DirectionButton.LEFT:
            {
                x = tiles * -1;
            }
            break;
            }

            _lastPositionDiff.x = x;
            _lastPositionDiff.y = y;
            _lastPositionDiff.z = z;

            if (_lastDirection != dir)
            {
                _inputDelayCoolDown = m_InputDelay;
                _lastDirection      = dir;

                return;
            }

            _inputEnabled = false;
            _isMoving     = true;

            _positionDiff.x = x;
            _positionDiff.y = y;
            _positionDiff.z = z;

            _destinationPosition += _positionDiff;
            _destinationPosition  = ClampPosition(_destinationPosition);
        }