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