feat: added rerolling and dice clearing
This commit is contained in:
parent
7adf2d9528
commit
aa10c821f1
4 changed files with 46 additions and 17 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include "renderer/ui_data.h"
|
||||
#include <ceramic/elements.h>
|
||||
#include <ceramic/resources.h>
|
||||
#include <ceramic/style.h>
|
||||
#include <clay/clay.h>
|
||||
#include <cstdint>
|
||||
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
2
vendor/ceramic
vendored
2
vendor/ceramic
vendored
|
|
@ -1 +1 @@
|
|||
Subproject commit 2dcdcd394c5b0c7e4875f965dfe789d3c71ad217
|
||||
Subproject commit 46caec815bba908ecc45ba7fae0bbaeecba692d9
|
||||
Loading…
Add table
Add a link
Reference in a new issue