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