Decision & Baseline Lock PASS 2026-09-06
เก็บ evidence, approve visual direction, ระบุ TBD blockers และ freeze migration targets.
Exit complete: asset backup/redirect strategy และ acceptance matrix reviewed; known Quick Slot drag gap routed to G3.แผน implement แบบละเอียดสำหรับเปลี่ยน UI ปัจจุบันไปสู่ Hybrid CommonUI + UMG ตาม FEAT-HUD-UI โดยแยก verified baseline, target architecture, C++ work, user-only Widget Blueprint work, dependency gates, migration, testing และหลักฐานที่ต้องมีเพื่อผ่านแต่ละ milestone
UI ปัจจุบันเป็น UMG widgets ที่ถูกเปิดโดย GameInstance subsystems แยกกันและยังไม่มี screen stack กลาง ขณะที่ target design ต้องรองรับ menu navigation, modal priority, controller focus, dynamic glyphs, multiplayer input blocking, SP pause, localization และทุกระบบที่ยังพัฒนาไม่ครบ แผนนี้จึงสร้าง foundation ก่อน แล้วค่อยย้าย screen แบบ vertical slices โดยไม่ตัดระบบเดิมพร้อมกันทั้งหมด
| Area | Verified current state | Target / consequence |
|---|---|---|
| Dependencies | UMG, Slate, SlateCore are in Lambeer.Build.cs. CommonUI is not enabled in Lambeer.uproject. | Add CommonUI/CommonInput dependencies and viewport routing before any activatable screen. |
| Widget spawning | ULambeerHUDSubsystem, ULambeerInventorySubsystem, and ULambeerCharacterCreationSubsystem add widgets directly to viewport and set input mode themselves. | One LocalPlayer UI manager owns root/layers/input config. Legacy subsystems become compatibility facades during migration. |
| HUD | WBP_HUD, WBP_StatusBars, WBP_Compass exist. HUD and compass use NativeTick. | Passive HUD remains UMG but updates from delegates/snapshots. Add minimap, hands, quick slots, status list, reticle and overlays. |
| Hit feedback | ULambeerHUDWidget contains optional HitMarker and SetHitMarkerVisible. | Remove API and Widget binding; project requirement forbids hit/headshot/kill markers. |
| Survival | ULambeerAttributeSet and ULambeerStatusBarsWidget expose Health, Stamina, Hunger, Thirst, Temperature. | Add gameplay-owned Energy, Sleep, Immunity before live binding; UI shell may preview layout but must not synthesize authoritative values. |
| Inventory | WBP_Inventory, slot, container assets and C++ bases exist; click-pair and drag assignment are implemented. Quick-slot constant is 8. | Migrate screen to CommonUI activation, 10 slots, context commands, search/sort, side-by-side world container and full controller focus. |
| Handedness | Two replicated hand stacks exist, but ULambeerItemDefinition has no handedness field. | Add a data-driven handedness enum/field and atomic two-hand occupancy validation on the server. |
| Interaction | UInteractionComponent emits actor + prompt text and creates a centered prompt host. | Emit structured FInteractionPromptState, project near the target, clamp to safe zone and expose hold/denied/alternatives. |
| Character creation | C++ subsystem/widget base and config path exist; Content/Lambeer/UI/Menus/WBP_CharacterCreation.uasset was not found. | User creates the Blueprint asset after screen-stack foundation; frontend routing must handle missing class explicitly until then. |
| Glyphs | Xbox and PlayStation imported assets exist under Content/Lambeer/UI/ControllerGlyphs/. | Map verified assets through CommonInput controller data; do not rename until package license/source verification. |
| Persistence | USaveSubsystem exists with an in-memory default backend seam. | UI calls session/save services; it never invents durable state. Local-world index and per-server character state require backend contracts. |
| Tests | No UI automation/spec files were found; only a gameplay test loot crate class exists. | Add headless C++ contract tests where possible; Widget/PIE validation remains user-run. |
TBD-HUD-UI-001, TBD-HUD-UI-002, and TBD-HUD-UI-008, approved the migration/rollback strategy, and supplied the interaction/input baseline below. The inability to drag an item into a Quick Slot is a captured legacy gap assigned to G3, not a G0 blocker.| Task | Verified evidence (2026-09-06) | Required close action | State |
|---|---|---|---|
UI-PLN-001 | [CONFIRMED] Back Weapon 1–2 exclusively reserve numbered slots 1–2. Other items cannot be bound to those two slots; no displaced manual binding or restore behavior exists. | Implementation tests must reject non-Back-Weapon assignment to reserved indices 0–1 and verify Back Weapon removal leaves the reserved slot empty. | Complete |
UI-PLN-002 | [CONFIRMED] Owner approved the documented palette, layouts, and exactly 64 SVG solid/silhouette icons on 2026-09-06. | Use the approved sources for G2 import; retain source/license provenance before shipping. | Complete |
UI-PLN-003 | [CONFIRMED] Use Google Sans from RawResource/Fonts/Google_Sans/. Sixteen TTF files were found and each contains 87 Thai-block codepoints including the basic Thai set. Font metadata and the official source repository identify SIL Open Font License 1.1 without Reserved Font Names; OFL.txt is retained beside the fonts. | Target /Game/Lambeer/UI/Common/Fonts/FF_UI_Primary; Regular is the default face with Medium/SemiBold/Bold variants. Google Sans supplies English and Thai glyphs; verify shaping, line breaks and tabular figures after user import. | Complete |
UI-PLN-004 | Unreal MCP asset/config/reference audit completed. Development Game target compiled and linked successfully; log: Saved/Baselines/HUDUI_G0_GameBuild.log. The initial Editor build was blocked at final DLL link by the running Editor (LNK1104); after closing the lock, the owner reported a successful clean Editor build on 2026-09-06 and the rebuilt Binaries/Win64/UnrealEditor-Lambeer.dll was verified on disk. | Baseline compile evidence is complete. The existing warning that HairStrandsCore is used without declaring the HairStrands plugin remains recorded for G1/project cleanup. | Complete |
UI-PLN-005 | User supplied legacy HUD, inventory, and interaction-prompt screenshots. The owner reported that Wood can be dragged among Hand 1, Hand 2, and Pocket, while dragging Wood into a Quick Slot does not work. Unreal MCP logs corroborate two user-run L_Dev_Sandbox PIE sessions using a dedicated-server world plus two clients; all three worlds tore down after each session. No agent-run PIE claim is made. | Baseline is complete for migration comparison. Preserve the Quick Slot drag failure as a known legacy gap and verify its correction under UI-HUD-010 in G3; controller, denied/out-of-range, and hold behavior remain unverified rather than implicitly passed. | Complete |
| Asset | Hard package dependencies | Registry referencers | Migration disposition |
|---|---|---|---|
/Game/Lambeer/UI/Common/WBP_InteractionPrompt | SlateCore, UMG, UMGEditor | /Game/Lambeer/Characters/Player/Blueprints/BP_PlayerCharacter | Preserve path until the player Blueprint is manually migrated and verified. |
/Game/Lambeer/UI/HUD/WBP_HUD | WBP_Compass, WBP_StatusBars, Lambeer/UMG modules | No registry referencer; loaded by config and C++ fallback soft class path. | Preserve as compatibility HUD until the new root passes cook and user PIE. |
/Game/Lambeer/UI/HUD/WBP_Compass | Lambeer/UMG modules | WBP_HUD | Migrate behind the new HUD adapter before any move/rename. |
/Game/Lambeer/UI/HUD/WBP_StatusBars | Lambeer/UMG modules | WBP_HUD | Migrate behind event-driven state before any move/rename. |
/Game/Lambeer/UI/Inventory/WBP_Inventory | WBP_InventorySlot, Lambeer/UMG modules | No registry referencer; loaded by config and C++ fallback soft class path. | Preserve as compatibility screen until CommonUI activation passes user PIE. |
/Game/Lambeer/UI/Inventory/WBP_InventoryContainer | Lambeer/UMG modules | No registry referencer reported. | Preserve; runtime creation is a code/config path not represented as a hard package reference. |
/Game/Lambeer/UI/Inventory/WBP_InventorySlot | Lambeer/UMG modules | WBP_Inventory | Preserve through inventory-screen migration. |
Config snapshot: DefaultGame.ini points HUD and inventory soft classes to WBP_HUD and WBP_Inventory. Lambeer.Build.cs includes UMG/Slate/SlateCore but not CommonUI/CommonInput, and Lambeer.uproject does not enable CommonUI. Xbox and PlayStation glyph assets exist under /Game/Lambeer/UI/ControllerGlyphs/.
WBP_HUD, WBP_Inventory, or WBP_InteractionPrompt during G1–G2.
E 0, and 0 / 10 kg. The capture does not show an interaction prompt or prove behavior across other resolutions.

E prompt is visible near screen center while the player faces a cube. This static capture proves prompt visibility and placement only; it does not prove activation, denied/out-of-range, hold, or controller behavior.Unreal MCP log corroboration: user-run New Editor Window PIE started on /Game/Lambeer/World/Maps/L_Dev_Sandbox/L_Dev_Sandbox at 20:12 and 20:13 local time with one dedicated-server world and two client worlds. The logs prove session topology/start/teardown only, not visual or interaction correctness.
| Area | Minimum capture | G0 record (2026-09-06) |
|---|---|---|
| HUD | Spawn HUD; health/stamina/hunger/thirst/temperature, compass, weight, blood overlay, and interaction prompt visible/hidden transitions. | Captured: five stats, compass, weight, and visible E prompt. Blood overlay and prompt hidden transition are not shown. |
| Inventory | Open/close; mouse and keyboard focus; drag/click assignment; both hands; Back Weapon 1–2; all eight current quick slots; container transfer/drop. | Captured/reported: inventory layout; Wood drag among Hand 1, Hand 2, and Pocket succeeds. Known gap: drag into Quick Slot fails. Controller/focus restoration is unverified. |
| Interaction | Valid target, no target, denied/out-of-range, prompt placement, hold behavior if present, and return of game input. | Captured: visible E prompt while facing a cube. Activation, no-target transition, denied/out-of-range, hold, and controller behavior are unverified. |
| Session | Single-player baseline and current multiplayer mode if available; confirm whether opening inventory pauses the world. | Corroborated by Unreal MCP: dedicated server plus two clients in two user-run sessions. Pause and authority behavior are unverified. |
Owner approved. The Hybrid CommonUI + UMG architecture, one root per local player, four-layer ownership model, compatibility-facade migration, and SP/MP input-state policy below are frozen for G1 implementation.
ULambeerUIManagerSubsystem : ULocalPlayerSubsystem └─ WBP_UIRoot : ULambeerUIRootWidget / UCommonUserWidget ├─ Layer_GameHUD : Overlay // passive UMG │ ├─ WBP_HUDRoot : ULambeerHUDWidget │ ├─ WBP_ContextStatusList │ ├─ WBP_NotificationFeed │ └─ WBP_InteractionPromptHost ├─ Layer_Screens : UCommonActivatableWidgetStack // one primary screen ├─ Layer_Modals : UCommonActivatableWidgetStack // context/split/errors └─ Layer_Toast : WBP_ToastQueue // non-blocking notices Gameplay components replicate canonical state. UI manager owns only local presentation, activation, focus, safe-zone and device state. Every server mutation is requested through the owning gameplay component/service and re-rendered from accepted state.
ULambeerUIManagerSubsystem is the only layer/router owner per local player.ULambeerActivatableWidget centralizes CommonUI input config, back behavior, initial focus and restoration.UUserWidget; screens/modals derive from CommonUI activatable bases.| Layer | Input | Cursor/focus | World |
|---|---|---|---|
| HUD only | Game | No cursor; viewport focus | Runs |
| Primary screen in MP | Menu | Cursor for KBM; deterministic CommonUI focus for controller | Runs; movement/action contexts blocked |
| Pause screen in SP | Menu | Same navigation contract | Paused by session authority |
| Modal | Menu | Focus trapped inside top modal; Back closes modal first | Inherits underlying SP/MP rule |
| Radial | All | Stick/mouse selection; cancel restores game focus | Runs |
Paths marked Proposed do not exist yet. Existing Blueprint assets must be edited by the user.
Source/Lambeer/UI/ ├─ Common/ [Proposed] │ ├─ LambeerUIManagerSubsystem.h/.cpp │ ├─ LambeerUIRootWidget.h/.cpp │ ├─ LambeerActivatableWidget.h/.cpp │ ├─ LambeerUIActionTypes.h │ └─ LambeerUITypes.h ├─ HUD/ [Proposed organization] │ ├─ LambeerHUDWidget.* [move only in planned migration] │ ├─ LambeerStatusBarsWidget.* │ ├─ LambeerCompassWidget.* │ ├─ LambeerInteractionPromptWidget.* │ └─ LambeerScreenEffectsWidget.* ├─ Screens/ [Proposed] │ ├─ LambeerInventoryWidget.* [derive activatable] │ ├─ LambeerMapScreen.* / LambeerSpawnScreen.* │ ├─ LambeerCraftingScreen.* / LambeerWorkbenchScreen.* │ ├─ LambeerSettingsScreen.* / LambeerPauseScreen.* │ └─ LambeerServerBrowserScreen.* / LambeerGroupScreen.* └─ Legacy/ [optional transitional namespace, no asset move] Content/Lambeer/UI/ ├─ Common/Styles/ DA_UITheme, CommonButton/Text styles [Proposed] ├─ Common/Icons/ T_UI_* imported from RawResource/UI/Icons/ [Proposed] ├─ Common/Input/ CommonInput controller data + action data [Proposed] ├─ HUD/ WBP_UIRoot, WBP_HUDRoot, HUD child widgets [Proposed + existing migration] ├─ Menus/ Main/Save/Server/Character/Spawn/Pause [Proposed] ├─ Inventory/ existing assets + context/transfer screens [Mixed] ├─ Map/, Crafting/, Building/, Weapons/, Social/, Settings/ [Proposed] └─ ControllerGlyphs/ [Verified existing; preserve] Config: Lambeer.uproject, Lambeer.Build.cs, DefaultEngine.ini, DefaultGame.ini Input: Content/Lambeer/Core/Input/Actions/ and IMC_Default
WBP_HUD, WBP_Inventory or legacy subsystems until the new root loads, screen activation works, asset references are redirected, cook succeeds, and the user records the matching PIE gate as passed.ชื่อด้านล่างเป็น target contract จาก feature spec; implementation must first search for an existing gameplay-owned equivalent and reuse it where semantics match.
| Contract | Producer / authority | Consumer | Implementation rule |
|---|---|---|---|
FUIHUDSnapshot | Local adapter reading GAS/inventory/aim | HUD root | Normalized values + availability flags; no replicated duplicate. |
FUIWeaponHandState | Held/combat components + client knowledge mask | Hand cards | Observed chamber/mag data is separate from hidden server truth and invalidated on unknowable changes. |
FInteractionPromptState | UInteractionComponent | Prompt widget | Actor/target ID, action, label, quantity, hold, denied reason, alternatives; server still validates execution. |
FUIMapMarker | Marker service; server for shared, local for filter state | Compass/minimap/map/spawn | Stable MarkerId, category, world position, visibility scope, source entity, expiry. |
FCraftingQueueEntry | Player/station crafting authority | Crafting screen/queue | Persistent server record with reserved inputs and recovery state. |
FMagazineLoadPlan | Weapon/magazine authority | Planner modal | Server validates ammo compatibility/capacity; pure function builds preview fire order. |
FWorldSaveSummary | Local save index service | Save select/Main Continue | Summary only; corrupt/incompatible state is explicit. |
FServerBrowserEntry | Online session/backend adapter | Server browser | Session IDs remain opaque; favorite is local/user preference. |
FUIAchievementEntry | Per-character/server progression authority | Achievement screen/toast | Catalog/reward payload blocked by TBD-E2F4910C. |
FGroupActivityLogEntry | Server group registry | Group screen | Actor/action/target/event type; retention blocked by TBD-HUD-UI-007. |
OnHUDSnapshotChanged(const FUIHUDSnapshot&) OnInteractionPromptChanged(const FInteractionPromptState&) OnObservedWeaponInfoChanged(ELambeerHeldHand, const FUIWeaponHandState&) OnMapMarkersChanged(const TArray<FUIMapMarker>&) OnCraftQueueChanged(FGuid QueueId) OnAchievementUnlocked(FName AchievementId, const FRewardPayload&) OnGroupActivityLogged(const FGroupActivityLogEntry&) OnInputMethodChanged(ECommonInputType, FName GamepadName)
ไม่มี calendar dates ตาม roadmap หลัก แต่ละ gate ต้องผ่าน exit criteria ก่อนเปิดงานที่พึ่งพา gate ถัดไป งาน screen ที่ไม่พึ่ง backend สามารถทำ visual shell ล่วงหน้าได้โดยแสดง unavailable/preview state เท่านั้น
เก็บ evidence, approve visual direction, ระบุ TBD blockers และ freeze migration targets.
Exit complete: asset backup/redirect strategy และ acceptance matrix reviewed; known Quick Slot drag gap routed to G3.Plugin/modules, viewport client, root, layers, activatable base, input/focus routing.
Exit: compile + cook; one dummy screen/modal navigates on KBM/Xbox/PlayStation.Theme, typography, buttons, glyphs, icons, safe zone, DPI and localization skeleton.
Exit: shared component gallery passes all reference resolutions.8-stat layout, reticle, hands, quick slots, compass/minimap, prompt and screen effects.
Exit: HUD behavior and no-hit-marker contract pass user PIE.Inventory/container, world map, death/spawn, pause and settings.
Exit: complete controller/KBM loop without focus traps or client authority leaks.Main menu, local worlds, server browser, character creation and initial spawn route.
Exit: every branch handles missing/corrupt/offline/full/incompatible states.Crafting, building, workbench/mag planner, skills, achievements, vehicle and boss.
Exit: each screen is wired to authoritative interface or visibly backend-blocked.Group management, logs, chat and voice controls.
Exit: permissions, privacy controls and channel/failure states validated.English/Thai, semantic palettes, rebinds, scalability, automated checks, cook/package.
Exit: DoD matrix complete; user records final PIE evidence.| ID | Gate | Lane | Work item | Files / assets | Dependency | Exit evidence | Status |
|---|---|---|---|---|---|---|---|
UI-PLN-001 | G0 | Design | Resolve Quick Slot 1–2 vs Back Weapon 1–2 collision/restore semantics. | FEAT-HUD-UI | Owner decision recorded 2026-09-06. | Slots 1–2 are exclusively reserved for Back Weapon 1–2; no alternate binding or restore state. | Complete |
UI-PLN-002 | G0 | Design | Approve visual tokens, layouts and 64-icon solid/silhouette kit. | RawResource/UI/Icons/ | Owner approval recorded 2026-09-06. | Visual system and complete 64-icon kit marked confirmed in FEAT-HUD-UI. | Complete |
UI-PLN-003 | G0 | Design | Select Thai-capable font file and verify license/repository path. | RawResource/Fonts/Google_Sans/ → /Game/Lambeer/UI/Common/Fonts/FF_UI_Primary | Owner approval, local glyph audit, embedded OFL metadata, official source repository, and retained OFL.txt. | Google Sans Regular/Medium/SemiBold/Bold approved; Thai coverage and SIL OFL 1.1 evidence verified. | Complete |
UI-PLN-004 | G0 | C++ | Capture current compile state, asset references and UI configuration before migration. | Lambeer.uproject, Build.cs, Config, existing UI C++/assets | None | Unreal MCP reference audit and Development Game build succeeded; owner reported the clean Editor rebuild passed after the prior DLL lock was removed. | Complete |
UI-PLN-005 | G0 | QA | Record current HUD/inventory/interaction behavior in PIE for regression reference. | Existing maps/widgets; screenshots under Documentation/assets/evidence/hud-ui-g0/ | Only user may run PIE | Three owner-supplied captures retained; Hand 1/Hand 2/Pocket drag succeeds, Quick Slot drag fails, and the unverified interaction/input cases are explicitly bounded. | Complete |
UI-FND-001 | G1 | C++ | Enable CommonUI plugin and add CommonUI/CommonInput module dependencies. | Lambeer.uproject, Source/Lambeer/Lambeer.Build.cs | G0 baseline | Editor and Development targets compile without missing module errors. | Ready |
UI-FND-002 | G1 | C++ | Configure UCommonGameViewportClient and verify project startup uses it. | Config/DefaultEngine.ini | UI-FND-001 | Viewport class verified at runtime; split-screen/local-player path does not regress. | Ready |
UI-FND-003 | G1 | C++ | Create ULambeerUIManagerSubsystem : ULocalPlayerSubsystem. | Source/Lambeer/UI/Common/LambeerUIManagerSubsystem.* | UI-FND-001 | Creates one root per local player; duplicate calls are idempotent. | Not started |
UI-FND-004 | G1 | C++ | Create root class and typed layer accessors. | LambeerUIRootWidget.* | UI-FND-003 | HUD/Screen/Modal/Toast layers resolve or fail with explicit log. | Not started |
UI-FND-005 | G1 | Editor | Create WBP_UIRoot with named layer hierarchy. | /Game/Lambeer/UI/HUD/WBP_UIRoot | UI-FND-004 | Blueprint compiles; every BindWidget name matches C++. | User-only |
UI-FND-006 | G1 | C++ | Create ULambeerActivatableWidget with input config, Back and initial-focus contract. | LambeerActivatableWidget.* | UI-FND-001 | Top screen/modal owns focus; Back order is deterministic. | Not started |
UI-FND-007 | G1 | C++ | Implement push/pop APIs by layer tag and soft class reference. | LambeerUIManagerSubsystem.*, LambeerUIActionTypes.h | UI-FND-004/006 | Unknown layer/class returns failure; no duplicate modal activation. | Not started |
UI-FND-008 | G1 | C++ | Centralize cursor, gameplay mapping suppression, focus restoration and SP/MP pause request. | UI manager + LambeerPlayerController.* | UI-FND-007 | Closing final screen restores game focus exactly once; MP never pauses server. | Not started |
UI-FND-009 | G1 | C++ | Turn existing HUD/inventory/character subsystems into temporary facades that route to UI manager. | Source/Lambeer/UI/Lambeer*Subsystem.* | UI-FND-007/008 | Existing callers work without direct AddToViewport or independent input-mode changes. | Not started |
UI-FND-010 | G1 | QA | PIE smoke: dummy primary screen + modal with KBM/Xbox/PlayStation. | WBP test screen/modal | UI-FND-001–009 | User records focus, Back, cursor and world pause results. | User-only |
UI-DSN-001 | G2 | Editor | Import approved 64 SVG icons as tintable UI textures. | RawResource/UI/Icons/ → /Game/Lambeer/UI/Common/Icons/T_UI_* | Approved source kit; user-only asset import | Transparent background, consistent silhouette, correct UI texture settings. | User-only |
UI-DSN-002 | G2 | Editor | Create theme, button, text, tab, list-row, progress and modal style assets. | /Game/Lambeer/UI/Common/Styles/ | UI-PLN-002/003 | Component gallery shows normal/hover/pressed/disabled/focused states. | User-only |
UI-DSN-003 | G2 | Editor | Create CommonInput controller data for Xbox and PlayStation from verified glyph assets. | /Game/Lambeer/UI/Common/Input/, existing ControllerGlyphs | UI-FND-001 | Accept/Back/Context/tab/stick/trigger glyphs change by active device. | User-only |
UI-DSN-004 | G2 | C++ | Expose input-method change event and preserve focused semantic control on device switch. | UI manager/common widgets | UI-DSN-003 | Switch does not close screen or reset selection. | Not started |
UI-DSN-005 | G2 | Editor | Import approved Google Sans faces and configure composite/fallback font. | RawResource/Fonts/Google_Sans/ → /Game/Lambeer/UI/Common/Fonts/FF_UI_Primary | Resolved TBD-HUD-UI-002; user-only asset import | Thai shaping/line breaks and tabular figures verified after import. | User-only |
UI-DSN-006 | G2 | C++ | Implement centralized DPI, HUD scale, safe-zone and text-scale application. | UI manager + user settings model | UI-FND-005 | FHD/2K/4K and 16:10/21:9/32:9 layout snapshots remain unclipped. | Not started |
UI-DSN-007 | G2 | Design | Create English source string table keys for all navigation, states and errors; add Thai translations. | String Tables under /Game/Lambeer/UI/Localization/ | Approved copy/font | No user-facing hard-coded C++ strings; missing key visible in validation. | Not started |
UI-HUD-001 | G3 | C++ | Create UI snapshot types and event-driven HUD adapter. | LambeerUITypes.h, HUD adapter/subsystem | G1 | Snapshot changes only when source state changes; unavailable fields are explicit. | Not started |
UI-HUD-002 | G3 | Backend | Add gameplay-owned Energy, Sleep and Immunity attributes/events. | LambeerAttributeSet.* and survival system | Canonical survival design | Server authority, replication and persistence tests pass. | Not started |
UI-HUD-003 | G3 | C++ | Refactor status bars from Tick polling to attribute delegates; support eight bars. | LambeerStatusBarsWidget.* | UI-HUD-001/002 | No persistent gameplay polling; 8 normalized values render without numbers. | Not started |
UI-HUD-004 | G3 | C++ | Remove HitMarker field/API and all bindings. | LambeerHUDWidget.*, WBP_HUD migration | Confirmed no-hit-feedback rule | Repository search finds no hit/headshot/kill marker presentation path. | Ready |
UI-HUD-005 | G3 | Editor | Create WBP_HUDRoot and child hierarchy with actual viewport-edge anchors. | /Game/Lambeer/UI/HUD/ | G2, UI-HUD-001 | Blueprint compiles and layout matrix has no overlap/clipping. | User-only |
UI-HUD-006 | G3 | C++ | Implement contextual status list ordering by severity/time and non-hidden critical overflow. | Status presentation model/widget base | Gameplay status tags/events | Critical rows remain visible; overflow expands accessibly. | Not started |
UI-HUD-007 | G3 | C++ | Replace heading text with compass tape and shared marker projection. | LambeerCompassWidget.*, map marker service | FUIMapMarker contract | Cardinals/degrees and allowed markers project/clamp correctly without Tick-heavy actor scans. | Not started |
UI-HUD-008 | G3 | C++ | Implement minimap view model, filters and player heading. | Map service + minimap widget base | UI-HUD-007 | Shared marker IDs agree across compass/minimap/full map. | Not started |
UI-HUD-009 | G3 | Backend | Add item handedness to Data Asset contract and enforce atomic two-handed occupancy. | LambeerItemDefinition.h, held/equipment components, item assets | Per-item Data Asset rule; user asset edits | One/two-hand validation passes server tests and UI receives stable state. | Blocked |
UI-HUD-010 | G3 | C++ | Migrate Quick Slots 8→10, reserve display slots 1–2 for Back Weapon 1–2, bind 1–0 actions and present both hands. | Equipment types/component, PlayerController, input assets, HUD/inventory | UI-HUD-009 + resolved TBD-HUD-UI-001 | Server rejects alternate bindings at internal indices 0–1; removal leaves them empty; authoritative use-to-hand flow passes tests. | Blocked |
UI-HUD-011 | G3 | C++ | Implement reticle state machine; ADS hidden; no damage confirmation. | Aim/combat events + reticle widget base | Existing aim component | Hip/shoulder/ADS/melee/throw/interaction states map deterministically. | Not started |
UI-HUD-012 | G3 | C++ | Replace text-only prompt event with structured prompt state and projected placement. | InteractionComponent.*, prompt host/widget | G2 glyphs | Hold, denied reason, quantity and alternatives render near target and safe-zone clamp. | Not started |
UI-HUD-013 | G3 | C++ | Implement low-health thresholds and blood/wet screen-effect timelines. | LambeerScreenEffectsWidget.*, effect events | Health/blood/wetness sources | 30/20/10%; blood hold 2s + fade 5s; wet fade 5s; critical content remains readable. | Not started |
UI-HUD-014 | G3 | C++ | Implement observed chamber/magazine knowledge mask and invalidation rules. | Combat/weapon component + hand presentation | Weapon backend | Unknown remains hidden until check; stale observations invalidate correctly. | Not started |
UI-CORE-001 | G4 | C++ | Convert inventory screen to activatable lifecycle without losing existing assignment logic. | LambeerInventoryWidget.*, subsystem facade | G1 | Open/close, delegate cleanup and focus restoration pass; no direct input-mode ownership. | Not started |
UI-CORE-002 | G4 | Backend | Add validated Split, quantity Drop, Use, Equip, Sort, Search projection, Take All and Transfer All commands. | Inventory/equipment/held components | Inventory feature rules | Server rejects invalid/stale indices and preserves item-instance state. | Not started |
UI-CORE-003 | G4 | Editor | Rebuild inventory and side-by-side container layouts with context/split modals. | Existing Inventory assets + proposed WBP_ContainerTransfer | UI-CORE-001/002 | Drag, click, keyboard and controller paths expose identical commands. | User-only |
UI-CORE-004 | G4 | C++ | Build shared map screen/view model with category toggles, pan, zoom, center and ping. | LambeerMapScreen.*, marker service | UI-HUD-007/008 | Full map starts revealed; filters are local; shared ping is server validated. | Not started |
UI-CORE-005 | G4 | Backend | Provide death/respawn state and death-marker lifecycle events. | Death, loot bag, spawn services | Gameplay backend | Marker clears on despawn or empty bag; killer/cause/location are authoritative. | Not started |
UI-CORE-006 | G4 | C++ | Create full-map spawn/death screen with last bed or Fresh Spawn and four-town flow. | LambeerSpawnScreen.*, WBP_DeathRespawn | UI-CORE-004/005 | No sleeping-bag option; invalid/occupied choice reports reason and remains selectable only when valid. | Not started |
UI-CORE-007 | G4 | C++ | Create pause/menu policy using session type rather than client assumption. | LambeerPauseScreen.*, UI manager/session service | G1 | SP pauses; MP shows “WORLD CONTINUES…” and only blocks local controls. | Not started |
UI-CORE-008 | G4 | C++ | Create settings model with staged apply/revert and per-category adapters. | LambeerUserSettings target + settings screens | G2 | Invalid unsupported settings cannot persist; risky display changes can revert safely. | Not started |
UI-FE-001 | G5 | C++ | Create frontend root and Main Menu activatable screen. | Menu C++ bases + WBP_MainMenu | G1/G2 | Continue disabled with reason when no world; Feedback opens external URL only after valid config. | Not started |
UI-FE-002 | G5 | Backend | Implement local world/save index and last-world pointer. | Persistence service + FWorldSaveSummary | TBD-HUD-UI-003 for process topology | Create/list/open/error semantics work without UI owning save bytes. | Blocked |
UI-FE-003 | G5 | C++ | Create Save World Select screen and Continue routing. | LambeerSaveWorldScreen.*, WBP_SaveWorldSelect | UI-FE-002 | Start SP always opens selection; Continue enters remembered valid world. | Not started |
UI-FE-004 | G5 | Backend | Create online session/server-browser adapter. | Session subsystem + FServerBrowserEntry | Online platform integration | Official/community, favorites, ping, population, search/filter metadata and errors supplied. | Not started |
UI-FE-005 | G5 | C++ | Create Server Browser screen with cancellable refresh/join flow. | LambeerServerBrowserScreen.*, WBP_ServerBrowser | UI-FE-004 | Stale results, full server, version mismatch, timeout and disconnect are explicit. | Not started |
UI-FE-006 | G5 | Backend | Expose character-per-server existence, creation commit and persisted-position entry state. | Session/player persistence services | Network/persistence backend | Existing character skips creation/spawn town and enters persisted position. | Not started |
UI-FE-007 | G5 | Editor | Create missing WBP_CharacterCreation child and preview hierarchy. | /Game/Lambeer/UI/Menus/WBP_CharacterCreation | Existing C++ base + G2 | Config soft path resolves; preset/hair/color preview and commit/cancel compile. | User-only |
UI-FE-008 | G5 | C++ | Configure Steam metadata and external Feedback URL. | Config/platform settings | TBD-HUD-UI-004 | Invalid/missing URL is disabled with reason; no custom launcher/patcher. | Blocked |
UI-SYS-001 | G6 | Backend | Implement persistent player/station crafting queues with immediate reservation and cancel refund. | Crafting components/services | TBD-HUD-UI-005 for destruction overflow | Earlier queue entries reduce availability; logout/leave does not stop queue. | Blocked |
UI-SYS-002 | G6 | C++ | Create searchable recipe/detail/queue screen. | LambeerCraftingScreen.*, WBP_Crafting | UI-SYS-001 | Player source uses carried inventory; station source uses only station storage. | Not started |
UI-SYS-003 | G6 | Backend | Expose building catalog, placement preview state, cost/tier/snap/rotation and failure code. | Building system interfaces | Building backend | Commit is server validated; UI preview cannot authorize placement. | Not started |
UI-SYS-004 | G6 | Editor | Create build selection/action radial widgets. | WBP_BuildRadial, WBP_BuildActionRadial | UI-SYS-003 | Cost/tier/snap/rotation/failure and Upgrade/Repair/Demolish/Authorize visible contextually. | User-only |
UI-SYS-005 | G6 | Backend | Implement pure magazine-plan expansion and authoritative load validation. | Weapon/magazine types and tests | Weapon backend | Head→Loop→Tail order; capacity may stop mid-loop pattern; incompatible ammo rejected. | Not started |
UI-SYS-006 | G6 | C++ | Create workbench screen, 3D preview contract and magazine planner modal. | LambeerWorkbenchScreen.*, target widgets | UI-SYS-005 + weapon actions | Default drag order and advanced planner preview match server sequence. | Not started |
UI-SYS-007 | G6 | Backend | Expose skill XP, level, progress and next-bonus data per character/server. | Skill progression service | Phase-2 skill backend | Exact XP is authoritative; missing next bonus has explicit state. | Not started |
UI-SYS-008 | G6 | C++ | Create achievement catalog/progress/reward screen and unlock toast. | Achievement screen/toast | TBD-E2F4910C | Cannot finalize catalog/reward action until canonical decision resolves. | Blocked |
UI-SYS-009 | G6 | C++ | Create vehicle HUD adapter and widget. | FVehicleHUDState, WBP_VehicleHUD | Vehicle backend | Diegetic speed/RPM; overlay fuel/damage/gear/seats/access; storage via Inventory. | Not started |
UI-SYS-010 | G6 | C++ | Create boss health and inspected respawn-state presentation. | WBP_BossHUD, marker interaction | Boss backend + marker service | Timer hidden before inspection; occupied state uses exact approved copy. | Not started |
UI-SOC-001 | G7 | Backend | Finalize and implement clan naming/tag, promote/kick authority and log retention. | Group registry/service | TBD-HUD-UI-007 | Leader/Officer/Member permissions have server tests and audit semantics. | Blocked |
UI-SOC-002 | G7 | C++ | Create group screen: Create, Invite Inbox, roster, roles, activity log; no Search/Join. | LambeerGroupScreen.*, WBP_ClanSquad | UI-SOC-001 | Actor/action/target and death/online/offline entries render; permissions disable with reason. | Not started |
UI-SOC-003 | G7 | Backend | Provide text chat channels Server/Proximity/Squad with moderation/error state. | Chat service | Online backend | Channel membership and rejected sends are authoritative. | Not started |
UI-SOC-004 | G7 | Editor | Create chat panel/entry/channel widgets. | WBP_TextChat | UI-SOC-003 | Keyboard/controller entry, unread state and channel switching work without focus trap. | User-only |
UI-SOC-005 | G7 | Backend | Expose voice channel/PTT/speaker/per-player volume/mute/block state. | Voice service | Platform voice integration | Privacy actions persist at intended scope; unavailable microphone is explicit. | Not started |
UI-SOC-006 | G7 | C++ | Create voice panel and world speaking indicator; retain no squad roster HUD. | WBP_VoicePanel, speaking marker widget | UI-SOC-005 | Speaking state appears near character/map context without persistent roster panel. | Not started |
UI-ACC-001 | G8 | C++ | Implement semantic palette presets; never recolor raw meanings ad hoc. | Theme/settings service | G2 styles | Colorblind modes preserve icon/text/shape redundancy. | Not started |
UI-ACC-002 | G8 | C++ | Implement subtitle presentation for English/Thai; no environmental captions. | Subtitle widget/settings | Localization/audio events | Speaker/text timing wraps without clipping at scale extremes. | Not started |
UI-ACC-003 | G8 | C++ | Connect Reduce Camera Shake and Disable Flashing (black instead of white) settings. | User settings + camera/effect systems | Gameplay VFX integration | Every flash source follows centralized policy; critical information remains visible. | Not started |
UI-ACC-004 | G8 | C++ | Implement full rebind model, conflict detection and hold/toggle aim/crouch/sprint. | Enhanced Input settings service/screens | Input action inventory | Bindings survive restart and glyph display updates from resolved mapping. | Not started |
UI-QA-001 | G8 | QA | Add C++ automation tests for pure contracts: magazine expansion, marker lifecycle, quick-slot validation, setting serialization and queue math. | New test translation units under Source/Lambeer | Corresponding backend functions | Tests pass in non-PIE automation run; no UI screenshot claim. | Ready |
UI-QA-002 | G8 | QA | Add static checks for forbidden HitMarker bindings, hard-coded user strings and invalid soft widget paths. | Validation script/build checks | G3–G7 | CI/local validation reports actionable file/path and exits non-zero on violation. | Ready |
UI-QA-003 | G8 | QA | Run complete manual PIE matrix from FEAT-HUD-UI. | PIE checklist UI-001–012 | Only user may run PIE | User records results, build/config, screenshots and defect IDs. | User-only |
UI-QA-004 | G8 | QA | Compile Editor/Game/Server targets and run content validation + cook/package smoke. | Project targets/content | All required gates | No missing classes/assets, redirector errors or uncooked UI dependencies. | Not started |
UI-QA-005 | G8 | QA | Verify FHD/2K/4K, 16:10/21:9/32:9, EN/TH and KBM/Xbox/PlayStation matrix. | Packaged/PIE builds | Only user performs interactive verification | No clipping, overlap, focus trap or unreadable semantic state; evidence retained. | User-only |
No tasks match the current filters.
Screen IDs และหน้าที่เป็น canonical ใน FEAT-HUD-UI; ตารางนี้ชี้เฉพาะ implementation owner task และ gate เพื่อไม่ทำซ้ำ behavior specification
| Screen ID | Target Widget | Primary task(s) | Gate | Backend condition |
|---|---|---|---|---|
UI-SCR-MAIN | WBP_MainMenu | UI-FE-001, UI-FE-008 | G5 | Local-world summary + configured Feedback URL |
UI-SCR-SAVES | WBP_SaveWorldSelect | UI-FE-002, UI-FE-003 | G5 | Local save index |
UI-SCR-SERVER | WBP_ServerBrowser | UI-FE-004, UI-FE-005 | G5 | Online session adapter |
UI-SCR-CHAR | WBP_CharacterCreation | UI-FE-006, UI-FE-007 | G5 | Character-per-server service |
UI-SCR-SPAWN | WBP_SpawnMap | UI-CORE-004–006 | G4/G5 | Authoritative spawn eligibility |
UI-HUD-ROOT | WBP_HUDRoot | UI-HUD-001–014 | G3 | Per-source availability flags |
UI-HUD-PROMPT | WBP_InteractionPrompt | UI-HUD-012 | G3 | Structured interaction state |
UI-HUD-BOSS | WBP_BossHUD | UI-SYS-010 | G6 | Boss/marker events |
UI-HUD-VEHICLE | WBP_VehicleHUD | UI-SYS-009 | G6 | Vehicle state provider |
UI-SCR-INVENTORY | WBP_Inventory | UI-CORE-001–003, UI-HUD-010 | G4 | Inventory/equipment/held commands |
UI-SCR-CONTAINER | WBP_ContainerTransfer | UI-CORE-002, UI-CORE-003 | G4 | Two authoritative inventories |
UI-SCR-CRAFT | WBP_Crafting | UI-SYS-001, UI-SYS-002 | G6 | Queue/reservation service |
UI-SCR-BUILD | WBP_BuildRadial | UI-SYS-003, UI-SYS-004 | G6 | Placement preview/provider |
UI-SCR-BUILD-ACTION | WBP_BuildActionRadial | UI-SYS-003, UI-SYS-004 | G6 | Server-authorized target actions |
UI-SCR-WORKBENCH | WBP_WeaponWorkbench | UI-SYS-005, UI-SYS-006 | G6 | Weapon action/compatibility service |
UI-SCR-MAG | WBP_MagazineLoadPlanner | UI-SYS-005, UI-SYS-006 | G6 | Magazine load validation |
UI-SCR-MAP | WBP_WorldMap | UI-CORE-004, UI-HUD-007, 008 | G3/G4 | Marker registry |
UI-SCR-SKILLS | WBP_Skills | UI-SYS-007 | G6 | Skill progression service |
UI-SCR-ACHIEVE | WBP_Achievements | UI-SYS-008 | G6 | TBD-E2F4910C |
UI-SCR-GROUP | WBP_ClanSquad | UI-SOC-001, UI-SOC-002 | G7 | TBD-HUD-UI-007 |
UI-SCR-CHAT | WBP_TextChat | UI-SOC-003, UI-SOC-004 | G7 | Chat service |
UI-SCR-VOICE | WBP_VoicePanel | UI-SOC-005, UI-SOC-006 | G7 | Platform voice service |
UI-SCR-DEATH | WBP_DeathRespawn | UI-CORE-005, UI-CORE-006 | G4 | Death/loot/spawn services |
UI-SCR-PAUSE | WBP_PauseMenu | UI-CORE-007 | G4 | Session-type authority |
UI-SCR-SETTINGS | WBP_Settings | UI-CORE-008, UI-ACC-001–004 | G4/G8 | User settings/input services |
ไม่มี numeric performance budget ที่อนุมัติ จึงใช้ structural rules และวัดจริงโดยไม่ตั้งตัวเลขเป้าหมายเอง
| Risk | Implementation control | Evidence |
|---|---|---|
| Per-frame HUD polling | Bind GAS/component delegates; use Tick only for visual interpolation and only while visible. | Unreal Insights trace + source review; no actor scans in widget Tick. |
| Large inventory/list rebuild | Diff by stable IDs, virtualize long lists where supported, defer thumbnails and cancel stale requests. | Profile worst verified inventory/catalog data when backend exists. |
| Map marker volume | Central registry, category filtering before widget creation, pooled marker widgets and distance/viewport projection. | Marker-count scenario derived from actual content; no invented count. |
| Soft asset load failure | Async load; loading/error state; no null dereference; log asset path once. | Missing-asset test with one intentionally invalid development fixture. |
| Device hot-swap | Update glyphs without rebuilding screen; restore focus by semantic control ID. | User PIE device-switch matrix. |
| Network disconnect/stale action | Cancel pending UI operation, return to safe frontend state, invalidate cached selection. | Disconnect/reconnect test with recorded result. |
| Thai text expansion | No fixed text-width assumptions; wrapping/min-width/ellipsis only where full label is recoverable. | EN/TH pseudo-long-string screen sweep. |
PIE-UI-001…012.| Dimension | Required variants | Core assertions |
|---|---|---|
| Resolution | 1920×1080, 2560×1440, 3840×2160 | Scale, readability, no clip/overlap |
| Aspect | 16:9, 16:10, 21:9, 32:9 | HUD uses actual viewport edges; center content remains stable |
| Input | KBM, Xbox, PlayStation | Glyph, focus, Back, context and tabs |
| Language | English, Thai | Wrapping, fallback glyphs, subtitle readability |
| Session | Single Player, listen/local development if applicable, dedicated multiplayer | Pause/input blocking, authority, reconnect |
| State | Loading, Ready, Empty, Error, Stale, Denied | No blank or dead-end screen |
FEAT-HUD-UI; proposed asset is verified after creation.| ID | Status | Affects / decision | Does not block |
|---|---|---|---|
TBD-HUD-UI-001 | Resolved 2026-09-06 | Back Weapon 1–2 exclusively reserve display slots 1–2/internal indices 0–1; alternate bindings are rejected and no restore state exists. | — |
TBD-HUD-UI-002 | Resolved 2026-09-06 | Google Sans is approved; 16 local TTFs have verified Thai coverage, embedded OFL metadata matches the official source, and RawResource/Fonts/Google_Sans/OFL.txt is retained. Target: /Game/Lambeer/UI/Common/Fonts/FF_UI_Primary. | — |
TBD-HUD-UI-003 | Open | Final SP authority startup/teardown implementation | Save-list UI contract and session-agnostic screen stack |
TBD-HUD-UI-004 | Open | Steam metadata and working Feedback action | Main Menu layout and disabled-state behavior |
TBD-HUD-UI-005 | Open | Station-destruction refund overflow transaction | Queue UI and ordinary cancel/refund path |
TBD-E2F4910C | Open | Final achievement entries, thresholds, reward payload/action | Catalog shell, progress component and unlock-toast contract |
TBD-HUD-UI-007 | Open | Clan naming/tag, promote/kick and log retention implementation | Group screen layout and confirmed invite roles |
TBD-HUD-UI-008 | Resolved 2026-09-06 | Documented visual tokens, layouts, and 64-icon kit are approved for implementation. | — |
Plan source of truth: เอกสารนี้กำหนด implementation order, file impacts, gates และ verification evidence ส่วนพฤติกรรม player-facing ยังคง canonical ใน FEAT-HUD-UI และ gameplay authority/value อยู่ใน feature/technical docs ของระบบนั้น