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)); }