diff --git a/FNAF_Clone.sln.DotSettings.user b/FNAF_Clone.sln.DotSettings.user
index eba5de7..ac6c023 100644
--- a/FNAF_Clone.sln.DotSettings.user
+++ b/FNAF_Clone.sln.DotSettings.user
@@ -1,4 +1,5 @@
True
+ ForceIncluded
ForceIncluded
ForceIncluded
\ No newline at end of file
diff --git a/FNAF_Clone/CommandManager.cs b/FNAF_Clone/CommandManager.cs
index d2321f7..4f5763f 100644
--- a/FNAF_Clone/CommandManager.cs
+++ b/FNAF_Clone/CommandManager.cs
@@ -14,7 +14,7 @@ public class CommandManager {
private static InputListenerHook toggleCamHook = new(true);
public static void InitInputListeners() {
- Array.ForEach(keybinds, tuple => InputManager.AddListener(tuple.label, tuple.key, _ => tuple.action(), InputTiming.PRESS, toggleCamHook));
+ Array.ForEach(keybinds, tuple => InputManager.AddListener(tuple.label, tuple.key, () => tuple.action(), InputTiming.PRESS, toggleCamHook));
}
private static void ToggleCamera() {
diff --git a/FNAF_Clone/Content/Content.mgcb b/FNAF_Clone/Content/Content.mgcb
index ddc4c36..9060f47 100644
--- a/FNAF_Clone/Content/Content.mgcb
+++ b/FNAF_Clone/Content/Content.mgcb
@@ -13,3 +13,18 @@
#---------------------------------- Content ---------------------------------#
+#begin images/SpriteSheet_testBlocks.png
+/importer:TextureImporter
+/processor:TextureProcessor
+/processorParam:ColorKeyColor=255,0,255,255
+/processorParam:ColorKeyEnabled=True
+/processorParam:GenerateMipmaps=False
+/processorParam:PremultiplyAlpha=True
+/processorParam:ResizeToPowerOfTwo=False
+/processorParam:MakeSquare=False
+/processorParam:TextureFormat=Color
+/build:images/SpriteSheet_testBlocks.png
+
+#begin images/testBlocks-definition.xml
+/copy:images/testBlocks-definition.xml
+
diff --git a/FNAF_Clone/Content/images/SpriteSheet_testBlocks.png b/FNAF_Clone/Content/images/SpriteSheet_testBlocks.png
new file mode 100644
index 0000000..87eba71
Binary files /dev/null and b/FNAF_Clone/Content/images/SpriteSheet_testBlocks.png differ
diff --git a/FNAF_Clone/Content/images/testBlocks-definition.xml b/FNAF_Clone/Content/images/testBlocks-definition.xml
new file mode 100755
index 0000000..7da4afc
--- /dev/null
+++ b/FNAF_Clone/Content/images/testBlocks-definition.xml
@@ -0,0 +1,10 @@
+
+
+ images/SpriteSheet_testBlocks
+
+
+
+
+
+
+
diff --git a/FNAF_Clone/GUI/Screen.cs b/FNAF_Clone/GUI/Screen.cs
new file mode 100644
index 0000000..962a742
--- /dev/null
+++ b/FNAF_Clone/GUI/Screen.cs
@@ -0,0 +1,91 @@
+using System.Collections.Generic;
+using Microsoft.Xna.Framework.Graphics;
+using Microsoft.Xna.Framework.Input;
+using MonoGameLibrary.Input;
+
+namespace FNAF_Clone.GUI;
+
+
+public class Screen {
+
+ public static Dictionary Screens = new();
+ public static Screen CurrentScreen{ get; private set; }
+
+ public static void AddScreens((string id, Screen screen)[] screens) {
+ foreach (var tuple in screens){
+ Screens.Add(tuple.id, tuple.screen);
+ }
+ }
+ public static void AddScreen(string id, Screen screen, bool activate = false) {
+ Screens.Add(id, screen);
+ if (activate) SetScreen(id);
+ }
+
+ public static void SetScreen(string id) {
+ CurrentScreen = Screens[id];
+ CurrentScreen.Active = true;
+ }
+
+ public static void RemoveScreen(string id) {
+ Screens.Remove(id);
+ }
+
+ public enum ScreenType {
+ MAIN_MENU,
+ OFFICE,
+ CAMERAS
+ }
+
+
+ public ScreenType Type{ get; private set; }
+ private Dictionary elements = new();
+ public bool Active { get; private set; } = false;
+ private InputListenerHook mouseInputHook = new(true);
+
+ public Screen(ScreenType type) {
+ Type = type;
+ InputManager.AddListener(InputManager.MouseButton.LEFT, () => ProcessMouseInput(InputManager.MouseState), InputTiming.PRESS, mouseInputHook);
+ }
+
+ public Screen(ScreenType type, Dictionary elements) {
+ this.elements = elements;
+ Type = type;
+ }
+
+ public void AddElement(string id, UIElement element) {
+ elements.Add(id, element);
+ }
+
+ public void SetActive(bool active) {
+ Active = active;
+ if (Active == active) return;
+ foreach (var keyValuePair in elements){
+ keyValuePair.Value.Active = Active;
+ }
+
+ }
+
+ private void ProcessMouseInput(MouseState mouseState) {
+ foreach (var element in elements.Values){
+ if (!element.Pressable) continue;
+
+ if (element.IsWithinBounds(mouseState.Position)){
+ element.OnMousePress(); // TODO: differentiate between press, hold and release events
+ }
+ }
+ }
+
+ public void Update() {
+
+
+ foreach (var keyValuePair in elements){
+ keyValuePair.Value.Update();
+ }
+ }
+
+ public void Draw(SpriteBatch spriteBatch) {
+ foreach (var val in elements.Values){
+ val.Draw(spriteBatch);
+ }
+ }
+}
\ No newline at end of file
diff --git a/FNAF_Clone/GUI/UIElement.cs b/FNAF_Clone/GUI/UIElement.cs
new file mode 100644
index 0000000..bef026e
--- /dev/null
+++ b/FNAF_Clone/GUI/UIElement.cs
@@ -0,0 +1,40 @@
+using System;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using MonoGameLibrary.Graphics;
+using MonoGameLibrary.Input;
+
+namespace FNAF_Clone.GUI;
+
+public class UIElement {
+ public bool Active { get; set; } = false;
+ public bool Pressable { get; set; } = false;
+
+ private (Point, Point) bounds; // TODO: Change this to support non-rectangular hitboxes
+ private TextureRegion texture;
+
+ public UIElement(TextureRegion texture, Point position) {
+ this.texture = texture;
+ bounds = (position, position + new Point(texture.Width, texture.Height));
+ }
+ public void Update() {
+
+ }
+
+ public bool IsWithinBounds(Point pos) {
+ return pos.X >= Math.Min(bounds.Item1.X, bounds.Item2.X) && pos.X <= Math.Max(bounds.Item1.X, bounds.Item2.X) &&
+ pos.Y >= Math.Min(bounds.Item1.Y, bounds.Item2.Y) && pos.Y <= Math.Max(bounds.Item1.Y, bounds.Item2.Y);
+ }
+
+ public Action OnMousePress{ get; set; }
+
+ // public virtual void OnMousePress() { }
+
+ public virtual void OnMouseRelease() { }
+
+ public virtual void OnMouseHold() { }
+
+ public void Draw(SpriteBatch spriteBatch) {
+ texture.Draw(spriteBatch, bounds.Item1.ToVector2(), Color.White);
+ }
+}
\ No newline at end of file
diff --git a/FNAF_Clone/GameMain.cs b/FNAF_Clone/GameMain.cs
index 95f2e8f..b6076c9 100644
--- a/FNAF_Clone/GameMain.cs
+++ b/FNAF_Clone/GameMain.cs
@@ -1,27 +1,41 @@
-using Microsoft.Xna.Framework;
+using System;
+using FNAF_Clone.GUI;
+using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using MonoGameLibrary;
+using MonoGameLibrary.Graphics;
using MonoGameLibrary.Input;
namespace FNAF_Clone;
-public class GameMain() : Core("fnafkooo", 1920, 1080, false) {
- private GraphicsDeviceManager _graphics;
- private SpriteBatch _spriteBatch;
+public class GameMain() : Core("fnafkooo", 640, 360, false) {
+ // private GraphicsDeviceManager _graphics;
+ // private SpriteBatch _spriteBatch;
+
+ private Screen officeScreen = new(Screen.ScreenType.OFFICE);
+
+ private TextureAtlas testAtlas;
protected override void Initialize() {
Client.Connect("127.0.0.1", 9012);
CommandManager.InitInputListeners();
+ InputManager.AddListener(InputManager.MouseButton.LEFT, (() => Console.WriteLine("LMB pressed at: " + InputManager.MouseState.Position)), InputTiming.PRESS, new InputListenerHook(true));
+
+
base.Initialize();
}
protected override void LoadContent() {
- _spriteBatch = new SpriteBatch(GraphicsDevice);
-
+ // spriteBatch = new SpriteBatch(GraphicsDevice);
+ testAtlas = TextureAtlas.FromFile(content, "images/testBlocks-definition.xml");
- // TODO: use this.Content to load your game content here
+ Screen.AddScreen("office", officeScreen, true);
+ officeScreen.AddElement("test",
+ new UIElement(testAtlas[0], Point.Zero)
+ {Pressable = true, OnMousePress = () => Console.WriteLine("Pressed!")}
+ );
}
protected override void Update(GameTime gameTime) {
@@ -39,9 +53,11 @@ public class GameMain() : Core("fnafkooo", 1920, 1080, false) {
protected override void Draw(GameTime gameTime) {
GraphicsDevice.Clear(Color.CornflowerBlue);
+ spriteBatch.Begin();
+
+ Screen.CurrentScreen.Draw(spriteBatch);
- // TODO: Add your drawing code here
-
+ spriteBatch.End();
base.Draw(gameTime);
}
}
\ No newline at end of file
diff --git a/MonoGameLibrary b/MonoGameLibrary
index a2b524e..182ebfc 160000
--- a/MonoGameLibrary
+++ b/MonoGameLibrary
@@ -1 +1 @@
-Subproject commit a2b524ee04772d483750047c997172cc62090a9a
+Subproject commit 182ebfc31c37c0759b5a41c1921273f1ba55b759