From 91cc891b3651fe5de3bbd46578f2965c1f4c7ffb Mon Sep 17 00:00:00 2001 From: Doyle Thai Date: Sat, 26 Nov 2016 13:34:23 +1100 Subject: [PATCH 1/2] Add guard against null-audio in init playback --- src/Audio.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Audio.c b/src/Audio.c index c9ab759..65382fe 100644 --- a/src/Audio.c +++ b/src/Audio.c @@ -272,6 +272,8 @@ const i32 audio_playVorbis(MemoryArena_ *arena, AudioManager *audioManager, AudioRenderer *audioRenderer, AudioVorbis *vorbis, i32 numPlays) { + if(vorbis) return -1; + i32 result = initRendererForPlayback(arena, audioManager, audioRenderer, vorbis, numPlays); @@ -302,6 +304,8 @@ const i32 audio_streamPlayVorbis(MemoryArena_ *arena, AudioManager *audioManager // TODO(doyle): Streaming leaks memory, we don't free the "copy audio" ASSERT(INVALID_CODE_PATH); + if(vorbis) return -1; + i32 result = initRendererForPlayback(arena, audioManager, audioRenderer, vorbis, numPlays); // NOTE(doyle): We make a copy of the audio vorbis file using all the same From 9cfe60fcf8924614d760a37b25854354fb0beaf0 Mon Sep 17 00:00:00 2001 From: Doyle Thai Date: Sat, 26 Nov 2016 14:11:59 +1100 Subject: [PATCH 2/2] 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,