using System; using System.Drawing; using System.Numerics; using SDL2; using SlatedGameToolkit.Framework.AssetSystem; using SlatedGameToolkit.Framework.Graphics.Render; using SlatedGameToolkit.Framework.Graphics.Text; using SlatedGameToolkit.Framework.Input.Devices; using SlatedGameToolkit.Framework.StateSystem; using SlatedGameToolkit.Framework.StateSystem.States; namespace WebsiteSim.States { public class GameOverState : IState { private MeshBatchRenderer renderer; private AssetManager assets; BitmapFont font; BitmapFont titleFont; private StateManager manager; private int score; private TimeSpan timeElapsed; private int downloadsServed; private int totalDownloads; private int packetsReceived; private int totalPackets; public GameOverState(BitmapFont font, BitmapFont titleFont, MeshBatchRenderer renderer, AssetManager assets) { this.font = font; this.assets = assets; this.titleFont = titleFont; this.renderer = renderer; } public bool Activate() { titleFont.PixelHeight = 120; titleFont.PrepareCharacterGroup("GameOvr!".ToCharArray()); this.font.PixelHeight = 48; font.PrepareCharacterGroup("01234567890.Your Stats: Score,ServerUp-timedownloadservedpacketssentWebsitePDRLN%que".ToCharArray()); Keyboard.keyboardUpdateEvent += KeyChanged; return true; } public bool Deactivate() { Keyboard.keyboardUpdateEvent -= KeyChanged; return true; } public void Deinitialize() { } public string getName() { return "GameOver"; } public void Initialize(StateManager manager) { this.manager = manager; } public void Render(double delta) { renderer.Begin(Matrix4x4.Identity, delta); titleFont.WriteLine(renderer, 1.95f, Game.HEIGHT_UNITS * 0.75f, "Game Over!", Color.Purple); font.WriteLine(renderer, 1.95f, Game.HEIGHT_UNITS * 0.6f, "Score: " + score, Color.Black); font.WriteLine(renderer, 1.95f, Game.HEIGHT_UNITS * 0.53f, "Website Uptime: " + timeElapsed.ToString("h\\:mm\\:ss"), Color.Black); font.WriteLine(renderer, 1.95f, Game.HEIGHT_UNITS * 0.46f, "Packets Received: " + totalPackets + " Packet Loss: " + Math.Round((100f * (1f - ((float) packetsReceived / totalPackets))), 1) + "%", Color.Black); font.WriteLine(renderer, 1.95f, Game.HEIGHT_UNITS * 0.39f, "Downloads Served: " + downloadsServed, Color.Black); font.WriteLine(renderer, 1.95f, Game.HEIGHT_UNITS * 0.32f, "Downloads Requested: " + totalDownloads, Color.Black); font.WriteLine(renderer, 1.5f, 1.5f, "Press space to reset...", Color.Black); renderer.End(); } public void SetStats(int score, float secondsElapsed, int downloads, int totalDownloads, int packetsReceived, int totalPackets) { this.score = score; this.timeElapsed = TimeSpan.FromSeconds(secondsElapsed); this.downloadsServed = downloads; this.totalPackets = totalPackets; this.packetsReceived = packetsReceived; this.totalDownloads = totalDownloads; } public void Update(double timeStep) { } public void KeyChanged(SDL.SDL_Keycode keycode, bool pressed) { if (keycode == SDL.SDL_Keycode.SDLK_SPACE && !pressed) { manager.ChangeState("Main"); } } } }