Esempio n. 1
0
        void IUpdatable.update()
        {
            if (_shakeTime > 0f)
            {
                _shakeTime  -= Time.deltaTime;
                _shakeOffset = _shakeDirection;
                if (_shakeOffset.X != 0f || _shakeOffset.Y != 0f)
                {
                    _shakeOffset.Normalize();
                }
                else
                {
                    _shakeOffset.X = _shakeOffset.X + Nez.Random.nextFloat() - 0.5f;
                    _shakeOffset.Y = _shakeOffset.Y + Nez.Random.nextFloat() - 0.5f;
                }

                _shakeOffset    *= _shakeIntensity;
                _shakeIntensity *= -_shakeDegredation;
                if (Math.Abs(_shakeIntensity) <= 0.1f || _shakeTime <= 0f)
                {
                    _shakeIntensity = 0f;
                    _shakeOffset    = Vector2.Zero;
                    enabled         = false;
                    entity.scene.camera.position = originalPosition;
                }
            }

            entity.scene.camera.position = originalPosition + _shakeOffset;
            entity.scene.camera.position = Vector2Ext.approach(entity.scene.camera.position, originalPosition, Vector2Ext.abs(_shakeOffset / 3));
        }