From e6128dc9f555a7e26431ce17669df7fc2e8c1ffb Mon Sep 17 00:00:00 2001 From: Perry Date: Mon, 9 Mar 2026 20:05:21 +0100 Subject: [PATCH] =?UTF-8?q?Renderov=C3=A1n=C3=AD=20textu,=20jumpscary,=20w?= =?UTF-8?q?in=20a=20lose=20screen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FNAF_Clone/ClientEnemy.cs | 5 +- FNAF_Clone/ClientEnemyManager.cs | 35 +++++- FNAF_Clone/CommandManager.cs | 8 +- FNAF_Clone/Content/Content.mgcb | 7 ++ FNAF_Clone/Content/ponde___.ttf | Bin 0 -> 18484 bytes .../{font.spritefont => ponderosa.spritefont} | 4 +- FNAF_Clone/EventProcessor.cs | 13 +++ FNAF_Clone/GUI/JumpscareUIElement.cs | 59 ++++++++++ FNAF_Clone/GUI/Screen.cs | 39 ++++++- FNAF_Clone/GUI/TextUIElement.cs | 54 +++++++++ FNAF_Clone/GUI/TimerUIElement.cs | 30 +++++ FNAF_Clone/GUI/UIElement.cs | 31 +++--- FNAF_Clone/GUI/UIManager.cs | 104 +++++++++++++----- FNAF_Clone/GameMain.cs | 9 +- FNAF_Server/Enemies/Enemy.cs | 8 +- FNAF_Server/Enemies/LurkEnemy.cs | 8 +- FNAF_Server/Enemies/NekoEnemy.cs | 8 +- FNAF_Server/Enemies/SpotEnemy.cs | 8 +- FNAF_Server/GameLogic.cs | 11 +- FNAF_Server/Server.cs | 1 + PacketLib/GameEvent.cs | 2 + 21 files changed, 360 insertions(+), 84 deletions(-) create mode 100644 FNAF_Clone/Content/ponde___.ttf rename FNAF_Clone/Content/{font.spritefont => ponderosa.spritefont} (97%) create mode 100644 FNAF_Clone/GUI/JumpscareUIElement.cs create mode 100644 FNAF_Clone/GUI/TextUIElement.cs create mode 100644 FNAF_Clone/GUI/TimerUIElement.cs diff --git a/FNAF_Clone/ClientEnemy.cs b/FNAF_Clone/ClientEnemy.cs index 7a2b982..821cb93 100644 --- a/FNAF_Clone/ClientEnemy.cs +++ b/FNAF_Clone/ClientEnemy.cs @@ -6,11 +6,12 @@ using MonoGameLibrary.Graphics; namespace FNAF_Clone; public class ClientEnemy : GlobalEnemy { - public ClientEnemy(int typeId, string name, int id, UIElement sprite, int difficulty, MapTileProjection location) : base(difficulty, id) { + public ClientEnemy(int typeId, string name, int id, UIElement sprite, int difficulty, MapTileProjection location, JumpscareUIElement jumpscareSprite) : base(difficulty, id) { Name = name; TypeId = typeId; Sprite = sprite; Location = location; + JumpscareSprite = jumpscareSprite; } // public TextureRegion Sprite { get; set; } @@ -18,4 +19,6 @@ public class ClientEnemy : GlobalEnemy enemies = new(); private static Point cameraCorner = new Point(64, 64); + private static Action defaultAfterJumpscare = UIManager.ShowDeathScreen; public static void AddEnemy(ClientEnemy enemy) { enemies.Add(enemy.Id, enemy); - UIManager.AddEnemySprite(enemy.Id, enemy.Sprite); + UIManager.AddEnemySprite(enemy.Id, enemy.Sprite, enemy.JumpscareSprite); } public static void AddEnemyByTemplate(EnemyType type, int id, int difficulty, MapTileProjection location) { switch (type){ case EnemyType.LURK: - AddEnemy(new ClientEnemy((int)type, "Lurk", id, new UIElement(UIManager.enemyAtlas[0], cameraCorner), difficulty, location)); + AddEnemy(new ClientEnemy( + (int)type, + "Lurk", + id, + new UIElement(UIManager.EnemyAtlas[0], cameraCorner), + difficulty, + location, + new JumpscareUIElement(UIManager.EnemyAtlas[0], new(0, 0), 3, 2, 2, 0.1f, afterStop:defaultAfterJumpscare))); break; case EnemyType.NEKO: - AddEnemy(new ClientEnemy((int)type, "Neko", id, new UIElement(UIManager.enemyAtlas[1], cameraCorner), difficulty, location)); + AddEnemy(new ClientEnemy( + (int)type, + "Neko", + id, + new UIElement(UIManager.EnemyAtlas[1], cameraCorner), + difficulty, + location, + new JumpscareUIElement(UIManager.EnemyAtlas[1], new(0, -30), 3, 2, 2, 0.1f, afterStop:defaultAfterJumpscare))); break; case EnemyType.SPOT: UIElement element = - new UIElement([UIManager.enemyAtlas[2], UIManager.enemyAtlas[3], UIManager.enemyAtlas[4], UIManager.enemyAtlas[5]], cameraCorner); + new UIElement([UIManager.EnemyAtlas[2], UIManager.EnemyAtlas[3], UIManager.EnemyAtlas[4], UIManager.EnemyAtlas[5]], cameraCorner); element.SetTexture(2); - AddEnemy(new ClientEnemy((int)type, "Spot", id, element, difficulty, location)); + AddEnemy(new ClientEnemy( + (int)type, + "Spot", + id, + element, + difficulty, + location, + new JumpscareUIElement(UIManager.EnemyAtlas[2], new(0, 0), 3, 2, 2, 0.1f, afterStop:defaultAfterJumpscare))); break; } } diff --git a/FNAF_Clone/CommandManager.cs b/FNAF_Clone/CommandManager.cs index dd48958..c21cdbe 100644 --- a/FNAF_Clone/CommandManager.cs +++ b/FNAF_Clone/CommandManager.cs @@ -19,10 +19,14 @@ public class CommandManager { ("Toggle back door", Keys.S, ToggleDoorBack) ]; - private static InputListenerHook toggleCamHook = new(true); + private static InputListenerHook allControlsHook{ get; } = 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, allControlsHook)); + } + + public static void AllowInput(bool state) { + allControlsHook.Enabled = state; } private static void SendToggleCamera() { diff --git a/FNAF_Clone/Content/Content.mgcb b/FNAF_Clone/Content/Content.mgcb index 362ea42..ea1b793 100644 --- a/FNAF_Clone/Content/Content.mgcb +++ b/FNAF_Clone/Content/Content.mgcb @@ -73,3 +73,10 @@ #begin images/testBlocks-definition.xml /copy:images/testBlocks-definition.xml +#begin ponderosa.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/processorParam:PremultiplyAlpha=True +/processorParam:TextureFormat=Compressed +/build:ponderosa.spritefont + diff --git a/FNAF_Clone/Content/ponde___.ttf b/FNAF_Clone/Content/ponde___.ttf new file mode 100644 index 0000000000000000000000000000000000000000..89eab2dbbfeb274663e2a9a9145e22153dcc7a34 GIT binary patch literal 18484 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 Tch7V``(1i`;+s2P@E`vR6|o)V literal 0 HcmV?d00001 diff --git a/FNAF_Clone/Content/font.spritefont b/FNAF_Clone/Content/ponderosa.spritefont similarity index 97% rename from FNAF_Clone/Content/font.spritefont rename to FNAF_Clone/Content/ponderosa.spritefont index bd33ecf..fa8b598 100755 --- a/FNAF_Clone/Content/font.spritefont +++ b/FNAF_Clone/Content/ponderosa.spritefont @@ -11,13 +11,13 @@ with. - Arial + Ponderosa - 12 + 20