From 9cfe60fcf8924614d760a37b25854354fb0beaf0 Mon Sep 17 00:00:00 2001 From: Doyle Thai Date: Sat, 26 Nov 2016 14:11:59 +1100 Subject: [PATCH] Set up user interface integration --- src/Asteroid.c | 26 ++++++++++++++++++++++++++ src/UserInterface.c | 24 ++++++++++++++++++++++++ src/include/Dengine/Asteroid.h | 3 +++ src/include/Dengine/UserInterface.h | 4 ++++ 4 files changed, 57 insertions(+) diff --git a/src/Asteroid.c b/src/Asteroid.c index 14c936d..439e639 100644 --- a/src/Asteroid.c +++ b/src/Asteroid.c @@ -917,6 +917,32 @@ void asteroid_gameUpdateAndRender(GameState *state, Memory *memory, collideColor, flags); } + { // Draw Ui + UiState *uiState = &state->uiState; + MemoryArena_ *transientArena = &state->transientArena; + AssetManager *assetManager = &state->assetManager; + Renderer *renderer = &state->renderer; + InputBuffer *inputBuffer = &state->input; + + userInterface_beginState(uiState); + + WindowState window = {0}; + window.id = userInterface_generateId(uiState); + + Rect windowRect = {0}; + windowRect.min = V2(200, 200); + windowRect.max = V2(500, 500); + + window.rect = windowRect; + +#if 0 + userInterface_window(uiState, transientArena, assetManager, renderer, + &assetManager->font, *inputBuffer, &window); +#endif + + userInterface_endState(uiState, inputBuffer); + } + for (i32 i = 0; i < world->numAudioRenderers; i++) { AudioRenderer *audioRenderer = &world->audioRenderer[i]; diff --git a/src/UserInterface.c b/src/UserInterface.c index 7487468..38e75a6 100644 --- a/src/UserInterface.c +++ b/src/UserInterface.c @@ -1,9 +1,33 @@ #include "Dengine/UserInterface.h" #include "Dengine/AssetManager.h" #include "Dengine/Assets.h" +#include "Dengine/Asteroid.h" #include "Dengine/Debug.h" #include "Dengine/Renderer.h" +void userInterface_beginState(UiState *state) +{ + state->hotItem = 0; +} + +void userInterface_endState(UiState *state, InputBuffer *input) +{ + if (!common_isSet(input->keys[keycode_mouseLeft].flags, + keystateflag_ended_down)) + { + state->activeItem = 0; + } + else if (state->activeItem == 0) + { + state->activeItem = -1; + } + + if (state->keyEntered == keycode_tab) state->kbdItem = 0; + + state->keyEntered = keycode_null; + state->keyChar = keycode_null; +} + i32 userInterface_button(UiState *const uiState, MemoryArena_ *const arena, AssetManager *const assetManager, Renderer *const renderer, Font *const font, diff --git a/src/include/Dengine/Asteroid.h b/src/include/Dengine/Asteroid.h index 2ec46b4..2289b62 100644 --- a/src/include/Dengine/Asteroid.h +++ b/src/include/Dengine/Asteroid.h @@ -8,6 +8,7 @@ #include "Dengine/MemoryArena.h" #include "Dengine/Platform.h" #include "Dengine/Renderer.h" +#include "Dengine/UserInterface.h" typedef struct World { @@ -48,6 +49,8 @@ typedef struct GameState { AssetManager assetManager; InputBuffer input; Renderer renderer; + + UiState uiState; World world; } GameState; diff --git a/src/include/Dengine/UserInterface.h b/src/include/Dengine/UserInterface.h index 6bf7d0e..3ef16ee 100644 --- a/src/include/Dengine/UserInterface.h +++ b/src/include/Dengine/UserInterface.h @@ -10,6 +10,7 @@ typedef struct AssetManager AssetManager; typedef struct Font Font; typedef struct MemoryArena MemoryArena_; typedef struct Renderer Renderer; +typedef struct GameState GameState; enum UiType { @@ -76,6 +77,9 @@ inline i32 userInterface_generateId(UiState *const uiState) return result; } +void userInterface_beginState(UiState *state); +void userInterface_endState(UiState *state, InputBuffer *input); + i32 userInterface_button(UiState *const uiState, MemoryArena_ *const arena, AssetManager *const assetManager, Renderer *const renderer, Font *const font,