public override void Update(GameTime gameTime) { // Create the Transform used by any // spritebatch process Transform = Matrix.Identity * Matrix.CreateTranslation(-Position.X, -Position.Y, 0) * Matrix.CreateRotationZ(Rotation) * Matrix.CreateTranslation(Origin.X, Origin.Y, 0) * Matrix.CreateScale(new Vector3(Scale, Scale, Scale)); Origin = ScreenCenter / Scale; // Move the Camera to the position that it needs to go var delta = (float)gameTime.ElapsedGameTime.TotalSeconds; _position.X += (Focus.Get <TransformPart>().GetPositionX - Position.X) * MoveSpeed * delta; _position.Y += (Focus.Get <TransformPart>().GetPositionY - Position.Y) * MoveSpeed * delta; base.Update(gameTime); }