Nothing really changed

This commit is contained in:
2025-08-16 14:52:52 -05:00
parent 69acbd017c
commit c3310a036f
16 changed files with 188 additions and 51 deletions

View File

@@ -311,6 +311,15 @@ void cmdEcho(const consolecmdexec_t *exec) {
// May move these later
void consoleUpdate() {
if(inputPressed(INPUT_BIND_CONSOLE)) {
CONSOLE.visible = !CONSOLE.visible;
if(CONSOLE.visible) {
consolePrint("Console opened.");
} else {
consolePrint("Console closed.");
}
}
for(uint32_t i = 0; i < CONSOLE.execBufferCount; i++) {
consolecmdexec_t *exec = &CONSOLE.execBuffer[i];
assertNotNull(exec->cmd, "Command execution has no command.");

View File

@@ -6,5 +6,46 @@
*/
#include "scene.h"
#include "world/overworld.h"
scene_t SCENE_CURRENT = SCENE_INITIAL;
scene_t SCENE_CURRENT;
scenecallback_t SCENE_CALLBACKS[SCENE_COUNT] = {
[SCENE_INITIAL] = {
.init = NULL,
.update = NULL
},
[SCENE_OVERWORLD] = {
.init = overworldInit,
.update = overworldUpdate,
.dispose = NULL
}
};
void sceneInit(void) {
for(uint8_t i = 0; i < SCENE_COUNT; i++) {
if(SCENE_CALLBACKS[i].init) {
SCENE_CALLBACKS[i].init();
}
}
SCENE_CURRENT = SCENE_INITIAL;
}
void sceneSet(const scene_t scene) {
SCENE_CURRENT = scene;
}
void sceneUpdate(void) {
if(SCENE_CALLBACKS[SCENE_CURRENT].update) {
SCENE_CALLBACKS[SCENE_CURRENT].update();
}
}
void sceneDispose(void) {
for(uint8_t i = 0; i < SCENE_COUNT; i++) {
if(SCENE_CALLBACKS[i].dispose) {
SCENE_CALLBACKS[i].dispose();
}
}
}

View File

@@ -6,10 +6,42 @@
*/
#pragma once
#include "dusk.h"
typedef enum {
SCENE_INITIAL,
SCENE_OVERWORLD,
SCENE_COUNT
} scene_t;
typedef struct {
void (*init)(void);
void (*update)(void);
void (*dispose)(void);
} scenecallback_t;
extern scene_t SCENE_CURRENT;
extern scenecallback_t SCENE_CALLBACKS[SCENE_COUNT];
/**
* Initializes the scene module.
*/
void sceneInit(void);
/**
* Sets the current scene.
*
* @param scene The scene to set.
*/
void sceneSet(const scene_t scene);
/**
* Updates the current scene.
*/
void sceneUpdate(void);
/**
* Disposes of the current scene.
*/
void sceneDispose(void);

View File

@@ -20,13 +20,11 @@ void gameInit(void) {
inputInit();
eventInit();
uiTextboxInit();
overworldInit();
SCENE_CURRENT = SCENE_OVERWORLD;
sceneInit();
}
void gameUpdate(void) {
overworldUpdate();
sceneUpdate();
uiTextboxUpdate();
eventUpdate();
@@ -35,5 +33,5 @@ void gameUpdate(void) {
}
void gameDispose(void) {
sceneDispose();
}

View File

@@ -20,20 +20,20 @@ void inputUpdate(void) {
INPUT.current = inputStateGet();
}
bool_t inputIsDown(const uint8_t bind) {
bool_t inputIsDown(const inputbind_t bind) {
assertTrue(bind < INPUT_BIND_COUNT, "Input bind out of bounds");
return (INPUT.current & bind) != 0;
}
bool_t inputWasDown(const uint8_t bind) {
bool_t inputWasDown(const inputbind_t bind) {
assertTrue(bind < INPUT_BIND_COUNT, "Input bind out of bounds");
return (INPUT.previous & bind) != 0;
}
bool_t inputPressed(const uint8_t bind) {
bool_t inputPressed(const inputbind_t bind) {
return inputIsDown(bind) && !inputWasDown(bind);
}
bool_t inputReleased(const uint8_t bind) {
bool_t inputReleased(const inputbind_t bind) {
return !inputIsDown(bind) && inputWasDown(bind);
}

View File

@@ -8,13 +8,18 @@
#pragma once
#include "dusk.h"
typedef uint8_t inputbind_t;
typedef inputbind_t inputstate_t;
#define INPUT_BIND_UP (1 << 0)
#define INPUT_BIND_DOWN (1 << 1)
#define INPUT_BIND_LEFT (1 << 2)
#define INPUT_BIND_RIGHT (1 << 3)
#define INPUT_BIND_ACTION (1 << 4)
#define INPUT_BIND_CANCEL (1 << 5)
#define INPUT_BIND_COUNT (INPUT_BIND_CANCEL + 1)
#define INPUT_BIND_CONSOLE (1 << 6)
#define INPUT_BIND_COUNT (INPUT_BIND_CONSOLE + 1)
typedef struct {
uint8_t current;
@@ -38,7 +43,7 @@ void inputUpdate(void);
*
* @return The current input state as a bitmask.
*/
uint8_t inputStateGet(void);
inputstate_t inputStateGet(void);
/**
* Checks if a specific input bind is currently pressed.
@@ -46,7 +51,7 @@ uint8_t inputStateGet(void);
* @param bind The input bind to check.
* @return true if the bind is currently pressed, false otherwise.
*/
bool_t inputIsDown(const uint8_t bind);
bool_t inputIsDown(const inputbind_t bind);
/**
* Checks if a specific input bind was pressed in the last update.
@@ -54,7 +59,7 @@ bool_t inputIsDown(const uint8_t bind);
* @param bind The input bind to check.
* @return true if the bind was pressed in the last update, false otherwise.
*/
bool_t inputWasDown(const uint8_t bind);
bool_t inputWasDown(const inputbind_t bind);
/**
* Checks if a specific input bind was down this frame but not in the the
@@ -63,7 +68,7 @@ bool_t inputWasDown(const uint8_t bind);
* @param bind The input bind to check.
* @return true if the bind is currently pressed, false otherwise.
*/
bool_t inputPressed(const uint8_t bind);
bool_t inputPressed(const inputbind_t bind);
/**
* Checks if a specific input bind was released this frame.
@@ -71,4 +76,4 @@ bool_t inputPressed(const uint8_t bind);
* @param bind The input bind to check.
* @return true if the bind was released this frame, false otherwise.
*/
bool_t inputReleased(const uint8_t bind);
bool_t inputReleased(const inputbind_t bind);

View File

@@ -10,7 +10,6 @@ target_sources(${DUSK_TARGET_NAME}
renderbackbuffer.c
rendertext.c
renderconsole.c
renderscene.c
)
# Subdirs
@@ -19,3 +18,4 @@ add_subdirectory(framebuffer)
add_subdirectory(mesh)
add_subdirectory(texture)
add_subdirectory(spritebatch)
add_subdirectory(scene)

View File

@@ -11,8 +11,7 @@
#include "rendertext.h"
#include "renderconsole.h"
#include "console/console.h"
#include "dusksdl2input.h"
#include "renderscene.h"
#include "display/scene/renderscene.h"
#include "display/spritebatch/spritebatch.h"
#include "display/camera/camera.h"
@@ -95,10 +94,10 @@ errorret_t renderDraw(void) {
spriteBatchClear();
renderBackBufferBind();
// Draw everything
// Draw the scene
renderSceneDraw();
// UI
// Draw UI
cameraUIPush();
renderConsoleDraw();
spriteBatchFlush();

View File

@@ -10,9 +10,7 @@
#include "rendertext.h"
void renderConsoleDraw(void) {
// if(!CONSOLE.visible) return;
// renderTextDraw(0, 0, "Dusk Console");
if(!CONSOLE.visible) return;
int32_t i = 0;
char_t *line;

View File

@@ -0,0 +1,8 @@
/**
* Copyright (c) 2025 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#pragma once

View File

@@ -1,20 +0,0 @@
/**
* Copyright (c) 2025 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "renderscene.h"
void renderSceneInit(void) {
// Initialize scene-related resources here
}
void renderSceneDraw(void) {
// Draw the current scene here
}
void renderSceneDispose(void) {
// Dispose of scene-related resources here
}

View File

@@ -0,0 +1,13 @@
# Copyright (c) 2025 Dominic Masters
#
# This software is released under the MIT License.
# https://opensource.org/licenses/MIT
# Sources
target_sources(${DUSK_TARGET_NAME}
PRIVATE
renderscene.c
)
# Subdirs
# add_subdirectory(draw)

View File

@@ -0,0 +1,44 @@
/**
* Copyright (c) 2025 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "renderscene.h"
renderscenecallback_t RENDER_SCENE_CALLBACKS[SCENE_COUNT] = {
[SCENE_INITIAL] = {
.init = NULL,
.draw = NULL,
.dispose = NULL
},
[SCENE_OVERWORLD] = {
.init = NULL,
.draw = NULL,
.dispose = NULL
},
};
void renderSceneInit(void) {
for (int i = 0; i < SCENE_COUNT; i++) {
if (RENDER_SCENE_CALLBACKS[i].init) {
RENDER_SCENE_CALLBACKS[i].init();
}
}
}
void renderSceneDraw(void) {
if(RENDER_SCENE_CALLBACKS[SCENE_CURRENT].draw) {
RENDER_SCENE_CALLBACKS[SCENE_CURRENT].draw();
}
}
void renderSceneDispose(void) {
for (int i = 0; i < SCENE_COUNT; i++) {
if (RENDER_SCENE_CALLBACKS[i].dispose) {
RENDER_SCENE_CALLBACKS[i].dispose();
}
}
}

View File

@@ -6,7 +6,15 @@
*/
#pragma once
#include "dusk.h"
#include "display/scene.h"
typedef struct {
void (*init)(void);
void (*draw)(void);
void (*dispose)(void);
} renderscenecallback_t;
extern renderscenecallback_t RENDER_SCENE_CALLBACKS[SCENE_COUNT];
/**
* Initializes the render scene module.

View File

@@ -7,8 +7,8 @@
#include "dusksdl2input.h"
uint8_t inputStateGet() {
uint8_t state = 0;
inputstate_t inputStateGet() {
inputstate_t state = 0;
#if INPUT_SUPPORT_GAMEPAD
// Get gamepad state.

View File

@@ -20,7 +20,7 @@
#if INPUT_SUPPORT_GAMEPAD
typedef struct {
const SDL_GameControllerButton button;
const uint8_t bind;
const inputbind_t bind;
} inputsdlbuttonmap_t;
static const inputsdlbuttonmap_t INPUT_SDL_BUTTON_MAP[] = {
@@ -30,6 +30,7 @@
{ SDL_CONTROLLER_BUTTON_DPAD_RIGHT, INPUT_BIND_RIGHT },
{ SDL_CONTROLLER_BUTTON_A, INPUT_BIND_ACTION },
{ SDL_CONTROLLER_BUTTON_B, INPUT_BIND_CANCEL },
{ SDL_CONTROLLER_BUTTON_MISC1, INPUT_BIND_CONSOLE },
{ 0, 0 }
};
#endif
@@ -37,7 +38,7 @@
#if INPUT_SUPPORT_KEYBOARD
typedef struct {
SDL_Scancode code;
uint8_t bind;
inputbind_t bind;
} inputsdlkbmap_t;
static const inputsdlkbmap_t INPUT_SDL_KEYBOARD_MAP[] = {
@@ -47,6 +48,7 @@
{ SDL_SCANCODE_D, INPUT_BIND_RIGHT },
{ SDL_SCANCODE_SPACE, INPUT_BIND_ACTION },
{ SDL_SCANCODE_ESCAPE, INPUT_BIND_CANCEL },
{ SDL_SCANCODE_GRAVE, INPUT_BIND_CONSOLE },
{ 0, 0 }
};
#endif