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:
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