Ejemplo n.º 1
0
        private void PerformUpdate()
        {
            switch (_movementType)
            {
            case MovementType.Transform_Position:
            {
                _startInterpolationPos = transform.position;

                Vector3 position = transform.position;
                position.x += Time.deltaTime * _velocity;

                HandleReversal(ref position);

                transform.position = position;

                _endInterpolationPos = transform.position;
                break;
            }

            case MovementType.Rigidbody_Position:
            {
                _startInterpolationPos = _rigidbody.position;

                Vector3 position = _rigidbody.position;
                position.x += Time.deltaTime * _velocity;

                HandleReversal(ref position);

                _rigidbody.position = position;

                _endInterpolationPos = _rigidbody.position;
                break;
            }

            case MovementType.Rigidbody_MovePosition:
            {
                _startInterpolationPos = _rigidbody.position;

                Vector3 position = _rigidbody.position;
                position.x += Time.deltaTime * _velocity;

                HandleReversal(ref position);

                _rigidbody.MovePosition(position);

                _endInterpolationPos = _rigidbody.position;
                break;
            }

            case MovementType.Rigidbody_CustomMove:
            {
                _startInterpolationPos = _rigidbody.position;

                Vector3 position = _rigidbody.position;
                position.x += Time.deltaTime * _velocity;

                HandleReversal(ref position);

                _rigidbody.CustomMove(position);

                _endInterpolationPos = _rigidbody.position;
                break;
            }

            case MovementType.Rigidbody_SetVelocity:
            {
                _startInterpolationPos = _rigidbody.position;

                Vector3 position = _rigidbody.position;
                if (HandleReversal(ref position))
                {
                    _rigidbody.position = position;
                }

                _rigidbody.velocity = new Vector2(_velocity, 0);

                _endInterpolationPos = _startInterpolationPos + _rigidbody.velocity * Time.deltaTime;
                break;
            }

            case MovementType.Rigidbody_AddVelocity:
            case MovementType.Rigidbody_AddForce:
            case MovementType.Rigidbody_AddImpulse:
            {
                _startInterpolationPos = _rigidbody.position;

                float change = _addForcePidController.Update(_velocity - _rigidbody.velocity.x, Time.deltaTime);

                if (_movementType == MovementType.Rigidbody_AddVelocity)
                {
                    _rigidbody.velocity += new Vector2(change * Time.deltaTime, 0);
                }
                else if (_movementType == MovementType.Rigidbody_AddForce)
                {
                    _rigidbody.AddForce(new Vector2(change, 0), ForceMode2D.Force);
                }
                else if (_movementType == MovementType.Rigidbody_AddImpulse)
                {
                    _rigidbody.AddForce(new Vector2(change * Time.deltaTime, 0), ForceMode2D.Impulse);
                }

                Vector3 position = _rigidbody.position;
                if (HandleReversal(ref position))
                {
                    _rigidbody.position = position;
                    _rigidbody.velocity = -_rigidbody.velocity;
                }

                _endInterpolationPos = _startInterpolationPos + _rigidbody.velocity * Time.deltaTime;
                break;
            }

            case MovementType.CharacterController_Move:
            {
                _startInterpolationPos = transform.position;

                Vector3 position = transform.position;
                position.x += Time.deltaTime * _velocity;

                HandleReversal(ref position);

                _characterController.Move(new Vector3(Time.deltaTime * _velocity, 0, 0));

                _endInterpolationPos = transform.position;

                break;
            }
            }
        }