#region usings
using System;
using System.Drawing;
using OpenTK;
using SM.Base.Scene;
using SM.OGL.Framebuffer;
#endregion
namespace SM.Base.Window
{
///
/// This interface sets ground functions for windows.
///
public interface IGenericWindow : IFramebufferWindow
{
///
/// If true, the window is currently loading.
///
bool Loading { get; }
///
/// Holds the aspect ratio of the window.
///
float AspectRatio { get; set; }
///
/// The viewport camera is used, when no camera is found in the scene.
///
GenericCamera ViewportCamera { get; set; }
///
/// Turning this to true, will force the window to render in the viewport camera.
///
bool ForceViewportCamera { get; set; }
///
/// Turning this to false will not allow drawing while the window is not in focus.
///
bool DrawWhileUnfocused { get; set; }
///
/// Turning this to false will not allow updating while the window is not in focus.
///
bool UpdateWhileUnfocused { get; set; }
///
/// Contains the window size.
///
Vector2 WindowSize { get; set; }
///
/// The rectangle the window is using.
///
Rectangle ClientRectangle { get; }
///
/// The setup that was applied to the window.
///
ISetup AppliedSetup { get; }
///
/// The scene that is currently used.
///
GenericScene CurrentScene { get; }
///
/// The render pipeline that is currently used.
///
RenderPipeline CurrentRenderPipeline { get; }
///
/// An event, when the window resizes.
///
event Action Resize;
///
/// An event, when the window is loading.
///
event Action Load;
///
/// This gets executed, when the window should update something.
///
/// The context of the update.
void Update(UpdateContext context);
///
/// This applies a setup to the window.
///
///
void ApplySetup(ISetup setup);
///
/// This sets a scene for the window to use.
///
///
void SetScene(GenericScene scene);
///
/// This sets a render pipeline, from where the scene gets rendered.
///
///
void SetRenderPipeline(RenderPipeline renderPipeline);
///
/// This triggeres the event.
///
void TriggerLoad();
///
/// This triggeres the event.
///
void TriggerResize();
///
/// This closes the window.
///
void Close();
}
}