From a4ebc3cb493e23c319da2202910c7fe3d9e7402d Mon Sep 17 00:00:00 2001 From: jacob Date: Wed, 24 Dec 2025 04:30:59 -0600 Subject: [PATCH] tile panel testing --- src/pp/pp_sim/pp_sim_core.c | 1 - src/pp/pp_vis/pp_vis_core.c | 91 ++++++++++++++++++++++++++++--------- 2 files changed, 70 insertions(+), 22 deletions(-) diff --git a/src/pp/pp_sim/pp_sim_core.c b/src/pp/pp_sim/pp_sim_core.c index 3fe433a0..fdbca134 100644 --- a/src/pp/pp_sim/pp_sim_core.c +++ b/src/pp/pp_sim/pp_sim_core.c @@ -417,7 +417,6 @@ void S_TickForever(WaveLaneCtx *lane) LockTicketMutex(&S.output_back_tm); { S_OutputState *output = &S.output_states[S.output_back_idx]; - ResetArena(output->arena); S_SnapshotNode *snapshot_node = PushStruct(output->arena, S_SnapshotNode); S_Snapshot *snapshot = &snapshot_node->snapshot; SllQueuePush(output->first_snapshot_node, output->last_snapshot_node, snapshot_node); diff --git a/src/pp/pp_vis/pp_vis_core.c b/src/pp/pp_vis/pp_vis_core.c index 4e64e970..0cfe69c6 100644 --- a/src/pp/pp_vis/pp_vis_core.c +++ b/src/pp/pp_vis/pp_vis_core.c @@ -460,9 +460,11 @@ void V_TickForever(WaveLaneCtx *lane) frame->ui_debug = last_frame->ui_debug; frame->show_command_palette = last_frame->show_command_palette; frame->show_console = last_frame->show_console; + frame->look = last_frame->look; + frame->edit_mode = last_frame->edit_mode; + frame->equipped_tile = last_frame->equipped_tile; frame->edit_camera_pos = last_frame->edit_camera_pos; frame->edit_camera_zoom = last_frame->edit_camera_zoom; - frame->look = last_frame->look; frame->tick = V.current_frame_tick; frame->time_ns = TimeNs(); @@ -519,6 +521,7 @@ void V_TickForever(WaveLaneCtx *lane) UI_Push(ChildLayoutAxis, Axis_Y); UI_Push(Width, UI_GROW(1, 0)); UI_Push(Height, UI_GROW(1, 0)); + UI_SetNext(Flags, UI_BoxFlag_Interactable); UI_Key vis_box = UI_KeyF("vis box"); UI_Push(Parent, UI_BuildColumnEx(vis_box)); @@ -587,7 +590,7 @@ void V_TickForever(WaveLaneCtx *lane) V_CmdNode *first_cmd_node = 0; V_CmdNode *last_cmd_node = 0; - b32 has_focus = window_frame.has_focus && UI_MatchKey(ui_frame->hovered_box, UI_NilKey); + b32 has_focus = window_frame.has_focus && (UI_MatchKey(ui_frame->hovered_box, vis_box) || UI_MatchKey(ui_frame->active_box, vis_box)); if (!has_focus) { ZeroStructs(frame->held_buttons, countof(frame->held_buttons)); @@ -743,12 +746,12 @@ void V_TickForever(WaveLaneCtx *lane) if (m1_held) { frame->is_selecting = 1; - frame->equipped_tile = S_TileKind_Floor; + // frame->equipped_tile = S_TileKind_Floor; } else if (m2_held) { frame->is_selecting = 1; - frame->equipped_tile = S_TileKind_Empty; + // frame->equipped_tile = S_TileKind_Empty; } if (frame->is_selecting && last_frame->is_selecting) @@ -962,7 +965,7 @@ void V_TickForever(WaveLaneCtx *lane) V_Window *active_window = 0; { i64 window_idx = 0; - UI_SetNext(Width, UI_SHRINK(0, 1)); + UI_SetNext(Width, UI_GROW(1, 0)); UI_SetNext(Height, UI_SHRINK(0, 1)); UI_PushCP(UI_BuildRow()); for (V_Window *window = panel->first_window; window; window = window->next_in_panel) @@ -977,7 +980,11 @@ void V_TickForever(WaveLaneCtx *lane) Vec4 border_color = VEC4(0.5, 0.5, 0.5, 1); - UI_BuildSpacer(UI_PIX(tab_spacing, 0), Axis_X); + if (window == panel->first_window) + { + UI_BuildSpacer(UI_PIX(tab_spacing, 0), Axis_X); + } + if (window_idx == active_window_idx) { active_window = window; @@ -993,33 +1000,37 @@ void V_TickForever(WaveLaneCtx *lane) bg_color = BlendSrgb(bg_color, hovered_color, rep.hot); bg_color = BlendSrgb(bg_color, pressed_color, rep.active * rep.hovered); + String tab_name = Zi; + if (window->is_tile_window) + { + tab_name = Lit("Tiles"); + } + else + { + tab_name = Lit("Unknown"); + } UI_SetNext(BackgroundColor, bg_color); UI_SetNext(BorderColor, border_color); UI_SetNext(Border, 1); - UI_SetNext(Width, UI_SHRINK(theme.text_padding_x, 1)); - UI_SetNext(Height, UI_SHRINK(theme.text_padding_y, 1)); + UI_SetNext(Width, UI_SHRINK(theme.text_padding_x, 0)); + UI_SetNext(Height, UI_SHRINK(theme.text_padding_y, 0)); UI_SetNext(ChildAlignment, UI_Alignment_Center); - UI_SetNext(Flags, UI_BoxFlag_Interactable); + UI_SetNext(Flags, UI_BoxFlag_DrawText | UI_BoxFlag_Interactable); + UI_SetNext(Text, tab_name); UI_PushCP(UI_BuildRowEx(window->key)); { - if (window->is_tile_window) - { - UI_BuildLabelF("Tiles"); - } - else - { - UI_BuildLabelF("Unknown"); - } } UI_PopCP(UI_TopCP()); + + UI_BuildSpacer(UI_PIX(tab_spacing, 0), Axis_X); } window_idx += 1; } UI_PopCP(UI_TopCP()); } //- Build active window - if (active_window && !active_window->is_viewport_window) + if (active_window) { V_Window *window = active_window; UI_SetNext(BackgroundColor, VEC4(0, 0, 0, 0.5)); @@ -1033,12 +1044,43 @@ void V_TickForever(WaveLaneCtx *lane) // UI_SetNext(Height, UI_SHRINK(0, 1)); UI_PushCP(UI_BuildColumn()); { + UI_Push(Tag, window->key.hash); if (window->is_tile_window) { for (S_TileKind tile_kind = 0; tile_kind < S_TileKind_Count; ++tile_kind) { String name = S_NameFromTileKind(tile_kind); - UI_BuildLabel(name); + UI_Key key = UI_KeyF("Tile %F", FmtString(name)); + UI_Report rep = UI_ReportFromKey(key); + + if (rep.m1_downs) + { + frame->equipped_tile = tile_kind; + } + + Vec4 hovered_color = VEC4(0.5, 0.7, 0, 0.25); + Vec4 bg_color = hovered_color; + bg_color.w *= MaxF32(rep.hot, rep.active); + + Vec4 border_color = VEC4(1, 1, 0, 0.5); + border_color.w *= tile_kind == frame->equipped_tile; + + UI_SetNext(BackgroundColor, bg_color); + UI_SetNext(BorderColor, border_color); + UI_SetNext(Border, 1); + UI_SetNext(Width, UI_GROW(1, 0)); + UI_SetNext(Height, UI_SHRINK(0, 0)); + UI_SetNext(Flags, UI_BoxFlag_Interactable); + UI_PushCP(UI_BuildRowEx(key)); + { + UI_SetNext(ChildAlignment, UI_Alignment_Center); + UI_SetNext(Text, name); + UI_SetNext(Flags, UI_BoxFlag_DrawText); + UI_SetNext(Width, UI_SHRINK(4, 0)); + UI_SetNext(Height, UI_SHRINK(2, 0)); + UI_BuildRow(); + } + UI_PopCP(UI_TopCP()); } } } @@ -1071,10 +1113,10 @@ void V_TickForever(WaveLaneCtx *lane) bg_color = BlendSrgb(bg_color, pressed_color, rep.active * rep.hovered); UI_SetNext(Flags, UI_BoxFlag_Interactable); - UI_SetNext(BackgroundColor, bg_color); + // UI_SetNext(BackgroundColor, bg_color); // UI_SetNext(Border, 2); UI_SetNext(AxisSize, UI_GROW(1, 1), .axis = panel->axis); - UI_SetNext(AxisSize, UI_PIX(3, 1), .axis = !panel->axis); + UI_SetNext(AxisSize, UI_PIX(10, 1), .axis = !panel->axis); UI_BuildBoxEx(divider_key); if (rep.is_hovered || rep.is_m1_held) @@ -1679,6 +1721,13 @@ void V_TickForever(WaveLaneCtx *lane) ////////////////////////////// //- End frame + { + Arena *old_arena = sim_output->arena; + ZeroStruct(sim_output); + sim_output->arena = old_arena; + ResetArena(sim_output->arena); + } + G_CommitCommandList(frame->cl); UI_EndFrame(ui_frame);