using Firebird2D.SceneSystem; using SFML.Graphics; using SFML.System; using SFML.Window; using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; namespace Firebird2D.Core { public class MainWindow { private RenderWindow renderWindow; private Clock clock = new Clock(); private List joyStickMovement = new List(); public Vector2u mainWindowSize { get; private set; } internal I_Scene? ActiveSecene { set; get; } public MainWindow(VideoMode resolution, string GameName, Styles style = Styles.Default) { renderWindow = new RenderWindow(resolution, GameName, style); renderWindow.Closed += (sender, e) => renderWindow.Close(); renderWindow.Resized += RenderWindow_Resized; mainWindowSize = renderWindow.Size; renderWindow.KeyPressed += RenderWindow_KeyPressed; renderWindow.JoystickButtonPressed += RenderWindow_JoystickButtonPressed; renderWindow.MouseButtonPressed += RenderWindow_MouseButtonPressed; renderWindow.MouseMoved += RenderWindow_MouseMoved; renderWindow.JoystickMoved += RenderWindow_JoystickMoved; } private void RenderWindow_JoystickMoved(object? sender, JoystickMoveEventArgs e) { if(!joyStickMovement.Contains(e.JoystickId)) joyStickMovement.Add(e.JoystickId); } private void RenderWindow_MouseMoved(object? sender, MouseMoveEventArgs e) { Vector2i mousposition = new Vector2i(e.X, e.Y); InputMapper.HandleMouseMovement(mousposition); } private void RenderWindow_MouseButtonPressed(object? sender, MouseButtonEventArgs e) { InputMapper.HandleMouseInput(e.Button); } private void RenderWindow_JoystickButtonPressed(object? sender, JoystickButtonEventArgs e) { InputMapper.HandleJoystickButtonInput(e.JoystickId, e.Button); } private void RenderWindow_KeyPressed(object? sender, KeyEventArgs e) { InputMapper.HandleKeyboardInput(e.Code); } private void RenderWindow_Resized(object? sender, SizeEventArgs e) { //throw new NotImplementedException(); } public void Gameloop() { while (renderWindow.IsOpen) { int delteMiliseconds = clock.Restart().AsMilliseconds(); renderWindow.DispatchEvents(); renderWindow.Clear(); if (ActiveSecene != null) { foreach (uint joystickId in joyStickMovement) InputMapper.HandleJoytickMove(joystickId ,Joystick.GetAxisPosition(joystickId,Joystick.Axis.X) , Joystick.GetAxisPosition(joystickId, Joystick.Axis.Y) , Joystick.GetAxisPosition(joystickId, Joystick.Axis.Z) , Joystick.GetAxisPosition(joystickId, Joystick.Axis.R) , Joystick.GetAxisPosition(joystickId, Joystick.Axis.U) , Joystick.GetAxisPosition(joystickId, Joystick.Axis.V) , Joystick.GetAxisPosition(joystickId, Joystick.Axis.PovX) , Joystick.GetAxisPosition(joystickId, Joystick.Axis.PovY)); ActiveSecene.TickScene(delteMiliseconds); ActiveSecene.RenderScene(renderWindow); } renderWindow.Display(); } } } }