Пример #1
0
    /// <summary>
    /// Funzione che esegue i calcoli necessari per far muovere il player
    /// </summary>
    private void Move()
    {
        //Mi muovo
        Vector3 movementVelocityCollision = collisionCtrl.CheckMovementCollisions(movementVelocity * Time.deltaTime);

        transform.Translate(movementVelocityCollision);

        if (OnMovement != null)
        {
            OnMovement(movementVelocityCollision, collisionCtrl.GetCollisionInfo());
        }
    }
Пример #2
0
    /// <summary>
    /// Funzione che muove i passeggeri
    /// </summary>
    /// <param name="beforeMovePlatform"></param>
    public void MovePassengers(bool beforeMovePlatform)
    {
        for (int i = 0; i < passengerMovement.Count; i++)
        {
            PassengerMovement passenger = passengerMovement[i];

            if (passenger.moveBeforePassenger == beforeMovePlatform)
            {
                PlayerCollisionController collisionCtrl = passenger.transform.GetComponentInParent <PlayerCollisionController>();
                if (collisionCtrl != null)
                {
                    if (!collisionCtrl.GetCollisionInfo().StickyCollision())
                    {
                        collisionCtrl.transform.Translate(collisionCtrl.CheckMovementCollisions(passenger.velocity, passenger.standingOnPlatform));
                    }
                }
                else
                {
                    passenger.transform.Translate(passenger.velocity);
                }
            }
        }
    }
Пример #3
0
    /// <summary>
    /// Funzione che sposta eventuali oggetti attaccati
    /// </summary>
    /// <param name="_hitTransform"></param>
    /// <param name="_velocity"></param>
    private void MovePassenger(Transform _hitTransform, Vector3 _velocity)
    {
        HashSet <Transform> movedPassengers = new HashSet <Transform>();
        float directionX = Mathf.Sign(_velocity.x);
        float directionY = Mathf.Sign(_velocity.y);

        //Vertical Moving platform
        if (_velocity.y != 0)
        {
            if (!movedPassengers.Contains(_hitTransform))
            {
                movedPassengers.Add(_hitTransform);

                float pushX = (directionY == 1) ? _velocity.x : 0;
                float pushY = _velocity.y; //(directionY == 1) ? _velocity.y : _velocity.y - collisionOffset;

                _hitTransform.Translate(new Vector3(pushX, pushY, 0));
            }
        }

        //Horizontal Moving platform
        if (_velocity.x != 0)
        {
            if (!movedPassengers.Contains(_hitTransform))
            {
                movedPassengers.Add(_hitTransform);

                float pushX = _velocity.x;
                float pushY = 0f;

                PlayerCollisionController collisionCtrl = _hitTransform.GetComponentInParent <PlayerCollisionController>();
                if (collisionCtrl != null)
                {
                    collisionCtrl.transform.Translate(collisionCtrl.CheckMovementCollisions(new Vector3(pushX, pushY, 0)));
                }
                else
                {
                    _hitTransform.Translate(new Vector3(pushX, pushY, 0));
                }
            }
        }

        //Passenger Fix horzizontal top e piattaforma che scende
        if (directionY == -1 || _velocity.y == 0 && _velocity.x != 0)
        {
            if (!movedPassengers.Contains(_hitTransform))
            {
                movedPassengers.Add(_hitTransform);

                float pushX = _velocity.x;
                float pushY = _velocity.y;

                PlayerCollisionController collisionCtrl = _hitTransform.GetComponentInParent <PlayerCollisionController>();
                if (collisionCtrl != null)
                {
                    collisionCtrl.transform.Translate(collisionCtrl.CheckMovementCollisions(new Vector3(pushX, pushY, 0)));
                }
                else
                {
                    _hitTransform.Translate(new Vector3(pushX, pushY, 0));
                }
            }
        }
    }