StarSim

StarSim.git
git clone git://git.lenczewski.org/StarSim.git
Log | Files | Refs | README | LICENSE

commit fc8a54fe26294539dc303e68ec935f84b9c5cb60
parent 99c788db2b7a10da0b98a9771d7250752e332717
Author: Mikolaj Lenczewski <33129490+EnderRifter@users.noreply.github.com>
Date:   Wed, 17 Jul 2019 21:41:16 +0100

Change in direction
- Removed main menu system: it provided functionailty that would be better left to a competent cross platform gui library
- Removed unnecessary folders and reorganised some files

Diffstat:
MStarSim/StarSim/Program.cs | 16+---------------
DStarSim/StarSimLib/GUI/Components/Component.cs | 57---------------------------------------------------------
DStarSim/StarSimLib/GUI/Components/Image.cs | 17-----------------
DStarSim/StarSimLib/GUI/IInputHandler.cs | 66------------------------------------------------------------------
DStarSim/StarSimLib/GUI/Screen.cs | 100-------------------------------------------------------------------------------
MStarSim/StarSimLib/StarSimLib.xml | 274++++++++++++++++++++++++++++---------------------------------------------------
AStarSim/StarSimLib/UI/IInputHandler.cs | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DStarSim/StarSimLib/UI/MainMenuInputHandler.cs | 52----------------------------------------------------
DStarSim/StarSimLib/UI/MainMenuScreen.cs | 73-------------------------------------------------------------------------
AStarSim/StarSimLib/UI/Screen.cs | 99+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MStarSim/StarSimLib/UI/SimulationInputHandler.cs | 1-
MStarSim/StarSimLib/UI/SimulationScreen.cs | 1-
12 files changed, 264 insertions(+), 558 deletions(-)

diff --git a/StarSim/StarSim/Program.cs b/StarSim/StarSim/Program.cs @@ -7,7 +7,6 @@ using StarSimLib; using StarSimLib.Contexts; using StarSimLib.Cryptography; using StarSimLib.Data_Structures; -using StarSimLib.GUI; using StarSimLib.Physics; using StarSimLib.UI; @@ -35,11 +34,6 @@ namespace StarSim private static readonly SimulatorContext databaseContext; /// <summary> - /// The main menu from which we will start other screens. - /// </summary> - private static readonly MainMenuScreen mainMenuScreen; - - /// <summary> /// The simulation which we will render, once the user sets it up. /// </summary> private static readonly SimulationScreen simulationScreen; @@ -61,11 +55,6 @@ namespace StarSim UpdateDelegate bodyPositionUpdater = BodyUpdater.UpdateBodiesBarnesHut; #endif - RenderWindow mainMenuWindow = new RenderWindow(VideoMode.DesktopMode, "N-Body Simulation: Main Menu"); - IInputHandler mainMenuInputHandler = new MainMenuInputHandler(); - - mainMenuScreen = new MainMenuScreen(mainMenuWindow, mainMenuInputHandler); - RenderWindow simulationWindow = new RenderWindow(VideoMode.DesktopMode, "N-Body Simulation: FPS "); IInputHandler simulationInputHandler = new SimulationInputHandler(ref bodies); @@ -108,11 +97,8 @@ namespace StarSim Console.WriteLine("Press 'enter' to continue..."); Console.ReadLine(); - // run main menu - mainMenuScreen.Run(); - // run simulation - //simulationScreen.Run(); + simulationScreen.Run(); Console.WriteLine("Goodbye, World!"); Console.WriteLine("Press 'enter' to quit..."); diff --git a/StarSim/StarSimLib/GUI/Components/Component.cs b/StarSim/StarSimLib/GUI/Components/Component.cs @@ -1,56 +0,0 @@ -using SFML.Graphics; -using SFML.System; - -namespace StarSimLib.GUI.Components -{ - /// <summary> - /// Base class for all GUI components, such as text boxes, buttons, etc. - /// </summary> - public abstract class Component : Drawable - { - /// <summary> - /// The sprite representing this component. - /// </summary> - private readonly Sprite sprite; - - /// <summary> - /// Initialises a new instance of the <see cref="Component"/> class. - /// </summary> - /// <param name="position">The position of this instance.</param> - /// <param name="sprite">The sprite that should represent this instance.</param> - protected Component(Vector2f position, Sprite sprite) - { - this.sprite = sprite; - this.sprite.Position = position; - } - - /// <summary> - /// The position of this component. - /// </summary> - public Vector2f Position - { - get { return sprite.Position; } - set { sprite.Position = value; } - } - - /// <summary> - /// Draws this component to the given <see cref="RenderTarget"/>, with the given <see cref="RenderStates"/>. - /// </summary> - /// <param name="renderTarget">The <see cref="RenderTarget"/> to which to draw this instance.</param> - /// <param name="renderStates">The <see cref="RenderStates"/> for the drawing action.</param> - protected virtual void DrawInternal(RenderTarget renderTarget, RenderStates renderStates) - { - sprite.Draw(renderTarget, renderStates); - } - - #region Implementation of Drawable - - /// <inheritdoc /> - public void Draw(RenderTarget target, RenderStates states) - { - DrawInternal(target, states); - } - - #endregion Implementation of Drawable - } -} -\ No newline at end of file diff --git a/StarSim/StarSimLib/GUI/Components/Image.cs b/StarSim/StarSimLib/GUI/Components/Image.cs @@ -1,16 +0,0 @@ -using SFML.Graphics; -using SFML.System; - -namespace StarSimLib.GUI.Components -{ - /// <summary> - /// Represents an image. - /// </summary> - public class Image : Component - { - /// <inheritdoc /> - public Image(Vector2f position, Sprite sprite) : base(position, sprite) - { - } - } -} -\ No newline at end of file diff --git a/StarSim/StarSimLib/GUI/IInputHandler.cs b/StarSim/StarSimLib/GUI/IInputHandler.cs @@ -1,65 +0,0 @@ -using System; -using SFML.Window; - -namespace StarSimLib.GUI -{ - /// <summary> - /// Describes an input handler that allows screen interactivity. - /// </summary> - public interface IInputHandler - { - /// <summary> - /// The <see cref="Screen"/> instance whose input to manage. - /// </summary> - Screen HandledScreen { get; set; } - - /// <summary> - /// Handles key presses. - /// </summary> - /// <param name="sender">The <see cref="Window"/> that sent the event.</param> - /// <param name="eventArgs">The <see cref="KeyEventArgs"/> associated with the key press.</param> - void HandleKeyPressed(object sender, KeyEventArgs eventArgs); - - /// <summary> - /// Handles key releases. - /// </summary> - /// <param name="sender">The <see cref="Window"/> that sent the event.</param> - /// <param name="eventArgs">The <see cref="KeyEventArgs"/> associated with the key release.</param> - void HandleKeyReleased(object sender, KeyEventArgs eventArgs); - - /// <summary> - /// Handles motions of the mouse. - /// </summary> - /// <param name="sender">The <see cref="Window"/> that sent the event.</param> - /// <param name="eventArgs">The <see cref="MouseMoveEventArgs"/> associated with the mouse movement.</param> - void HandleMouseMoved(object sender, MouseMoveEventArgs eventArgs); - - /// <summary> - /// Handles key presses of the mouse. - /// </summary> - /// <param name="sender">The <see cref="Window"/> that sent the event.</param> - /// <param name="eventArgs">The <see cref="MouseButtonEventArgs"/> associated with the mouse press.</param> - void HandleMousePressed(object sender, MouseButtonEventArgs eventArgs); - - /// <summary> - /// Handles key releases of the mouse. - /// </summary> - /// <param name="sender">The <see cref="Window"/> that sent the event.</param> - /// <param name="eventArgs">The <see cref="MouseButtonEventArgs"/> associated with the mouse release.</param> - void HandleMouseReleased(object sender, MouseButtonEventArgs eventArgs); - - /// <summary> - /// Handles scrolling of the mouse wheel. - /// </summary> - /// <param name="sender">The <see cref="Window"/> that sent the event.</param> - /// <param name="eventArgs">The <see cref="MouseWheelScrollEventArgs"/> associated with the mouse scroll.</param> - void HandleMouseScrolled(object sender, MouseWheelScrollEventArgs eventArgs); - - /// <summary> - /// Handles the screen closing. - /// </summary> - /// <param name="sender">The <see cref="Window"/> that sent the event.</param> - /// <param name="eventArgs">The <see cref="EventArgs"/> associated with the screen close.</param> - void HandleScreenClosed(object sender, EventArgs eventArgs); - } -} -\ No newline at end of file diff --git a/StarSim/StarSimLib/GUI/Screen.cs b/StarSim/StarSimLib/GUI/Screen.cs @@ -1,99 +0,0 @@ -using System.Threading.Tasks; -using SFML.Graphics; - -namespace StarSimLib.GUI -{ - /// <summary> - /// Base class for screens that include user interactivity. - /// </summary> - public abstract class Screen - { - /// <summary> - /// The input handler to use for this instance. - /// </summary> - protected readonly IInputHandler inputHandler; - - /// <summary> - /// The window to which this instance is drawn. - /// </summary> - protected readonly RenderWindow renderWindow; - - /// <summary> - /// Initialises a new instance of the <see cref="Screen"/> class. - /// </summary> - /// <param name="window"></param> - /// <param name="inputHandler"></param> - protected Screen(RenderWindow window, IInputHandler inputHandler) - { - renderWindow = window; - - this.inputHandler = inputHandler; - inputHandler.HandledScreen = this; - - // we apply event handlers to allow for interactivity inside the window - renderWindow.KeyPressed += this.inputHandler.HandleKeyPressed; - renderWindow.KeyReleased += this.inputHandler.HandleKeyReleased; - renderWindow.MouseButtonPressed += this.inputHandler.HandleMousePressed; - renderWindow.MouseButtonReleased += this.inputHandler.HandleMouseReleased; - renderWindow.MouseMoved += this.inputHandler.HandleMouseMoved; - renderWindow.MouseWheelScrolled += this.inputHandler.HandleMouseScrolled; - renderWindow.Closed += this.inputHandler.HandleScreenClosed; - - renderWindow.SetVisible(false); - - ConstructScreen(); - } - - /// <summary> - /// Cleans up the contents of the screen to the given <see cref="RenderTarget"/> with the given <see cref="RenderStates"/>. - /// </summary> - /// <param name="renderTarget">The <see cref="RenderTarget"/> to which to draw this instance.</param> - /// <param name="renderStates">The <see cref="RenderStates"/> to use for the drawing.</param> - protected abstract void CleanupScreen(RenderTarget renderTarget, RenderStates renderStates); - - /// <summary> - /// Called during the constructor to allow for custom setup, before the child constructor is called. - /// </summary> - protected abstract void ConstructScreen(); - - /// <summary> - /// Draws the contents of the screen to the given <see cref="RenderTarget"/> with the given <see cref="RenderStates"/>. - /// </summary> - /// <param name="renderTarget">The <see cref="RenderTarget"/> to which to draw this instance.</param> - /// <param name="renderStates">The <see cref="RenderStates"/> to use for the drawing.</param> - protected abstract void DrawFrame(RenderTarget renderTarget, RenderStates renderStates); - - /// <summary> - /// Sets up the contents of the screen to the given <see cref="RenderTarget"/> with the given <see cref="RenderStates"/>. - /// </summary> - /// <param name="renderTarget">The <see cref="RenderTarget"/> to which to draw this instance.</param> - /// <param name="renderStates">The <see cref="RenderStates"/> to use for the drawing.</param> - protected abstract void SetupScreen(RenderTarget renderTarget, RenderStates renderStates); - - /// <summary> - /// Displays the screen until it is closed. - /// </summary> - public void Run() - { - // we reveal the window so that the user may interact with our program - renderWindow.SetVisible(true); - - // allows custom screen setup code - SetupScreen(renderWindow, RenderStates.Default); - - while (renderWindow.IsOpen) - { - renderWindow.Clear(); - renderWindow.DispatchEvents(); - - // allows custom screen content - DrawFrame(renderWindow, RenderStates.Default); - - renderWindow.Display(); - } - - // allows custom screen cleanup code - CleanupScreen(renderWindow, RenderStates.Default); - } - } -} -\ No newline at end of file diff --git a/StarSim/StarSimLib/StarSimLib.xml b/StarSim/StarSimLib/StarSimLib.xml @@ -1293,153 +1293,6 @@ </summary> <param name="scaleMultiplier">The multiplier by which to scale the viewport of this instances render target.</param> </member> - <member name="T:StarSimLib.GUI.Components.Component"> - <summary> - Base class for all GUI components, such as text boxes, buttons, etc. - </summary> - </member> - <member name="F:StarSimLib.GUI.Components.Component.sprite"> - <summary> - The sprite representing this component. - </summary> - </member> - <member name="M:StarSimLib.GUI.Components.Component.#ctor(SFML.System.Vector2f,SFML.Graphics.Sprite)"> - <summary> - Initialises a new instance of the <see cref="T:StarSimLib.GUI.Components.Component"/> class. - </summary> - <param name="position">The position of this instance.</param> - <param name="sprite">The sprite that should represent this instance.</param> - </member> - <member name="P:StarSimLib.GUI.Components.Component.Position"> - <summary> - The position of this component. - </summary> - </member> - <member name="M:StarSimLib.GUI.Components.Component.DrawInternal(SFML.Graphics.RenderTarget,SFML.Graphics.RenderStates)"> - <summary> - Draws this component to the given <see cref="T:SFML.Graphics.RenderTarget"/>, with the given <see cref="T:SFML.Graphics.RenderStates"/>. - </summary> - <param name="renderTarget">The <see cref="T:SFML.Graphics.RenderTarget"/> to which to draw this instance.</param> - <param name="renderStates">The <see cref="T:SFML.Graphics.RenderStates"/> for the drawing action.</param> - </member> - <member name="M:StarSimLib.GUI.Components.Component.Draw(SFML.Graphics.RenderTarget,SFML.Graphics.RenderStates)"> - <inheritdoc /> - </member> - <member name="T:StarSimLib.GUI.Components.Image"> - <summary> - Represents an image. - </summary> - </member> - <member name="M:StarSimLib.GUI.Components.Image.#ctor(SFML.System.Vector2f,SFML.Graphics.Sprite)"> - <inheritdoc /> - </member> - <member name="T:StarSimLib.GUI.IInputHandler"> - <summary> - Describes an input handler that allows screen interactivity. - </summary> - </member> - <member name="M:StarSimLib.GUI.IInputHandler.HandleKeyPressed(System.Object,SFML.Window.KeyEventArgs)"> - <summary> - Handles key presses. - </summary> - <param name="sender">The <see cref="T:SFML.Window.Window"/> that sent the event.</param> - <param name="eventArgs">The <see cref="T:SFML.Window.KeyEventArgs"/> associated with the key press.</param> - </member> - <member name="M:StarSimLib.GUI.IInputHandler.HandleKeyReleased(System.Object,SFML.Window.KeyEventArgs)"> - <summary> - Handles key releases. - </summary> - <param name="sender">The <see cref="T:SFML.Window.Window"/> that sent the event.</param> - <param name="eventArgs">The <see cref="T:SFML.Window.KeyEventArgs"/> associated with the key release.</param> - </member> - <member name="M:StarSimLib.GUI.IInputHandler.HandleMouseMoved(System.Object,SFML.Window.MouseMoveEventArgs)"> - <summary> - Handles motions of the mouse. - </summary> - <param name="sender">The <see cref="T:SFML.Window.Window"/> that sent the event.</param> - <param name="eventArgs">The <see cref="T:SFML.Window.MouseMoveEventArgs"/> associated with the mouse movement.</param> - </member> - <member name="M:StarSimLib.GUI.IInputHandler.HandleMousePressed(System.Object,SFML.Window.MouseButtonEventArgs)"> - <summary> - Handles key presses of the mouse. - </summary> - <param name="sender">The <see cref="T:SFML.Window.Window"/> that sent the event.</param> - <param name="eventArgs">The <see cref="T:SFML.Window.MouseButtonEventArgs"/> associated with the mouse press.</param> - </member> - <member name="M:StarSimLib.GUI.IInputHandler.HandleMouseReleased(System.Object,SFML.Window.MouseButtonEventArgs)"> - <summary> - Handles key releases of the mouse. - </summary> - <param name="sender">The <see cref="T:SFML.Window.Window"/> that sent the event.</param> - <param name="eventArgs">The <see cref="T:SFML.Window.MouseButtonEventArgs"/> associated with the mouse release.</param> - </member> - <member name="M:StarSimLib.GUI.IInputHandler.HandleMouseScrolled(System.Object,SFML.Window.MouseWheelScrollEventArgs)"> - <summary> - Handles scrolling of the mouse wheel. - </summary> - <param name="sender">The <see cref="T:SFML.Window.Window"/> that sent the event.</param> - <param name="eventArgs">The <see cref="T:SFML.Window.MouseWheelScrollEventArgs"/> associated with the mouse scroll.</param> - </member> - <member name="M:StarSimLib.GUI.IInputHandler.HandleScreenClosed(System.Object,System.EventArgs)"> - <summary> - Handles the screen closing. - </summary> - <param name="sender">The <see cref="T:SFML.Window.Window"/> that sent the event.</param> - <param name="eventArgs">The <see cref="T:System.EventArgs"/> associated with the screen close.</param> - </member> - <member name="T:StarSimLib.GUI.Screen"> - <summary> - Base class for screens that include user interactivity. - </summary> - </member> - <member name="F:StarSimLib.GUI.Screen.inputHandler"> - <summary> - The input handler to use for this instance. - </summary> - </member> - <member name="F:StarSimLib.GUI.Screen.renderWindow"> - <summary> - The window to which this instance is drawn. - </summary> - </member> - <member name="M:StarSimLib.GUI.Screen.#ctor(SFML.Graphics.RenderWindow,StarSimLib.GUI.IInputHandler)"> - <summary> - Initialises a new instance of the <see cref="T:StarSimLib.GUI.Screen"/> class. - </summary> - <param name="window"></param> - <param name="inputHandler"></param> - </member> - <member name="M:StarSimLib.GUI.Screen.CleanupScreen(SFML.Graphics.RenderTarget,SFML.Graphics.RenderStates)"> - <summary> - Cleans up the contents of the screen to the given <see cref="T:SFML.Graphics.RenderTarget"/> with the given <see cref="T:SFML.Graphics.RenderStates"/>. - </summary> - <param name="renderTarget">The <see cref="T:SFML.Graphics.RenderTarget"/> to which to draw this instance.</param> - <param name="renderStates">The <see cref="T:SFML.Graphics.RenderStates"/> to use for the drawing.</param> - </member> - <member name="M:StarSimLib.GUI.Screen.ConstructScreen"> - <summary> - Called during the constructor to allow for custom setup, before the child constructor is called. - </summary> - </member> - <member name="M:StarSimLib.GUI.Screen.DrawFrame(SFML.Graphics.RenderTarget,SFML.Graphics.RenderStates)"> - <summary> - Draws the contents of the screen to the given <see cref="T:SFML.Graphics.RenderTarget"/> with the given <see cref="T:SFML.Graphics.RenderStates"/>. - </summary> - <param name="renderTarget">The <see cref="T:SFML.Graphics.RenderTarget"/> to which to draw this instance.</param> - <param name="renderStates">The <see cref="T:SFML.Graphics.RenderStates"/> to use for the drawing.</param> - </member> - <member name="M:StarSimLib.GUI.Screen.SetupScreen(SFML.Graphics.RenderTarget,SFML.Graphics.RenderStates)"> - <summary> - Sets up the contents of the screen to the given <see cref="T:SFML.Graphics.RenderTarget"/> with the given <see cref="T:SFML.Graphics.RenderStates"/>. - </summary> - <param name="renderTarget">The <see cref="T:SFML.Graphics.RenderTarget"/> to which to draw this instance.</param> - <param name="renderStates">The <see cref="T:SFML.Graphics.RenderStates"/> to use for the drawing.</param> - </member> - <member name="M:StarSimLib.GUI.Screen.Run"> - <summary> - Displays the screen until it is closed. - </summary> - </member> <member name="T:StarSimLib.Models.Body"> <summary> Represents a known stellar body in the database. Maps to a <see cref="T:StarSimLib.Data_Structures.Body"/> instance. @@ -1751,51 +1604,117 @@ </summary> <returns>A 3D position vector.</returns> </member> - <member name="T:StarSimLib.UI.MainMenuInputHandler"> + <member name="T:StarSimLib.UI.IInputHandler"> <summary> - Provides user input handling functions for the main menu. + Describes an input handler that allows screen interactivity. </summary> </member> - <member name="M:StarSimLib.UI.MainMenuInputHandler.HandleKeyPressed(System.Object,SFML.Window.KeyEventArgs)"> - <inheritdoc /> + <member name="P:StarSimLib.UI.IInputHandler.HandledScreen"> + <summary> + The <see cref="T:StarSimLib.UI.Screen"/> instance whose input to manage. + </summary> </member> - <member name="M:StarSimLib.UI.MainMenuInputHandler.HandleKeyReleased(System.Object,SFML.Window.KeyEventArgs)"> - <inheritdoc /> + <member name="M:StarSimLib.UI.IInputHandler.HandleKeyPressed(System.Object,SFML.Window.KeyEventArgs)"> + <summary> + Handles key presses. + </summary> + <param name="sender">The <see cref="T:SFML.Window.Window"/> that sent the event.</param> + <param name="eventArgs">The <see cref="T:SFML.Window.KeyEventArgs"/> associated with the key press.</param> </member> - <member name="M:StarSimLib.UI.MainMenuInputHandler.HandleMouseMoved(System.Object,SFML.Window.MouseMoveEventArgs)"> - <inheritdoc /> + <member name="M:StarSimLib.UI.IInputHandler.HandleKeyReleased(System.Object,SFML.Window.KeyEventArgs)"> + <summary> + Handles key releases. + </summary> + <param name="sender">The <see cref="T:SFML.Window.Window"/> that sent the event.</param> + <param name="eventArgs">The <see cref="T:SFML.Window.KeyEventArgs"/> associated with the key release.</param> </member> - <member name="M:StarSimLib.UI.MainMenuInputHandler.HandleMousePressed(System.Object,SFML.Window.MouseButtonEventArgs)"> - <inheritdoc /> + <member name="M:StarSimLib.UI.IInputHandler.HandleMouseMoved(System.Object,SFML.Window.MouseMoveEventArgs)"> + <summary> + Handles motions of the mouse. + </summary> + <param name="sender">The <see cref="T:SFML.Window.Window"/> that sent the event.</param> + <param name="eventArgs">The <see cref="T:SFML.Window.MouseMoveEventArgs"/> associated with the mouse movement.</param> </member> - <member name="M:StarSimLib.UI.MainMenuInputHandler.HandleMouseReleased(System.Object,SFML.Window.MouseButtonEventArgs)"> - <inheritdoc /> + <member name="M:StarSimLib.UI.IInputHandler.HandleMousePressed(System.Object,SFML.Window.MouseButtonEventArgs)"> + <summary> + Handles key presses of the mouse. + </summary> + <param name="sender">The <see cref="T:SFML.Window.Window"/> that sent the event.</param> + <param name="eventArgs">The <see cref="T:SFML.Window.MouseButtonEventArgs"/> associated with the mouse press.</param> </member> - <member name="M:StarSimLib.UI.MainMenuInputHandler.HandleMouseScrolled(System.Object,SFML.Window.MouseWheelScrollEventArgs)"> - <inheritdoc /> + <member name="M:StarSimLib.UI.IInputHandler.HandleMouseReleased(System.Object,SFML.Window.MouseButtonEventArgs)"> + <summary> + Handles key releases of the mouse. + </summary> + <param name="sender">The <see cref="T:SFML.Window.Window"/> that sent the event.</param> + <param name="eventArgs">The <see cref="T:SFML.Window.MouseButtonEventArgs"/> associated with the mouse release.</param> </member> - <member name="M:StarSimLib.UI.MainMenuInputHandler.HandleScreenClosed(System.Object,System.EventArgs)"> - <inheritdoc /> + <member name="M:StarSimLib.UI.IInputHandler.HandleMouseScrolled(System.Object,SFML.Window.MouseWheelScrollEventArgs)"> + <summary> + Handles scrolling of the mouse wheel. + </summary> + <param name="sender">The <see cref="T:SFML.Window.Window"/> that sent the event.</param> + <param name="eventArgs">The <see cref="T:SFML.Window.MouseWheelScrollEventArgs"/> associated with the mouse scroll.</param> </member> - <member name="T:StarSimLib.UI.MainMenuScreen"> + <member name="M:StarSimLib.UI.IInputHandler.HandleScreenClosed(System.Object,System.EventArgs)"> <summary> - Encapsulates the main menu screen. + Handles the screen closing. </summary> + <param name="sender">The <see cref="T:SFML.Window.Window"/> that sent the event.</param> + <param name="eventArgs">The <see cref="T:System.EventArgs"/> associated with the screen close.</param> </member> - <member name="M:StarSimLib.UI.MainMenuScreen.#ctor(SFML.Graphics.RenderWindow,StarSimLib.GUI.IInputHandler)"> - <inheritdoc /> + <member name="T:StarSimLib.UI.Screen"> + <summary> + Base class for screens that include user interactivity. + </summary> </member> - <member name="M:StarSimLib.UI.MainMenuScreen.CleanupScreen(SFML.Graphics.RenderTarget,SFML.Graphics.RenderStates)"> - <inheritdoc /> + <member name="F:StarSimLib.UI.Screen.inputHandler"> + <summary> + The input handler to use for this instance. + </summary> </member> - <member name="M:StarSimLib.UI.MainMenuScreen.ConstructScreen"> - <inheritdoc /> + <member name="F:StarSimLib.UI.Screen.renderWindow"> + <summary> + The window to which this instance is drawn. + </summary> </member> - <member name="M:StarSimLib.UI.MainMenuScreen.DrawFrame(SFML.Graphics.RenderTarget,SFML.Graphics.RenderStates)"> - <inheritdoc /> + <member name="M:StarSimLib.UI.Screen.#ctor(SFML.Graphics.RenderWindow,StarSimLib.UI.IInputHandler)"> + <summary> + Initialises a new instance of the <see cref="T:StarSimLib.UI.Screen"/> class. + </summary> + <param name="window"></param> + <param name="inputHandler"></param> </member> - <member name="M:StarSimLib.UI.MainMenuScreen.SetupScreen(SFML.Graphics.RenderTarget,SFML.Graphics.RenderStates)"> - <inheritdoc /> + <member name="M:StarSimLib.UI.Screen.CleanupScreen(SFML.Graphics.RenderTarget,SFML.Graphics.RenderStates)"> + <summary> + Cleans up the contents of the screen to the given <see cref="T:SFML.Graphics.RenderTarget"/> with the given <see cref="T:SFML.Graphics.RenderStates"/>. + </summary> + <param name="renderTarget">The <see cref="T:SFML.Graphics.RenderTarget"/> to which to draw this instance.</param> + <param name="renderStates">The <see cref="T:SFML.Graphics.RenderStates"/> to use for the drawing.</param> + </member> + <member name="M:StarSimLib.UI.Screen.ConstructScreen"> + <summary> + Called during the constructor to allow for custom setup, before the child constructor is called. + </summary> + </member> + <member name="M:StarSimLib.UI.Screen.DrawFrame(SFML.Graphics.RenderTarget,SFML.Graphics.RenderStates)"> + <summary> + Draws the contents of the screen to the given <see cref="T:SFML.Graphics.RenderTarget"/> with the given <see cref="T:SFML.Graphics.RenderStates"/>. + </summary> + <param name="renderTarget">The <see cref="T:SFML.Graphics.RenderTarget"/> to which to draw this instance.</param> + <param name="renderStates">The <see cref="T:SFML.Graphics.RenderStates"/> to use for the drawing.</param> + </member> + <member name="M:StarSimLib.UI.Screen.SetupScreen(SFML.Graphics.RenderTarget,SFML.Graphics.RenderStates)"> + <summary> + Sets up the contents of the screen to the given <see cref="T:SFML.Graphics.RenderTarget"/> with the given <see cref="T:SFML.Graphics.RenderStates"/>. + </summary> + <param name="renderTarget">The <see cref="T:SFML.Graphics.RenderTarget"/> to which to draw this instance.</param> + <param name="renderStates">The <see cref="T:SFML.Graphics.RenderStates"/> to use for the drawing.</param> + </member> + <member name="M:StarSimLib.UI.Screen.Run"> + <summary> + Displays the screen until it is closed. + </summary> </member> <member name="T:StarSimLib.UI.SimulationInputHandler"> <summary> @@ -1820,6 +1739,9 @@ A reference to the <see cref="T:StarSimLib.Data_Structures.Body"/> instances which should be managed by this instance. </param> </member> + <member name="P:StarSimLib.UI.SimulationInputHandler.HandledScreen"> + <inheritdoc /> + </member> <member name="P:StarSimLib.UI.SimulationInputHandler.IsSimulationPaused"> <summary> Whether the simulation is paused at any given time. @@ -1909,7 +1831,7 @@ Counts the frames elapsed since the last timer pulse, so that the FPS can be tracked. </summary> </member> - <member name="M:StarSimLib.UI.SimulationScreen.#ctor(SFML.Graphics.RenderWindow,StarSimLib.GUI.IInputHandler,StarSimLib.Data_Structures.Body[]@,System.Collections.Generic.Dictionary{StarSimLib.Data_Structures.Body,SFML.Graphics.CircleShape}@,StarSimLib.Physics.UpdateDelegate)"> + <member name="M:StarSimLib.UI.SimulationScreen.#ctor(SFML.Graphics.RenderWindow,StarSimLib.UI.IInputHandler,StarSimLib.Data_Structures.Body[]@,System.Collections.Generic.Dictionary{StarSimLib.Data_Structures.Body,SFML.Graphics.CircleShape}@,StarSimLib.Physics.UpdateDelegate)"> <summary> Initialises a new instance of the <see cref="T:StarSimLib.UI.SimulationScreen"/> class. </summary> diff --git a/StarSim/StarSimLib/UI/IInputHandler.cs b/StarSim/StarSimLib/UI/IInputHandler.cs @@ -0,0 +1,65 @@ +using System; +using SFML.Window; + +namespace StarSimLib.UI +{ + /// <summary> + /// Describes an input handler that allows screen interactivity. + /// </summary> + public interface IInputHandler + { + /// <summary> + /// The <see cref="Screen"/> instance whose input to manage. + /// </summary> + Screen HandledScreen { get; set; } + + /// <summary> + /// Handles key presses. + /// </summary> + /// <param name="sender">The <see cref="Window"/> that sent the event.</param> + /// <param name="eventArgs">The <see cref="KeyEventArgs"/> associated with the key press.</param> + void HandleKeyPressed(object sender, KeyEventArgs eventArgs); + + /// <summary> + /// Handles key releases. + /// </summary> + /// <param name="sender">The <see cref="Window"/> that sent the event.</param> + /// <param name="eventArgs">The <see cref="KeyEventArgs"/> associated with the key release.</param> + void HandleKeyReleased(object sender, KeyEventArgs eventArgs); + + /// <summary> + /// Handles motions of the mouse. + /// </summary> + /// <param name="sender">The <see cref="Window"/> that sent the event.</param> + /// <param name="eventArgs">The <see cref="MouseMoveEventArgs"/> associated with the mouse movement.</param> + void HandleMouseMoved(object sender, MouseMoveEventArgs eventArgs); + + /// <summary> + /// Handles key presses of the mouse. + /// </summary> + /// <param name="sender">The <see cref="Window"/> that sent the event.</param> + /// <param name="eventArgs">The <see cref="MouseButtonEventArgs"/> associated with the mouse press.</param> + void HandleMousePressed(object sender, MouseButtonEventArgs eventArgs); + + /// <summary> + /// Handles key releases of the mouse. + /// </summary> + /// <param name="sender">The <see cref="Window"/> that sent the event.</param> + /// <param name="eventArgs">The <see cref="MouseButtonEventArgs"/> associated with the mouse release.</param> + void HandleMouseReleased(object sender, MouseButtonEventArgs eventArgs); + + /// <summary> + /// Handles scrolling of the mouse wheel. + /// </summary> + /// <param name="sender">The <see cref="Window"/> that sent the event.</param> + /// <param name="eventArgs">The <see cref="MouseWheelScrollEventArgs"/> associated with the mouse scroll.</param> + void HandleMouseScrolled(object sender, MouseWheelScrollEventArgs eventArgs); + + /// <summary> + /// Handles the screen closing. + /// </summary> + /// <param name="sender">The <see cref="Window"/> that sent the event.</param> + /// <param name="eventArgs">The <see cref="EventArgs"/> associated with the screen close.</param> + void HandleScreenClosed(object sender, EventArgs eventArgs); + } +} +\ No newline at end of file diff --git a/StarSim/StarSimLib/UI/MainMenuInputHandler.cs b/StarSim/StarSimLib/UI/MainMenuInputHandler.cs @@ -1,51 +0,0 @@ -using System; -using SFML.Window; -using StarSimLib.GUI; - -namespace StarSimLib.UI -{ - /// <summary> - /// Provides user input handling functions for the main menu. - /// </summary> - public class MainMenuInputHandler : IInputHandler - { - /// <inheritdoc /> - public Screen HandledScreen { get; set; } - - /// <inheritdoc /> - public void HandleKeyPressed(object sender, KeyEventArgs eventArgs) - { - } - - /// <inheritdoc /> - public void HandleKeyReleased(object sender, KeyEventArgs eventArgs) - { - } - - /// <inheritdoc /> - public void HandleMouseMoved(object sender, MouseMoveEventArgs eventArgs) - { - } - - /// <inheritdoc /> - public void HandleMousePressed(object sender, MouseButtonEventArgs eventArgs) - { - } - - /// <inheritdoc /> - public void HandleMouseReleased(object sender, MouseButtonEventArgs eventArgs) - { - } - - /// <inheritdoc /> - public void HandleMouseScrolled(object sender, MouseWheelScrollEventArgs eventArgs) - { - } - - /// <inheritdoc /> - public void HandleScreenClosed(object sender, EventArgs eventArgs) - { - ((Window)sender).Close(); - } - } -} -\ No newline at end of file diff --git a/StarSim/StarSimLib/UI/MainMenuScreen.cs b/StarSim/StarSimLib/UI/MainMenuScreen.cs @@ -1,72 +0,0 @@ -using System.Collections.Generic; -using SFML.Graphics; -using SFML.System; -using StarSimLib.GUI; -using StarSimLib.GUI.Components; - -namespace StarSimLib.UI -{ - /// <summary> - /// Encapsulates the main menu screen. - /// </summary> - public class MainMenuScreen : Screen - { - private readonly List<Component> components; - - /// <inheritdoc /> - public MainMenuScreen(RenderWindow window, IInputHandler inputHandler) : base(window, inputHandler) - { - components = new List<Component> - { - new GUI.Components.Image(new Vector2f(10, 10), new Sprite( - new Texture(@"resources/chessboard.jpg", - new IntRect(new Vector2i(100, 100), new Vector2i(800, 800))), - new IntRect(new Vector2i(10, 10), new Vector2i(80, 80)))), - new GUI.Components.Image(new Vector2f(200, 10), new Sprite( - new Texture(@"resources/chessboard.jpg", - new IntRect(new Vector2i(100, 100), new Vector2i(800, 800))), - new IntRect(new Vector2i(10, 10), new Vector2i(80, 80)))), - new GUI.Components.Image(new Vector2f(10, 200), new Sprite( - new Texture(@"resources/chessboard.jpg", - new IntRect(new Vector2i(100, 100), new Vector2i(800, 800))), - new IntRect(new Vector2i(10, 10), new Vector2i(80, 80)))), - new GUI.Components.Image(new Vector2f(200, 200), new Sprite( - new Texture(@"resources/chessboard.jpg", - new IntRect(new Vector2i(100, 100), new Vector2i(800, 800))), - new IntRect(new Vector2i(10, 10), new Vector2i(80, 80)))), - new GUI.Components.Image(new Vector2f(400, 400), new Sprite( - new Texture(@"resources/chessboard.jpg", - new IntRect(new Vector2i(100, 100), new Vector2i(800, 800))), - new IntRect(new Vector2i(10, 10), new Vector2i(80, 80)))) - }; - } - - #region Overrides of Screen - - /// <inheritdoc /> - protected override void CleanupScreen(RenderTarget renderTarget, RenderStates renderStates) - { - } - - /// <inheritdoc /> - protected override void ConstructScreen() - { - } - - /// <inheritdoc /> - protected override void DrawFrame(RenderTarget renderTarget, RenderStates renderStates) - { - foreach (Component component in components) - { - component.Draw(renderTarget, renderStates); - } - } - - /// <inheritdoc /> - protected override void SetupScreen(RenderTarget renderTarget, RenderStates renderStates) - { - } - - #endregion Overrides of Screen - } -} -\ No newline at end of file diff --git a/StarSim/StarSimLib/UI/Screen.cs b/StarSim/StarSimLib/UI/Screen.cs @@ -0,0 +1,98 @@ +using SFML.Graphics; + +namespace StarSimLib.UI +{ + /// <summary> + /// Base class for screens that include user interactivity. + /// </summary> + public abstract class Screen + { + /// <summary> + /// The input handler to use for this instance. + /// </summary> + protected readonly IInputHandler inputHandler; + + /// <summary> + /// The window to which this instance is drawn. + /// </summary> + protected readonly RenderWindow renderWindow; + + /// <summary> + /// Initialises a new instance of the <see cref="Screen"/> class. + /// </summary> + /// <param name="window"></param> + /// <param name="inputHandler"></param> + protected Screen(RenderWindow window, IInputHandler inputHandler) + { + renderWindow = window; + + this.inputHandler = inputHandler; + inputHandler.HandledScreen = this; + + // we apply event handlers to allow for interactivity inside the window + renderWindow.KeyPressed += this.inputHandler.HandleKeyPressed; + renderWindow.KeyReleased += this.inputHandler.HandleKeyReleased; + renderWindow.MouseButtonPressed += this.inputHandler.HandleMousePressed; + renderWindow.MouseButtonReleased += this.inputHandler.HandleMouseReleased; + renderWindow.MouseMoved += this.inputHandler.HandleMouseMoved; + renderWindow.MouseWheelScrolled += this.inputHandler.HandleMouseScrolled; + renderWindow.Closed += this.inputHandler.HandleScreenClosed; + + renderWindow.SetVisible(false); + + ConstructScreen(); + } + + /// <summary> + /// Cleans up the contents of the screen to the given <see cref="RenderTarget"/> with the given <see cref="RenderStates"/>. + /// </summary> + /// <param name="renderTarget">The <see cref="RenderTarget"/> to which to draw this instance.</param> + /// <param name="renderStates">The <see cref="RenderStates"/> to use for the drawing.</param> + protected abstract void CleanupScreen(RenderTarget renderTarget, RenderStates renderStates); + + /// <summary> + /// Called during the constructor to allow for custom setup, before the child constructor is called. + /// </summary> + protected abstract void ConstructScreen(); + + /// <summary> + /// Draws the contents of the screen to the given <see cref="RenderTarget"/> with the given <see cref="RenderStates"/>. + /// </summary> + /// <param name="renderTarget">The <see cref="RenderTarget"/> to which to draw this instance.</param> + /// <param name="renderStates">The <see cref="RenderStates"/> to use for the drawing.</param> + protected abstract void DrawFrame(RenderTarget renderTarget, RenderStates renderStates); + + /// <summary> + /// Sets up the contents of the screen to the given <see cref="RenderTarget"/> with the given <see cref="RenderStates"/>. + /// </summary> + /// <param name="renderTarget">The <see cref="RenderTarget"/> to which to draw this instance.</param> + /// <param name="renderStates">The <see cref="RenderStates"/> to use for the drawing.</param> + protected abstract void SetupScreen(RenderTarget renderTarget, RenderStates renderStates); + + /// <summary> + /// Displays the screen until it is closed. + /// </summary> + public void Run() + { + // we reveal the window so that the user may interact with our program + renderWindow.SetVisible(true); + + // allows custom screen setup code + SetupScreen(renderWindow, RenderStates.Default); + + while (renderWindow.IsOpen) + { + renderWindow.Clear(); + renderWindow.DispatchEvents(); + + // allows custom screen content + DrawFrame(renderWindow, RenderStates.Default); + + renderWindow.Display(); + } + + // allows custom screen cleanup code + CleanupScreen(renderWindow, RenderStates.Default); + } + } +} +\ No newline at end of file diff --git a/StarSim/StarSimLib/UI/SimulationInputHandler.cs b/StarSim/StarSimLib/UI/SimulationInputHandler.cs @@ -2,7 +2,6 @@ using SFML.Window; using StarSimLib.Data_Structures; using StarSimLib.Graphics; -using StarSimLib.GUI; namespace StarSimLib.UI { diff --git a/StarSim/StarSimLib/UI/SimulationScreen.cs b/StarSim/StarSimLib/UI/SimulationScreen.cs @@ -3,7 +3,6 @@ using System.Timers; using SFML.Graphics; using StarSimLib.Data_Structures; using StarSimLib.Graphics; -using StarSimLib.GUI; using StarSimLib.Physics; namespace StarSimLib.UI