From dbbe203db8386b047cddcd97175f8dd6297835b3 Mon Sep 17 00:00:00 2001 From: MasterGordon Date: Sun, 9 Oct 2022 22:58:45 +0200 Subject: [PATCH] init --- .github/workflows/dotnet.yml | 32 +++++++++ .gitignore | 2 + Program.cs | 2 + assets/explode.wav | Bin 0 -> 53656 bytes assets/font.ttf | Bin 0 -> 118204 bytes assets/level1.json | 18 +++++ assets/shot.wav | Bin 0 -> 16456 bytes assets/sprites.png | Bin 0 -> 7140 bytes boulder-dash.csproj | 22 ++++++ readme.md | 2 + src/BoulderDash.cs | 60 ++++++++++++++++ src/Controls.cs | 32 +++++++++ src/actors/Map.cs | 25 +++++++ src/engine/Actor.cs | 12 ++++ src/engine/AudioPlayer.cs | 27 +++++++ src/engine/Context.cs | 15 ++++ src/engine/FontManager.cs | 35 +++++++++ src/engine/Game.cs | 31 ++++++++ src/engine/GameState.cs | 6 ++ src/engine/KeyState.cs | 25 +++++++ src/engine/Renderer.cs | 107 ++++++++++++++++++++++++++++ src/engine/ResourceLoader.cs | 34 +++++++++ src/engine/Scene.cs | 12 ++++ src/engine/SceneManager.cs | 26 +++++++ src/engine/TileSet.cs | 46 ++++++++++++ src/engine/Window.cs | 33 +++++++++ src/engine/interfaces/Logic.cs | 4 ++ src/engine/interfaces/Renderable.cs | 4 ++ src/engine/utils/Color.cs | 32 +++++++++ src/engine/utils/Point.cs | 7 ++ src/scenes/MainMenu.cs | 33 +++++++++ 31 files changed, 684 insertions(+) create mode 100644 .github/workflows/dotnet.yml create mode 100644 .gitignore create mode 100644 Program.cs create mode 100644 assets/explode.wav create mode 100644 assets/font.ttf create mode 100644 assets/level1.json create mode 100644 assets/shot.wav create mode 100644 assets/sprites.png create mode 100644 boulder-dash.csproj create mode 100644 readme.md create mode 100644 src/BoulderDash.cs create mode 100644 src/Controls.cs create mode 100644 src/actors/Map.cs create mode 100644 src/engine/Actor.cs create mode 100644 src/engine/AudioPlayer.cs create mode 100644 src/engine/Context.cs create mode 100644 src/engine/FontManager.cs create mode 100644 src/engine/Game.cs create mode 100644 src/engine/GameState.cs create mode 100644 src/engine/KeyState.cs create mode 100644 src/engine/Renderer.cs create mode 100644 src/engine/ResourceLoader.cs create mode 100644 src/engine/Scene.cs create mode 100644 src/engine/SceneManager.cs create mode 100644 src/engine/TileSet.cs create mode 100644 src/engine/Window.cs create mode 100644 src/engine/interfaces/Logic.cs create mode 100644 src/engine/interfaces/Renderable.cs create mode 100644 src/engine/utils/Color.cs create mode 100644 src/engine/utils/Point.cs create mode 100644 src/scenes/MainMenu.cs diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml new file mode 100644 index 0000000..7beca10 --- /dev/null +++ b/.github/workflows/dotnet.yml @@ -0,0 +1,32 @@ +name: .NET + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 6.0.x + - name: Restore dependencies + run: dotnet restore + - name: Build + run: dotnet build --no-restore + - name: Publish + run: dotnet publish -r linux-x64 + - name: Upload a Build Artifact + uses: actions/upload-artifact@v3.1.0 + with: + # Artifact name + name: Linux build + # A file, directory or wildcard pattern that describes what to upload + path: bin/Debug/net6.0/linux-x64/publish/asdlteroids diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cd42ee3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +bin/ +obj/ diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..c0f007e --- /dev/null +++ b/Program.cs @@ -0,0 +1,2 @@ +var boulderDash = new BoulderDash(); +boulderDash.Run(); diff --git a/assets/explode.wav b/assets/explode.wav new file mode 100644 index 0000000000000000000000000000000000000000..0741f6663b115fb24bc69fc010856f5f106b2943 GIT binary patch literal 53656 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 Vf!yf#1ODeDi-huzJ~Zt|{0Cke{FMLz literal 0 HcmV?d00001 diff --git a/assets/font.ttf b/assets/font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..39adf42efa597906e53be689474ac82214112124 GIT binary patch literal 118204 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 Ap8x;= literal 0 HcmV?d00001 diff --git a/assets/level1.json b/assets/level1.json new file mode 100644 index 0000000..85e9d91 --- /dev/null +++ b/assets/level1.json @@ -0,0 +1,18 @@ +[ + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +] diff --git a/assets/shot.wav b/assets/shot.wav new file mode 100644 index 0000000000000000000000000000000000000000..7de2c5f2740c645d5ddf6d2ce85f430d0d0d05e9 GIT binary patch literal 16456 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

-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 literal 0 HcmV?d00001 diff --git a/assets/sprites.png b/assets/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..d83727abefc707c27a1c389459d8d9a073ccd47c GIT binary patch literal 7140 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 literal 0 HcmV?d00001 diff --git a/boulder-dash.csproj b/boulder-dash.csproj new file mode 100644 index 0000000..45b0e45 --- /dev/null +++ b/boulder-dash.csproj @@ -0,0 +1,22 @@ + + + + Exe + net6.0 + boulder-dash + enable + true + true + true + enable + + + + + + + + + + + diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..f95b8f4 --- /dev/null +++ b/readme.md @@ -0,0 +1,2 @@ +# Boulder Dash SDL + diff --git a/src/BoulderDash.cs b/src/BoulderDash.cs new file mode 100644 index 0000000..6ee57f4 --- /dev/null +++ b/src/BoulderDash.cs @@ -0,0 +1,60 @@ +using static SDL2.SDL; + +class BoulderDash : Game +{ + private Context context; + private TileSet tileSet; + + public BoulderDash() + { + var window = new Window("Boulder Dash", 800, 600); + var renderer = new Renderer(window); + this.registerScenes(); + this.context = new Context(window, renderer); + GameState.sceneManager.ChangeScene("main", context); + this.tileSet = new TileSet(context, "assets.sprites.png", 32); + } + + private void registerScenes() + { + GameState.sceneManager.AddScene("main", new MainMenu()); + } + + protected override void update(double dt) + { + SDL_Event e; + while (SDL_PollEvent(out e) != 0) + { + if (e.type == SDL_EventType.SDL_QUIT) + { + System.Environment.Exit(0); + } + if (e.type == SDL_EventType.SDL_KEYDOWN) + { + if (e.key.keysym.sym == SDL_Keycode.SDLK_ESCAPE) + { + System.Environment.Exit(0); + } + } + } + GameState.keyState = new KeyState(); + GameState.sceneManager.GetCurrentScene()?.Update(dt, context); + } + + protected override void draw() + { +#if (DEBUG) + SDL_SetWindowTitle(this.context.window.GetWindow(), "Boulder Dash - " + GameState.fps + "FPS"); +#endif + this.context.renderer.Clear(); + GameState.sceneManager.GetCurrentScene()?.Draw(this.context); + this.context.renderer.DrawTileSet(this.tileSet, 0, 0, 1, 6); + this.context.renderer.DrawTileSet(this.tileSet, 32, 0, 1, 6); + this.context.renderer.DrawTileSet(this.tileSet, 64, 0, 1, 6); + this.context.renderer.DrawTileSet(this.tileSet, 96, 0, 1, 6); + this.context.renderer.DrawTileSet(this.tileSet, 128, 0, 1, 6); + this.context.renderer.DrawTileSet(this.tileSet, 160, 0, 1, 6); + this.context.renderer.Present(); + SDL_Delay(1); + } +} diff --git a/src/Controls.cs b/src/Controls.cs new file mode 100644 index 0000000..8bf1812 --- /dev/null +++ b/src/Controls.cs @@ -0,0 +1,32 @@ +using static SDL2.SDL; + +enum Control +{ + UP, + DOWN, + LEFT, + RIGHT, + STAY, +} + +static class ControlKeyExtension +{ + public static SDL_Keycode Key(this Control c) + { + switch (c) + { + case Control.UP: + return SDL_Keycode.SDLK_w; + case Control.DOWN: + return SDL_Keycode.SDLK_s; + case Control.LEFT: + return SDL_Keycode.SDLK_a; + case Control.RIGHT: + return SDL_Keycode.SDLK_d; + case Control.STAY: + return SDL_Keycode.SDLK_LCTRL; + default: + throw new ArgumentException("Invalid control"); + } + } +} diff --git a/src/actors/Map.cs b/src/actors/Map.cs new file mode 100644 index 0000000..0f3b176 --- /dev/null +++ b/src/actors/Map.cs @@ -0,0 +1,25 @@ +using Newtonsoft.Json; + +class Map : Actor +{ + private int[][] map; + + public Map(uint width, uint height) + { + this.map = new int[height][]; + for (uint i = 0; i < height; i++) + { + this.map[i] = new int[width]; + } + } + + public Map(string json) + { + var map = JsonConvert.DeserializeObject(json); + if (map == null) + { + throw new Exception("Invalid map"); + } + this.map = map; + } +} diff --git a/src/engine/Actor.cs b/src/engine/Actor.cs new file mode 100644 index 0000000..e38f6fd --- /dev/null +++ b/src/engine/Actor.cs @@ -0,0 +1,12 @@ +abstract class Actor +{ + public virtual void Update(double dt, Context context) + { + + } + + public virtual void Draw(Context context) + { + + } +} diff --git a/src/engine/AudioPlayer.cs b/src/engine/AudioPlayer.cs new file mode 100644 index 0000000..dec199e --- /dev/null +++ b/src/engine/AudioPlayer.cs @@ -0,0 +1,27 @@ +enum Sound +{ +} + +class AudioPlayer +{ + private Dictionary audioFiles = new(); + private ResourceLoader resourceLoader = new(); + + public AudioPlayer() + { + SDL2.SDL_mixer.Mix_OpenAudio(44100, SDL2.SDL_mixer.MIX_DEFAULT_FORMAT, 2, 2048); + } + + public void Register(Sound name, string path) + { + var buffer = resourceLoader.LoadBytes(path); + this.audioFiles.Add(name, buffer); + } + + public void Play(Sound name) + { + var buffer = this.audioFiles[name]; + var sound = SDL2.SDL_mixer.Mix_QuickLoad_WAV(buffer); + SDL2.SDL_mixer.Mix_PlayChannel((int)name, sound, 0); + } +} diff --git a/src/engine/Context.cs b/src/engine/Context.cs new file mode 100644 index 0000000..516ab10 --- /dev/null +++ b/src/engine/Context.cs @@ -0,0 +1,15 @@ +struct Context +{ + public Context(Window window, Renderer renderer) + { + this.window = window; + this.renderer = renderer; + this.resourceLoader = new ResourceLoader(); + this.fontManager = new FontManager(resourceLoader); + } + + public Window window { get; } + public Renderer renderer { get; } + public ResourceLoader resourceLoader { get; } + public FontManager fontManager { get; } +} diff --git a/src/engine/FontManager.cs b/src/engine/FontManager.cs new file mode 100644 index 0000000..ffcbbb1 --- /dev/null +++ b/src/engine/FontManager.cs @@ -0,0 +1,35 @@ +using static SDL2.SDL_ttf; +using static SDL2.SDL; + +class FontManager +{ + private Dictionary fonts = new(); + private ResourceLoader resourceLoader; + + public FontManager(ResourceLoader resourceLoader) + { + this.resourceLoader = resourceLoader; + if (TTF_Init() != 0) + { + throw new Exception("TTF_Init failed"); + } + } + + public void RegisterFont(string name, string path, int fontSize) + { + if (fonts.ContainsKey(name)) return; + var res = resourceLoader.LoadToIntPtr(path); + var sdlBuffer = SDL_RWFromConstMem(res.ptr, res.size); + var font = TTF_OpenFontRW(sdlBuffer, 1, fontSize); + if (font == IntPtr.Zero) + { + throw new Exception("TTF_OpenFont failed"); + } + fonts.Add(name, font); + } + + public IntPtr GetFont(string name) + { + return fonts[name]; + } +} diff --git a/src/engine/Game.cs b/src/engine/Game.cs new file mode 100644 index 0000000..27fd567 --- /dev/null +++ b/src/engine/Game.cs @@ -0,0 +1,31 @@ +abstract class Game +{ + public const int TPS = 64; + private Queue fpsQueue = new Queue(); + protected abstract void update(double dt); + protected abstract void draw(); + + public void Run() + { + var tLast = DateTime.Now; + var tAcc = TimeSpan.Zero; + while (true) + { + var dt = DateTime.Now - tLast; + tLast = DateTime.Now; + tAcc += dt; + var fps = (int)(1 / dt.TotalSeconds); + fpsQueue.Enqueue(fps); + while (fpsQueue.Count > fps) + fpsQueue.Dequeue(); + GameState.fps = (int)fpsQueue.Average(); + while (tAcc >= TimeSpan.FromSeconds(1.0 / TPS)) + { + update(dt.TotalSeconds); + tAcc -= TimeSpan.FromSeconds(1.0 / TPS); + } + + draw(); + } + } +} diff --git a/src/engine/GameState.cs b/src/engine/GameState.cs new file mode 100644 index 0000000..0acdfd7 --- /dev/null +++ b/src/engine/GameState.cs @@ -0,0 +1,6 @@ +static class GameState +{ + public static KeyState keyState = new KeyState(); + public static SceneManager sceneManager = new SceneManager(); + public static int fps = 0; +} diff --git a/src/engine/KeyState.cs b/src/engine/KeyState.cs new file mode 100644 index 0000000..71ffa07 --- /dev/null +++ b/src/engine/KeyState.cs @@ -0,0 +1,25 @@ +using System.Runtime.InteropServices; +using static SDL2.SDL; + +class KeyState +{ + private byte[] keys; + + public KeyState() + { + var origArray = SDL_GetKeyboardState(out var arraySize); + this.keys = new byte[arraySize]; + Marshal.Copy(origArray, this.keys, 0, arraySize); + } + + public bool isPressed(SDL_Keycode keycode) + { + byte scanCode = (byte)SDL_GetScancodeFromKey(keycode); + return (this.keys[scanCode] == 1); + } + + public bool isPressed(Control c) + { + return this.isPressed(c.Key()); + } +} diff --git a/src/engine/Renderer.cs b/src/engine/Renderer.cs new file mode 100644 index 0000000..dc19ddd --- /dev/null +++ b/src/engine/Renderer.cs @@ -0,0 +1,107 @@ +using static SDL2.SDL; +using static SDL2.SDL_ttf; + +class Renderer +{ + private IntPtr renderer; + private IntPtr font; + private SDL_Color color; + + public Renderer(Window window) + { + this.renderer = SDL_CreateRenderer(window.GetWindow(), -1, SDL_RendererFlags.SDL_RENDERER_ACCELERATED); + } + + public void Clear() + { + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + SDL_RenderClear(renderer); + } + + public void Present() + { + SDL_RenderPresent(renderer); + } + + public void DrawRect(double x, double y, int w, int h) + { + this.DrawRect((int)x, (int)y, w, h); + } + + public void DrawRect(int x, int y, int w, int h) + { + SDL_Rect rect = new SDL_Rect(); + rect.x = x; + rect.y = y; + rect.w = w; + rect.h = h; + + SDL_RenderFillRect(renderer, ref rect); + } + + public void DrawLines(double[][] points) + { + SDL_Point[] sdlPoints = new SDL_Point[points.Length]; + for (int i = 0; i < points.Length; i++) + { + sdlPoints[i].x = (int)points[i][0]; + sdlPoints[i].y = (int)points[i][1]; + } + + SDL_RenderDrawLines(renderer, sdlPoints, points.Length); + } + + public void SetColor(int r, int g, int b, int a = 255) + { + SDL_SetRenderDrawColor(renderer, (byte)r, (byte)g, (byte)b, (byte)a); + } + + public void SetFont(IntPtr font, SDL_Color color) + { + this.font = font; + this.color = color; + } + + public void SetFont(IntPtr font, Color color) + { + this.font = font; + this.color = color.toSDLColor(); + } + + public void DrawText(string text, int x, int y, bool center = false) + { + var surfaceMessage = TTF_RenderText_Solid(this.font, text, this.color); + + var texture = SDL_CreateTextureFromSurface(this.renderer, surfaceMessage); + int width; + int height; + + SDL_QueryTexture(texture, out _, out _, out width, out height); + + SDL_Rect rect = new SDL_Rect(); + rect.x = x; + rect.y = y; + rect.w = width; + rect.h = height; + + if (center) + { + rect.x -= width / 2; + rect.y -= height / 2; + } + + SDL_RenderCopy(this.renderer, texture, IntPtr.Zero, ref rect); + SDL_DestroyTexture(texture); + SDL_FreeSurface(surfaceMessage); + } + + public IntPtr GetRaw() + { + return renderer; + } + + public IntPtr CreateTextureFromSurface(IntPtr surface) + { + return SDL_CreateTextureFromSurface(renderer, surface); + } +} diff --git a/src/engine/ResourceLoader.cs b/src/engine/ResourceLoader.cs new file mode 100644 index 0000000..f4b0077 --- /dev/null +++ b/src/engine/ResourceLoader.cs @@ -0,0 +1,34 @@ +using System.Runtime.InteropServices; + +class ResourceLoader +{ + private string assemblyName; + + public ResourceLoader() + { + this.assemblyName = this.GetType().Assembly.GetName().Name!; + } + + public string LoadString(string resourceName) + { + using var stream = this.GetType().Assembly.GetManifestResourceStream($"{this.assemblyName}.{resourceName}"); + using var reader = new StreamReader(stream!); + return reader.ReadToEnd(); + } + + public byte[] LoadBytes(string resourceName) + { + using var stream = this.GetType().Assembly.GetManifestResourceStream($"{this.assemblyName}.{resourceName}"); + using var memoryStream = new MemoryStream(); + stream!.CopyTo(memoryStream); + return memoryStream.ToArray(); + } + + public (IntPtr ptr, int size) LoadToIntPtr(string resourceName) + { + var bytes = this.LoadBytes(resourceName); + var handle = GCHandle.Alloc(bytes, GCHandleType.Pinned); + var ptr = handle.AddrOfPinnedObject(); + return (ptr, bytes.Length); + } +} diff --git a/src/engine/Scene.cs b/src/engine/Scene.cs new file mode 100644 index 0000000..740a890 --- /dev/null +++ b/src/engine/Scene.cs @@ -0,0 +1,12 @@ +abstract class Scene : Actor +{ + public virtual void Create(Context context) + { + + } + + public virtual void Destroy(Context context) + { + + } +} diff --git a/src/engine/SceneManager.cs b/src/engine/SceneManager.cs new file mode 100644 index 0000000..67551b6 --- /dev/null +++ b/src/engine/SceneManager.cs @@ -0,0 +1,26 @@ +class SceneManager +{ + private Dictionary scenes = new Dictionary(); + private Scene? currentScene; + + public void AddScene(string name, Scene scene) + { + scenes.Add(name, scene); + } + + public void ChangeScene(string name, Context context) + { + if (currentScene != null) + { + currentScene.Destroy(context); + } + + currentScene = scenes[name]; + currentScene.Create(context); + } + + public Scene? GetCurrentScene() + { + return currentScene; + } +} diff --git a/src/engine/TileSet.cs b/src/engine/TileSet.cs new file mode 100644 index 0000000..de7290b --- /dev/null +++ b/src/engine/TileSet.cs @@ -0,0 +1,46 @@ +using static SDL2.SDL_image; +using static SDL2.SDL; + +class TileSet +{ + public readonly IntPtr Texture; + public readonly int Width, Height, Resolution; + + public TileSet(Context context, String tileSetPath, int resolution) + { + var res = context.resourceLoader.LoadToIntPtr(tileSetPath); + var sdlBuffer = SDL_RWFromMem(res.ptr, res.size); + var surface = IMG_Load_RW(sdlBuffer, 1); + this.Texture = context.renderer.CreateTextureFromSurface(surface); + SDL_QueryTexture(Texture, out _, out _, out Width, out Height); + SDL_FreeSurface(surface); + this.Resolution = resolution; + } + + ~TileSet() + { + SDL_DestroyTexture(Texture); + } +} + +static class TileSetRendererExtension +{ + public static void DrawTileSet(this Renderer renderer, TileSet tileSet, int x, int y, int tileX, int tileY) + { + var src = new SDL_Rect + { + x = tileX * tileSet.Resolution, + y = tileY * tileSet.Resolution, + w = tileSet.Resolution, + h = tileSet.Resolution + }; + var dst = new SDL_Rect + { + x = x, + y = y, + w = tileSet.Resolution, + h = tileSet.Resolution + }; + SDL_RenderCopy(renderer.GetRaw(), tileSet.Texture, ref src, ref dst); + } +} diff --git a/src/engine/Window.cs b/src/engine/Window.cs new file mode 100644 index 0000000..1f6c79c --- /dev/null +++ b/src/engine/Window.cs @@ -0,0 +1,33 @@ +using static SDL2.SDL; + +class Window +{ + IntPtr window; + + public Window(string title, int w, int h) + { + window = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, w, h, SDL_WindowFlags.SDL_WINDOW_VULKAN | SDL_WindowFlags.SDL_WINDOW_RESIZABLE); + } + + public Window(string title, int x, int y, int w, int h, SDL_WindowFlags flags) + { + this.window = SDL_CreateWindow(title, x, y, w, h, flags); + } + + public void Dispose() + { + SDL_DestroyWindow(this.window); + } + + public IntPtr GetWindow() + { + return this.window; + } + + public (int width, int height) GetSize() + { + int w, h; + SDL_GetWindowSize(this.window, out w, out h); + return (w, h); + } +} diff --git a/src/engine/interfaces/Logic.cs b/src/engine/interfaces/Logic.cs new file mode 100644 index 0000000..7db6d41 --- /dev/null +++ b/src/engine/interfaces/Logic.cs @@ -0,0 +1,4 @@ +interface Logic +{ + public void Update(KeyState keyState, double dx); +} diff --git a/src/engine/interfaces/Renderable.cs b/src/engine/interfaces/Renderable.cs new file mode 100644 index 0000000..7a0c1aa --- /dev/null +++ b/src/engine/interfaces/Renderable.cs @@ -0,0 +1,4 @@ +interface Renderable +{ + public void Render(Renderer renderer, double dx); +} diff --git a/src/engine/utils/Color.cs b/src/engine/utils/Color.cs new file mode 100644 index 0000000..7d82521 --- /dev/null +++ b/src/engine/utils/Color.cs @@ -0,0 +1,32 @@ +using static SDL2.SDL; + +class Color +{ + int r, g, b, a; + + public Color(int r, int g, int b, int a) + { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + + public Color(int r, int g, int b) + { + this.r = r; + this.g = g; + this.b = b; + this.a = 255; + } + + public SDL_Color toSDLColor() + { + SDL_Color color = new SDL_Color(); + color.r = (byte)r; + color.g = (byte)g; + color.b = (byte)b; + color.a = (byte)a; + return color; + } +} diff --git a/src/engine/utils/Point.cs b/src/engine/utils/Point.cs new file mode 100644 index 0000000..585457e --- /dev/null +++ b/src/engine/utils/Point.cs @@ -0,0 +1,7 @@ +class Point +{ + public static double Distance(double x1, double y1, double x2, double y2) + { + return Math.Sqrt(Math.Pow(x2 - x1, 2) + Math.Pow(y2 - y1, 2)); + } +} diff --git a/src/scenes/MainMenu.cs b/src/scenes/MainMenu.cs new file mode 100644 index 0000000..2eba468 --- /dev/null +++ b/src/scenes/MainMenu.cs @@ -0,0 +1,33 @@ +class MainMenu : Scene +{ + double x = 0; + bool dir = true; + public override void Create(Context context) + { + context.fontManager.RegisterFont("MainMenu", "assets.font.ttf", 24); + } + + public override void Update(double dt, Context context) + { + x += dir ? 10 : -10; + var windowSize = context.window.GetSize(); + if (x + 30 > windowSize.width) + { + dir = false; + } + if (x < 0) + { + dir = true; + } + } + + public override void Draw(Context context) + { + var windowSize = context.window.GetSize(); + var font = context.fontManager.GetFont("MainMenu"); + context.renderer.SetFont(font, new Color(255, 255, 255)); + context.renderer.DrawText("Main Menu", windowSize.width / 2, windowSize.height / 2, true); + context.renderer.SetColor(255, 255, 255); + context.renderer.DrawRect(x, 0, 30, 30); + } +}