* build: add stb image write lib
* feat(renderer): add screenshot capture with F2
* feat(screenshot): add screenshot viewer scene
Add SCREENSHOT scene and UI to browse screenshots from the main menu,
with localization for English and Chinese. Also allow image loading
by full path and replace scene-operation asserts with error logs.
* feat(ui): handle window resize in ScreenshotUI
* feat(ui): add ScrollView widget and dynamic layout on resize
Introduces a ScrollView widget with mouse wheel support and viewport clipping.
Credits and screenshot screens now use it and recompute layout on window resize.
Offset storage switched from ivec2 to vec2 with new accessors.
* feat(ui): add lightbox viewer for screenshots
Add a lightbox to preview screenshots on click. Introduce Button::set_texture for image-backed buttons, add widget getters for window size and visibility, and block background input while the lightbox is open. Close the lightbox with Escape or a left-click.
* feat(ui): add screenshot button to pause menu
Add a button to open the screenshot scene from the pause menu.
Also enable linear filtering on screenshot textures for smoother scaling.
* feat(ui): add show in file manager button to screenshot view
- Add Tools::open_file_manager helper with Windows and Linux support.
- Ensure screenshot directory is created before scanning.
- Add localization keys for en_US and zh_CN.
* feat(screenshot-ui): add newest/oldest sort selector
Add a combo button to the screenshot gallery to sort files by modification time (newest or oldest first). Store timestamp per image and rebuild layout when sort order changes. Include translations for en_US and zh_CN.
* fix: correct argument typo and path/error handling
Fix --enable-consolelog flag, screenshot filter bug, paths to C APIs, add includes and gitignore entries, and improve ShellExecuteW failure detection.
* fix(audio): improve source management and OpenAL diagnostics
Fix null deref when source pool is full, initialize m_using, and improve source state handling. Add OpenAL vendor/version/renderer logging and correct voice PCM span type.
* fix(client_entity_manager): store find result before assert
* fix(tools): switch datetime format to underscore-separated
Use %Y-%m-%d_%H-%M-%S instead of %F %T to avoid colons and spaces, making output suitable for file names.
* fix: initialize uninitialized member variables
Add default member initializers across various classes to prevent undefined behavior from uninitialized fields, and initialize the neighbor biome array in the chunk generator.
* feat(texture_manager): add check_exist option for image loading
Add a `check_exist` parameter to `get_image_texture` and `load_image_texture`, enabling callers to skip file existence checks. Log an error and return nullptr when image data fails to load. Update screenshot UI to support uppercase image extensions and gracefully ignore unreadable images.
* build: replace FetchContent with direct includes for glm
* build(deps): replace SOIL2 with stb for image and vorbis decoding
* build: replace FetchContent with direct includes for toml++
* refactor(texture): bump block texture size to 512 and disable items tab
* feat: add hotbar system with ItemStack and RowLayout
* fix(ui): restrict Ctrl key handling to typing mode
* feat(ui): add widget border support and highlight selected hotbar slot
* fix(ui): update borders on scale change and correct Image width
- Added update_border() calls in set_scale() for Button, ChatBox, Image, Label, and TextField.
- Fixed Image::width() to multiply by width instead of height.
- Added early return in Widget::update_border() if border is not supported.
* feat(ui): add border visual feedback on slider drag
* feat(ui): add ItemSlot widget and refactor hotbar to use it
* feat(world_scene): add inventory UI and pause type enum
* feat(ui): add item slot tooltip and make window size static
* fix(ui label): account for background offset in width/height
* refactor(ui): centralize item info label in inventory and add update
* feat(ui): add hotbar interaction in inventory UI
* fix(inventory-ui): correct row creation logic for first item
The loop starting at index 0 created a new row on the first iteration
(i % 10 == 0). Shift the loop to start at 1 and adjust modulus condition
to create rows correctly every 10 items.
* feat(block): add name_key for localized block names
Add `name_key` field to all block TOML definitions, enabling per-block localization. Update `BlockData` struct and `BlockManager` with `local_name()` method that returns a localized string via the translation system. Add corresponding entries to `en_US.json` and `zh_CN.json`. Modify inventory UI to use the localized name when displaying block info, and fix a bug where emptying a hotbar slot did not clear the item locally.
* fix(ui): change inventory item slot color from white to gray
* fix(ui): add missing include for std::array