diff --git a/src/dice_data.cpp b/src/dice_data.cpp index 2c014c0..a9aa3c7 100644 --- a/src/dice_data.cpp +++ b/src/dice_data.cpp @@ -31,6 +31,10 @@ void Remove(size_t at) { --numActiveDice; } +void Clear() { + numActiveDice = 0; +} + Die Get(size_t at) { if(at < numActiveDice) { return activeDice[at].type; diff --git a/src/dice_data.h b/src/dice_data.h index b26f6d7..31750e0 100644 --- a/src/dice_data.h +++ b/src/dice_data.h @@ -42,6 +42,7 @@ static inline size_t DieToIndex(Die die) { namespace active_dice { void Add(Die die); void Remove(size_t at); +void Clear(); Die Get(size_t at); uint8_t GetValue(size_t at); size_t Count(); diff --git a/src/dice_gui.cpp b/src/dice_gui.cpp index da7edcb..50dec1e 100644 --- a/src/dice_gui.cpp +++ b/src/dice_gui.cpp @@ -5,6 +5,7 @@ #include "renderer/ui_data.h" #include #include +#include #include #include @@ -60,22 +61,25 @@ static void LoadDieImagesIfNeeded() { } -static void DieButton(Die die, int32_t showNumber, Clay_Sizing size, cera::OnHoveredFn onHover, intptr_t data) { +static void DieButton(Die die, int32_t showNumber, Clay_Sizing size, uint16_t fontSize, cera::OnHoveredFn onHover, intptr_t data) { size_t const index{DieToIndex(die)}; char resultStr[6]=""; int32_t len = SDL_snprintf(resultStr, 6, "%d", showNumber); Clay_String string = UiData_StoreString(resultStr, len); CLAY_AUTO_ID({ .layout = { - .sizing = {CLAY_SIZING_FIXED(100), CLAY_SIZING_FIXED(100)}, + .sizing = size, .childAlignment = {CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER} }, .image = {.imageData = Clay_Hovered() ? hoveredDieImages[index] : dieImages[index]} }) { Clay_OnHover(onHover, data); - cera::Header(string, 2, { - .textColor = cera::color::white - }); + CLAY_TEXT(string, CLAY_TEXT_CONFIG({ + .textColor = cera::theme->textColor, + .fontId = cera::FONT_BOLD, + .fontSize = fontSize, + .textAlignment = CLAY_TEXT_ALIGN_CENTER, + })); } } @@ -91,10 +95,23 @@ static void ActiveDieButtonHovered(Clay_ElementId element, Clay_PointerData poin } } +static void ClearDiceButtonHovered(Clay_ElementId element, Clay_PointerData pointer, intptr_t data) { + if(pointer.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) { + active_dice::Clear(); + } +} + +static void RollDiceButtonHovered(Clay_ElementId element, Clay_PointerData pointer, intptr_t data) { + if(pointer.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) { + active_dice::ReRoll(); + } +} + void DiceContainer() { LoadDieImagesIfNeeded(); Clay_Sizing const addDieButtonSize{CLAY_SIZING_FIXED(100), CLAY_SIZING_FIXED(100)}; + uint16_t const addDieButtonTextSize{30}; CLAY(CLAY_ID("DiceSelector"), cera::PanelContainer({ .layout={ .sizing={CLAY_SIZING_FIT(), CLAY_SIZING_GROW()}, @@ -112,26 +129,29 @@ void DiceContainer() { .childOffset = Clay_GetScrollOffset(), } }) { - DieButton(D4, D4, addDieButtonSize, &AddDieButtonHovered, (intptr_t)D4); - DieButton(D6, D6, addDieButtonSize, &AddDieButtonHovered, (intptr_t)D6); - DieButton(D8, D8, addDieButtonSize, &AddDieButtonHovered, (intptr_t)D8); - DieButton(D10, D10, addDieButtonSize, &AddDieButtonHovered, (intptr_t)D10); - DieButton(D12, D12, addDieButtonSize, &AddDieButtonHovered, (intptr_t)D12); - DieButton(D20, D20, addDieButtonSize, &AddDieButtonHovered, (intptr_t)D20); - DieButton(D100, D100, addDieButtonSize, &AddDieButtonHovered, (intptr_t)D100); - DieButton(D_COIN, D_COIN, addDieButtonSize, &AddDieButtonHovered, (intptr_t)D_COIN); + DieButton(D4, D4, addDieButtonSize, addDieButtonTextSize, &AddDieButtonHovered, (intptr_t)D4); + DieButton(D6, D6, addDieButtonSize, addDieButtonTextSize, &AddDieButtonHovered, (intptr_t)D6); + DieButton(D8, D8, addDieButtonSize, addDieButtonTextSize, &AddDieButtonHovered, (intptr_t)D8); + DieButton(D10, D10, addDieButtonSize, addDieButtonTextSize, &AddDieButtonHovered, (intptr_t)D10); + DieButton(D12, D12, addDieButtonSize, addDieButtonTextSize, &AddDieButtonHovered, (intptr_t)D12); + DieButton(D20, D20, addDieButtonSize, addDieButtonTextSize, &AddDieButtonHovered, (intptr_t)D20); + DieButton(D100, D100, addDieButtonSize, addDieButtonTextSize, &AddDieButtonHovered, (intptr_t)D100); + DieButton(D_COIN, D_COIN, addDieButtonSize, addDieButtonTextSize, &AddDieButtonHovered, (intptr_t)D_COIN); } } Clay_Sizing const activeDieButtonSize{CLAY_SIZING_FIXED(200), CLAY_SIZING_FIXED(200)}; + uint16_t const activeDieButtonTextSize{60}; CLAY(CLAY_ID("DiceActive"), cera::PanelContainer({ .layout={ .sizing={CLAY_SIZING_GROW(), CLAY_SIZING_GROW()}, - .childAlignment={CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER} + .childAlignment={CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER}, + .layoutDirection = CLAY_TOP_TO_BOTTOM, } })) { CLAY_AUTO_ID({ .layout = { - .sizing = {CLAY_SIZING_FIT(), CLAY_SIZING_FIT()}, + .sizing = {CLAY_SIZING_FIT(), CLAY_SIZING_FIXED(200)}, + .childAlignment = {CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER} }, .clip = { .horizontal = true, @@ -140,8 +160,12 @@ void DiceContainer() { }, }) { for(size_t i{0}; i < active_dice::Count(); ++i) { - DieButton(active_dice::Get(i), active_dice::GetValue(i), activeDieButtonSize, &ActiveDieButtonHovered, (intptr_t)i); + DieButton(active_dice::Get(i), active_dice::GetValue(i), activeDieButtonSize, activeDieButtonTextSize, &ActiveDieButtonHovered, (intptr_t)i); } } + CLAY_AUTO_ID({.layout={.childGap=16}}) { + cera::TextButton(CLAY_STRING("Clear"), cera::theme->warningButton, &ClearDiceButtonHovered, 0); + cera::TextButton(CLAY_STRING("Reroll"), cera::theme->actionButton, &RollDiceButtonHovered, 0); + } } } diff --git a/vendor/ceramic b/vendor/ceramic index 2dcdcd3..46caec8 160000 --- a/vendor/ceramic +++ b/vendor/ceramic @@ -1 +1 @@ -Subproject commit 2dcdcd394c5b0c7e4875f965dfe789d3c71ad217 +Subproject commit 46caec815bba908ecc45ba7fae0bbaeecba692d9