using System; using System.Collections.Generic; using System.Data; using System.Linq; using FNAF_Clone.GUI; using FNAF_Clone.Map; using GlobalClassLib; using Microsoft.Xna.Framework; using MonoGameLibrary.Graphics; namespace FNAF_Clone; public static class ClientEnemyManager { private static Dictionary enemies = new(); private static Point cameraCorner = new(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, 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 EnemyUIElement(UIManager.EnemyAtlas["lurk-lit"], UIManager.EnemyAtlas["lurk-unlit"], cameraCorner), difficulty, location, new JumpscareUIElement(UIManager.EnemyAtlas["lurk-lit"], new(0, 0), 3, 2, 2, 0.1f, afterStop:defaultAfterJumpscare) )); break; case EnemyType.NEKO: AddEnemy(new ClientEnemy( (int)type, "Neko", id, new EnemyUIElement(UIManager.EnemyAtlas["neko-lit"], UIManager.EnemyAtlas["neko-unlit"], cameraCorner, 1), difficulty, location, new JumpscareUIElement(UIManager.EnemyAtlas["neko-lit"], new(0, -30), 3, 2, 2, 0.1f, afterStop:defaultAfterJumpscare) )); break; case EnemyType.SPOT: EnemyUIElement element = new EnemyUIElement([UIManager.EnemyAtlas["spot-awake-lit"], UIManager.EnemyAtlas["spot-asleep-lit"]],[UIManager.EnemyAtlas["spot-awake-unlit"], UIManager.EnemyAtlas["spot-asleep-unlit"]], cameraCorner, 2); element.SetTexture(true, 1); AddEnemy(new ClientEnemy( (int)type, "Spot", id, element, difficulty, location, new JumpscareUIElement(UIManager.EnemyAtlas["spot-awake-lit"], new(0, 0), 3, 2, 2, 0.1f, afterStop:defaultAfterJumpscare) )); break; case EnemyType.DASH: AddEnemy(new ClientEnemy( (int)type, "Dash", id, new EnemyUIElement(UIManager.EnemyAtlas["dash-lit"], UIManager.EnemyAtlas["dash-unlit"], cameraCorner, 3), difficulty, location, new JumpscareUIElement(UIManager.EnemyAtlas["dash-lit"], new(0, 0), 3, 2, 2, 0.1f, afterStop:defaultAfterJumpscare) )); break; case EnemyType.MARE: AddEnemy(new ClientEnemy( (int)type, "Mare", id, new EnemyUIElement(UIManager.EnemyAtlas["mare-lit"], UIManager.EnemyAtlas["mare-unlit"], cameraCorner), difficulty, location, new JumpscareUIElement(UIManager.EnemyAtlas["mare-lit"], new(0, 0), 3, 2, 2, 0.1f, afterStop:defaultAfterJumpscare) )); break; } } public static void Move(int id, MapTileProjection tile) { enemies[id].Location = tile; } public static ClientEnemy Get(int id) => enemies[id]; public static ClientEnemy[] GetByLocation(MapTileProjection tile) { List output = new(); foreach (var e in enemies.Values){ if (e.Location == tile){ output.Add(e); } } return output.ToArray(); } }