using Microsoft.Xna.Framework; using System.Collections.Generic; using V3.Data; using V3.Objects; namespace V3.Camera { /// /// Stores and provides access to the possible cameras. /// // ReSharper disable once ClassNeverInstantiated.Global public sealed class CameraManager { private readonly IOptionsManager mOptionsManager; private readonly CameraCentered mCameraCentered; private readonly CameraScrolling mCameraScrolling; /// /// Creates a new CameraManager. /// public CameraManager(CameraCentered cameraCentered, CameraScrolling cameraScrolling, IOptionsManager optionsManager) { mCameraCentered = cameraCentered; mCameraScrolling = cameraScrolling; mOptionsManager = optionsManager; } /// /// Initializes the cameras with the given map data. /// public void Initialize(Point mapPixelSize) { // TODO: Warum *2? Irgendwas stimmt bei der Interpretation hier nicht. var mapPixelHeight = mapPixelSize.Y * 2; var mapPixelWidth = mapPixelSize.X; var cameras = new List { mCameraCentered, mCameraScrolling }; foreach (var camera in cameras) { camera.MapPixelHeight = mapPixelHeight; camera.MapPixelWidth = mapPixelWidth; } } /// /// Updates the cameras. /// public void Update(ICreature creature) { GetCamera().Update(creature); if (mOptionsManager.Options.CameraType != CameraType.Scrolling) mCameraScrolling.Location = GetCamera().Location; } /// /// Returns the currently selected camera. /// public ICamera GetCamera() { switch (mOptionsManager.Options.CameraType) { case CameraType.Centered: return mCameraCentered; case CameraType.Scrolling: return mCameraScrolling; default: return mCameraScrolling; } } } }