pass initial tweak variable on every call
This commit is contained in:
parent
169a74f637
commit
df480e3a44
@ -9,11 +9,11 @@ void BootstrapTweakVars(void)
|
||||
////////////////////////////////////////////////////////////
|
||||
//~ Tweak var operations
|
||||
|
||||
String TweakEx(Arena *arena, String name, TweakDesc desc, String new_value, b32 set_to_new_value)
|
||||
String TweakEx(Arena *arena, TweakVar desc, b32 update_existing)
|
||||
{
|
||||
String result = Zi;
|
||||
Arena *perm = PermArena();
|
||||
u64 hash = MixU64(HashFnv64(Fnv64Basis, name));
|
||||
u64 hash = MixU64(HashFnv64(Fnv64Basis, desc.name));
|
||||
TweakVarEntryBin *bin = &Base.tweak.entry_bins[hash % countof(Base.tweak.entry_bins)];
|
||||
LockTicketMutex(&Base.tweak.tm);
|
||||
{
|
||||
@ -32,25 +32,28 @@ String TweakEx(Arena *arena, String name, TweakDesc desc, String new_value, b32
|
||||
e->hash = hash;
|
||||
{
|
||||
// FIXME: Not perm
|
||||
String store_value = PushString(perm, new_value);
|
||||
|
||||
String store_name = PushString(perm, desc.name);
|
||||
String store_category = PushString(perm, desc.category);
|
||||
String store_value = PushString(perm, desc.value);
|
||||
String store_initial = PushString(perm, desc.initial);
|
||||
TweakVar *v = &e->v;
|
||||
v->name = PushString(perm, name);
|
||||
v->desc = desc;
|
||||
*v = desc;
|
||||
v->name = store_name;
|
||||
v->category = store_category;
|
||||
v->value = store_value;
|
||||
v->default_value = store_value;
|
||||
v->initial = store_initial;
|
||||
}
|
||||
PushAlign(perm, CachelineSize);
|
||||
SllQueuePushN(bin->first, bin->last, e, next_in_bin);
|
||||
SllQueuePushN(Base.tweak.first_entry, Base.tweak.last_entry, e, next_in_list);
|
||||
Base.tweak.entries_count += 1;
|
||||
}
|
||||
else if (set_to_new_value)
|
||||
else if (update_existing)
|
||||
{
|
||||
if (!MatchString(e->v.value, new_value))
|
||||
if (!MatchString(e->v.value, desc.value))
|
||||
{
|
||||
// FIXME: Not perm
|
||||
String store_value = PushString(perm, new_value);
|
||||
String store_value = PushString(perm, desc.value);
|
||||
|
||||
// FIXME: free old value
|
||||
e->v.value = store_value;
|
||||
@ -76,8 +79,10 @@ TweakVarArray GetAllTweakVars(Arena *arena)
|
||||
TweakVar *src = &e->v;
|
||||
TweakVar *dst = &result.v[var_idx];
|
||||
*dst = *src;
|
||||
dst->name = PushString(arena, src->name);
|
||||
dst->category = PushString(arena, src->category);
|
||||
dst->value = PushString(arena, src->value);
|
||||
dst->default_value = PushString(arena, src->default_value);
|
||||
dst->initial = PushString(arena, src->initial);
|
||||
var_idx += 1;
|
||||
}
|
||||
}
|
||||
@ -89,29 +94,47 @@ TweakVarArray GetAllTweakVars(Arena *arena)
|
||||
////////////////////////////////////////////////////////////
|
||||
//~ Tweak utils
|
||||
|
||||
b32 TweakBool_(String name, b32 default_value)
|
||||
b32 TweakBool_(String name, b32 initial, TweakBoolDesc desc)
|
||||
{
|
||||
b32 result = 0;
|
||||
TempArena scratch = BeginScratchNoConflict();
|
||||
{
|
||||
TweakDesc desc = Zi;
|
||||
desc.kind = TweakKind_Bool;
|
||||
String default_value_str = StringFromBool(scratch.arena, default_value);
|
||||
String tweak_str = TweakEx(scratch.arena, name, desc, default_value_str, 0);
|
||||
String initial_str = StringFromBool(scratch.arena, initial);
|
||||
TweakVar var = Zi;
|
||||
{
|
||||
var.flags = desc.flags;
|
||||
var.kind = TweakKind_Bool;
|
||||
var.name = name;
|
||||
var.category = desc.category;
|
||||
var.value = initial_str;
|
||||
var.initial = initial_str;
|
||||
}
|
||||
String tweak_str = TweakEx(scratch.arena, var, 0);
|
||||
result = BoolFromString(tweak_str);
|
||||
}
|
||||
EndScratch(scratch);
|
||||
return result;
|
||||
}
|
||||
|
||||
f64 TweakFloat_(String name, f64 default_value, TweakDesc desc)
|
||||
f64 TweakFloat_(String name, f64 initial, TweakFloatDesc desc)
|
||||
{
|
||||
f64 result = 0;
|
||||
desc.kind = TweakKind_Float;
|
||||
TempArena scratch = BeginScratchNoConflict();
|
||||
{
|
||||
String default_value_str = StringFromFloat(scratch.arena, default_value, desc.precision);
|
||||
String tweak_str = TweakEx(scratch.arena, name, desc, default_value_str, 0);
|
||||
String initial_str = StringFromFloat(scratch.arena, initial, desc.precision);
|
||||
TweakVar var = Zi;
|
||||
{
|
||||
var.flags = desc.flags;
|
||||
var.kind = TweakKind_Float;
|
||||
var.name = name;
|
||||
var.category = desc.category;
|
||||
var.value = initial_str;
|
||||
var.initial = initial_str;
|
||||
var.range.min = desc.min;
|
||||
var.range.max = desc.max;
|
||||
var.precision = desc.precision;
|
||||
}
|
||||
String tweak_str = TweakEx(scratch.arena, var, 0);
|
||||
result = FloatFromString(tweak_str);
|
||||
}
|
||||
EndScratch(scratch);
|
||||
|
||||
@ -7,19 +7,24 @@ Enum(TweakKind)
|
||||
TweakKind_Float,
|
||||
};
|
||||
|
||||
Struct(TweakDesc)
|
||||
Enum(TweakFlag)
|
||||
{
|
||||
TweakKind kind;
|
||||
RngF64 range;
|
||||
i32 precision;
|
||||
TweakFlag_None = 0,
|
||||
TweakFlag_Hidden = (1 << 0),
|
||||
};
|
||||
|
||||
Struct(TweakVar)
|
||||
{
|
||||
TweakKind kind;
|
||||
TweakFlag flags;
|
||||
String name;
|
||||
TweakDesc desc;
|
||||
String category;
|
||||
|
||||
String value;
|
||||
String default_value;
|
||||
String initial;
|
||||
|
||||
RngF64 range;
|
||||
i32 precision;
|
||||
};
|
||||
|
||||
Struct(TweakVarArray)
|
||||
@ -28,6 +33,24 @@ Struct(TweakVarArray)
|
||||
TweakVar *v;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
//~ Utility types
|
||||
|
||||
Struct(TweakBoolDesc)
|
||||
{
|
||||
TweakFlag flags;
|
||||
String category;
|
||||
};
|
||||
|
||||
Struct(TweakFloatDesc)
|
||||
{
|
||||
TweakFlag flags;
|
||||
String category;
|
||||
f64 min;
|
||||
f64 max;
|
||||
i32 precision;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
//~ Cache types
|
||||
|
||||
@ -67,19 +90,23 @@ void BootstrapTweakVars(void);
|
||||
////////////////////////////////////////////////////////////
|
||||
//~ Tweak var operations
|
||||
|
||||
String TweakEx(Arena *arena, String name, TweakDesc desc, String new_value, b32 set_to_new_value);
|
||||
String TweakEx(Arena *arena, TweakVar desc, b32 update_existing);
|
||||
TweakVarArray GetAllTweakVars(Arena *arena);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
//~ Tweak utils
|
||||
|
||||
b32 TweakBool_(String name, b32 default_value);
|
||||
#define TweakBool(_name, _default_value) TweakBool_(Lit(_name), (_default_value))
|
||||
b32 TweakBool_(String name, b32 initial, TweakBoolDesc desc);
|
||||
#define TweakBool(_name, _initial) TweakBool_(Lit(_name), (_initial), (TweakBoolDesc) { \
|
||||
.category = Lit("Debug"), \
|
||||
__VA_ARGS__ \
|
||||
}) \
|
||||
|
||||
f64 TweakFloat_(String name, f64 default_value, TweakDesc desc);
|
||||
#define TweakFloat(_name, _default_value, _min, _max, ...) TweakFloat_(Lit(_name), (_default_value), (TweakDesc) { \
|
||||
.range.min = (_min), \
|
||||
.range.max = (_max), \
|
||||
f64 TweakFloat_(String name, f64 initial, TweakFloatDesc desc);
|
||||
#define TweakFloat(_name, _initial, _min, _max, ...) TweakFloat_(Lit(_name), (_initial), (TweakFloatDesc) { \
|
||||
.category = Lit("Debug"), \
|
||||
.min = (_min), \
|
||||
.max = (_max), \
|
||||
.precision = 6, \
|
||||
__VA_ARGS__ \
|
||||
})
|
||||
|
||||
@ -1514,7 +1514,6 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
if (item->flags & PaletteItemFlag_IsTweakVar)
|
||||
{
|
||||
TweakVar tweak_var = item->tweak_var;
|
||||
TweakDesc tweak_desc = tweak_var.desc;
|
||||
String old_tweak_str = tweak_var.value;
|
||||
String new_tweak_str = tweak_var.value;
|
||||
|
||||
@ -1523,7 +1522,7 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
UI_BuildLabel(new_tweak_str);
|
||||
|
||||
// Reset button
|
||||
if (!MatchString(new_tweak_str, tweak_var.default_value))
|
||||
if (!MatchString(new_tweak_str, tweak_var.initial))
|
||||
{
|
||||
UI_BuildSpacer(UI_PIX(spacing * 0.5, 1), Axis_X);
|
||||
UI_Key reset_key = UI_KeyF("reset");
|
||||
@ -1531,7 +1530,7 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
|
||||
if (reset_rep.m1.presses > 0)
|
||||
{
|
||||
new_tweak_str = tweak_var.default_value;
|
||||
new_tweak_str = tweak_var.initial;
|
||||
}
|
||||
|
||||
Vec4 reset_bg_color = Zi;
|
||||
@ -1553,7 +1552,7 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
UI_PopCP(UI_TopCP());
|
||||
}
|
||||
|
||||
switch (tweak_desc.kind)
|
||||
switch (tweak_var.kind)
|
||||
{
|
||||
// Boolean tweak
|
||||
case TweakKind_Bool:
|
||||
@ -1603,8 +1602,8 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
Vec2 marker_dims = DimsFromRng2(marker_reps.draw.screen_rect);
|
||||
Vec2 half_marker_dims = MulVec2(marker_dims, 0.5);
|
||||
|
||||
f64 range_min = tweak_desc.range.min;
|
||||
f64 range_max = tweak_desc.range.max;
|
||||
f64 range_min = tweak_var.range.min;
|
||||
f64 range_max = tweak_var.range.max;
|
||||
if (range_max <= range_min)
|
||||
{
|
||||
range_max = range_min + 1;
|
||||
@ -1614,8 +1613,8 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
{
|
||||
if (slider_reps.draw.m1.held && (frame->ui_cursor.x != last_frame->ui_cursor.x))
|
||||
{
|
||||
f64 initial_marker_width = DimsFromRng2(marker_reps.drag.screen_rect).x;
|
||||
f64 initial_slider_pos = slider_reps.drag.screen_rect.p0.x;
|
||||
f64 initial_marker_width = DimsFromRng2(marker_reps.drag.screen_rect).x;
|
||||
f64 initial_slider_width = DimsFromRng2(slider_reps.drag.screen_rect).x - initial_marker_width;
|
||||
f64 initial_cursor = ui_frame->drag_cursor_pos.x;
|
||||
f64 initial_ratio = slider_reps.drag.misc;
|
||||
@ -1626,7 +1625,7 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
|
||||
tweak_float = LerpF64(range_min, range_max, virtual_cursor_ratio);
|
||||
tweak_float = ClampF64(tweak_float, range_min, range_max);
|
||||
new_tweak_str = StringFromFloat(frame->arena, tweak_float, tweak_desc.precision);
|
||||
new_tweak_str = StringFromFloat(frame->arena, tweak_float, tweak_var.precision);
|
||||
}
|
||||
if (slider_reps.draw.is_hot)
|
||||
{
|
||||
@ -1691,7 +1690,9 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
|
||||
if (!MatchString(old_tweak_str, new_tweak_str))
|
||||
{
|
||||
TweakEx(frame->arena, tweak_var.name, tweak_desc, new_tweak_str, 1);
|
||||
TweakVar new_tweak_var = tweak_var;
|
||||
new_tweak_var.value = new_tweak_str;
|
||||
TweakEx(frame->arena, new_tweak_var, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user