private void UpdateCamera(Camera camera, GameTime gameTime) { if (camera.AttachedToPlayer) { Entity playerId = stateSpaceComponents.Entities.Where(x => (x.ComponentFlags & ComponentMasks.Player) == ComponentMasks.Player).FirstOrDefault(); if (playerId != null) { camera.Target = new Vector2((int)stateSpaceComponents.PositionComponents[playerId.Id].Position.X * dungeonAlgorithm.GetCellsize() + stateSpaceComponents.DisplayComponents[playerId.Id].Texture.Bounds.Center.X, (int)stateSpaceComponents.PositionComponents[playerId.Id].Position.Y * dungeonAlgorithm.GetCellsize() + stateSpaceComponents.DisplayComponents[playerId.Id].Texture.Bounds.Center.Y); } } if (Vector2.Distance(camera.Position, camera.Target) > 0) { float distance = Vector2.Distance(camera.Position, camera.Target); Vector2 direction = Vector2.Normalize(camera.Target - camera.Position); float velocity = distance * 2.5f; camera.Position += direction * velocity * (float)gameTime.ElapsedGameTime.TotalSeconds; } }