feat: started resource management & dice
This commit is contained in:
parent
3a5b55cc06
commit
451c71254c
|
|
@ -1,14 +1,21 @@
|
||||||
#include "application.h"
|
#include "application.h"
|
||||||
#include "ceramic/style.h"
|
#include "dice_gui.h"
|
||||||
#include "ceramic/elements.h"
|
#include <ceramic/style.h>
|
||||||
|
#include <ceramic/elements.h>
|
||||||
#include <SDL3/SDL.h>
|
#include <SDL3/SDL.h>
|
||||||
#include <clay/clay.h>
|
#include <clay/clay.h>
|
||||||
|
|
||||||
|
constexpr Clay_LayoutConfig centerContainer {
|
||||||
|
.sizing = {CLAY_SIZING_GROW(), CLAY_SIZING_GROW()},
|
||||||
|
.childAlignment = {CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER},
|
||||||
|
};
|
||||||
|
|
||||||
namespace application {
|
namespace application {
|
||||||
Clay_RenderCommandArray RenderApplication() {
|
Clay_RenderCommandArray RenderApplication() {
|
||||||
Clay_BeginLayout();
|
Clay_BeginLayout();
|
||||||
CLAY(CLAY_ID("OuterContainer"), cera::Window()) {
|
CLAY(CLAY_ID("Window"), cera::Window()) {
|
||||||
CLAY_AUTO_ID(cera::LeftPanelContainer()) {
|
CLAY(CLAY_ID("Content"), {.layout = centerContainer}) {
|
||||||
|
DiceContainer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Clay_EndLayout();
|
return Clay_EndLayout();
|
||||||
|
|
|
||||||
36
src/dice_data.cpp
Normal file
36
src/dice_data.cpp
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
#include "dice_data.h"
|
||||||
|
#include <cstddef>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
namespace active_dice {
|
||||||
|
constexpr size_t maxActiveDice{16};
|
||||||
|
Die activeDice[maxActiveDice];
|
||||||
|
size_t numActiveDice{0};
|
||||||
|
|
||||||
|
void Add(Die die) {
|
||||||
|
if(numActiveDice < maxActiveDice) {
|
||||||
|
activeDice[numActiveDice] = die;
|
||||||
|
++numActiveDice;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Remove(size_t at) {
|
||||||
|
if(at >= numActiveDice) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(at < numActiveDice - 1) {
|
||||||
|
std::memmove(activeDice + at, activeDice + at + 1, numActiveDice - at);
|
||||||
|
}
|
||||||
|
--numActiveDice;
|
||||||
|
}
|
||||||
|
|
||||||
|
Die Get(size_t at) {
|
||||||
|
if(at < numActiveDice) {
|
||||||
|
return activeDice[at];
|
||||||
|
} else return D_COIN;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t Count() {
|
||||||
|
return numActiveDice;
|
||||||
|
}
|
||||||
|
}
|
||||||
46
src/dice_data.h
Normal file
46
src/dice_data.h
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
|
enum Die {
|
||||||
|
D_COIN = 2,
|
||||||
|
D4 = 4,
|
||||||
|
D6 = 6,
|
||||||
|
D8 = 8,
|
||||||
|
D10 = 10,
|
||||||
|
D12 = 12,
|
||||||
|
D20 = 20,
|
||||||
|
D100 = 100,
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr Die diceIndex[]{D_COIN, D4, D6, D8, D10, D12, D20, D100};
|
||||||
|
|
||||||
|
static inline size_t DieToIndex(Die die) {
|
||||||
|
switch(die) {
|
||||||
|
default:
|
||||||
|
case D_COIN:
|
||||||
|
return 0;
|
||||||
|
case D4:
|
||||||
|
return 1;
|
||||||
|
case D6:
|
||||||
|
return 2;
|
||||||
|
case D8:
|
||||||
|
return 3;
|
||||||
|
case D10:
|
||||||
|
return 4;
|
||||||
|
case D12:
|
||||||
|
return 5;
|
||||||
|
case D20:
|
||||||
|
return 6;
|
||||||
|
case D100:
|
||||||
|
return 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace active_dice {
|
||||||
|
void Add(Die die);
|
||||||
|
void Remove(size_t at);
|
||||||
|
Die Get(size_t at);
|
||||||
|
size_t Count();
|
||||||
|
} // namespace active_dice
|
||||||
44
src/dice_gui.cpp
Normal file
44
src/dice_gui.cpp
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
#include "dice_gui.h"
|
||||||
|
#include "dice_data.h"
|
||||||
|
#include <ceramic/elements.h>
|
||||||
|
#include <ceramic/resources.h>
|
||||||
|
#include <clay/clay.h>
|
||||||
|
|
||||||
|
extern SDL_Renderer *renderer;
|
||||||
|
|
||||||
|
SDL_Texture *dieImages[8];
|
||||||
|
|
||||||
|
static void LoadDieImagesIfNeeded() {
|
||||||
|
static bool diceImagesLoaded{false};
|
||||||
|
if(!diceImagesLoaded) {
|
||||||
|
diceImagesLoaded = true;
|
||||||
|
dieImages[0] = cera::LoadAndStoreTexture(renderer, "assets/icons/d2.svg");
|
||||||
|
dieImages[1] = cera::LoadAndStoreTexture(renderer, "assets/icons/d4.svg");
|
||||||
|
dieImages[2] = cera::LoadAndStoreTexture(renderer, "assets/icons/d6.svg");
|
||||||
|
dieImages[3] = cera::LoadAndStoreTexture(renderer, "assets/icons/d8.svg");
|
||||||
|
dieImages[4] = cera::LoadAndStoreTexture(renderer, "assets/icons/d10.svg");
|
||||||
|
dieImages[5] = cera::LoadAndStoreTexture(renderer, "assets/icons/d12.svg");
|
||||||
|
dieImages[6] = cera::LoadAndStoreTexture(renderer, "assets/icons/d20.svg");
|
||||||
|
dieImages[7] = cera::LoadAndStoreTexture(renderer, "assets/icons/d100.svg");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void OnDieButtonHovered(Clay_ElementId element, Clay_PointerData pointer, intptr_t data) {
|
||||||
|
if(pointer.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) {
|
||||||
|
active_dice::Add((Die)data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DiceContainer() {
|
||||||
|
LoadDieImagesIfNeeded();
|
||||||
|
CLAY(CLAY_ID("DiceSelector"), {}) {
|
||||||
|
cera::ImageTextButton(dieImages[0], CLAY_STRING("C"), {CLAY_SIZING_FIXED(100), CLAY_SIZING_FIXED(100)}, &OnDieButtonHovered, (intptr_t)D_COIN);
|
||||||
|
cera::ImageTextButton(dieImages[1], CLAY_STRING("4"), {CLAY_SIZING_FIXED(100), CLAY_SIZING_FIXED(100)}, &OnDieButtonHovered, (intptr_t)D4);
|
||||||
|
cera::ImageTextButton(dieImages[2], CLAY_STRING("6"), {CLAY_SIZING_FIXED(100), CLAY_SIZING_FIXED(100)}, &OnDieButtonHovered, (intptr_t)D6);
|
||||||
|
cera::ImageTextButton(dieImages[3], CLAY_STRING("8"), {CLAY_SIZING_FIXED(100), CLAY_SIZING_FIXED(100)}, &OnDieButtonHovered, (intptr_t)D8);
|
||||||
|
cera::ImageTextButton(dieImages[4], CLAY_STRING("10"), {CLAY_SIZING_FIXED(100), CLAY_SIZING_FIXED(100)}, &OnDieButtonHovered, (intptr_t)D10);
|
||||||
|
cera::ImageTextButton(dieImages[5], CLAY_STRING("12"), {CLAY_SIZING_FIXED(100), CLAY_SIZING_FIXED(100)}, &OnDieButtonHovered, (intptr_t)D12);
|
||||||
|
cera::ImageTextButton(dieImages[6], CLAY_STRING("20"), {CLAY_SIZING_FIXED(100), CLAY_SIZING_FIXED(100)}, &OnDieButtonHovered, (intptr_t)D20);
|
||||||
|
cera::ImageTextButton(dieImages[7], CLAY_STRING("100"), {CLAY_SIZING_FIXED(100), CLAY_SIZING_FIXED(100)}, &OnDieButtonHovered, (intptr_t)D100);
|
||||||
|
}
|
||||||
|
}
|
||||||
3
src/dice_gui.h
Normal file
3
src/dice_gui.h
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
void DiceContainer();
|
||||||
|
|
@ -137,6 +137,7 @@ int main(int argc, char *argv[]) {
|
||||||
SDL_RenderPresent(renderer);
|
SDL_RenderPresent(renderer);
|
||||||
SDL_Delay(10);
|
SDL_Delay(10);
|
||||||
}
|
}
|
||||||
|
cera::CleanupResources();
|
||||||
SDL_DestroyRenderer(renderer);
|
SDL_DestroyRenderer(renderer);
|
||||||
SDL_DestroyWindow(window);
|
SDL_DestroyWindow(window);
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue