diff options
author | Thomas Leyh <leyh.thomas@web.de> | 2016-07-24 08:14:18 +0200 |
---|---|---|
committer | Thomas Leyh <leyh.thomas@web.de> | 2016-07-24 08:14:18 +0200 |
commit | ced3d03bdb3ce866d832e03fb212865140905a9a (patch) | |
tree | 2a16c2063a46d3c354ce1585029dda3124f6ad93 /V3/Camera/CameraManager.cs | |
parent | 0394dccaf06e1009e591a6ff4d645895574724c1 (diff) | |
download | V3-ced3d03bdb3ce866d832e03fb212865140905a9a.tar.gz V3-ced3d03bdb3ce866d832e03fb212865140905a9a.tar.bz2 |
Diffstat (limited to 'V3/Camera/CameraManager.cs')
-rw-r--r-- | V3/Camera/CameraManager.cs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/V3/Camera/CameraManager.cs b/V3/Camera/CameraManager.cs new file mode 100644 index 0000000..b4d502e --- /dev/null +++ b/V3/Camera/CameraManager.cs @@ -0,0 +1,71 @@ +using Microsoft.Xna.Framework; +using System.Collections.Generic; +using V3.Data; +using V3.Objects; + +namespace V3.Camera +{ + /// <summary> + /// Stores and provides access to the possible cameras. + /// </summary> + // ReSharper disable once ClassNeverInstantiated.Global + public sealed class CameraManager + { + private readonly IOptionsManager mOptionsManager; + private readonly CameraCentered mCameraCentered; + private readonly CameraScrolling mCameraScrolling; + + /// <summary> + /// Creates a new CameraManager. + /// </summary> + public CameraManager(CameraCentered cameraCentered, + CameraScrolling cameraScrolling, IOptionsManager optionsManager) + { + mCameraCentered = cameraCentered; + mCameraScrolling = cameraScrolling; + mOptionsManager = optionsManager; + } + + /// <summary> + /// Initializes the cameras with the given map data. + /// </summary> + 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<ICamera> { mCameraCentered, mCameraScrolling }; + foreach (var camera in cameras) + { + camera.MapPixelHeight = mapPixelHeight; + camera.MapPixelWidth = mapPixelWidth; + } + } + + /// <summary> + /// Updates the cameras. + /// </summary> + public void Update(ICreature creature) + { + GetCamera().Update(creature); + if (mOptionsManager.Options.CameraType != CameraType.Scrolling) + mCameraScrolling.Location = GetCamera().Location; + } + + /// <summary> + /// Returns the currently selected camera. + /// </summary> + public ICamera GetCamera() + { + switch (mOptionsManager.Options.CameraType) + { + case CameraType.Centered: + return mCameraCentered; + case CameraType.Scrolling: + return mCameraScrolling; + default: + return mCameraScrolling; + } + } + } +} |