mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-08-09 02:07:04 +08:00
3a9ab6a14ab36b49e6572dc246b1f8c7c51ee33e
2 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
45d2c8234a |
feature: chat (#36)
* fix(config): load config on demand in get/set instead of asserting * feat(chat): implement in-game chat box with UTF-8 support - Add ChatMessage struct and ChatBox widget for displaying and sending messages - Introduce split_utf8() in text_tools for splitting UTF-8 strings by character count - Add TimeTools utility (get_time_ticks) for message timestamps - Update TextField with start_typing/stop_typing methods and set_typing() - Integrate text input handling in WorldScene and WorldUIManager for chat - Add utf8cpp library for robust UTF-8 validation and processing - Add ChatBox rendering and input logic (src/ui/chat_box.cpp) - Register ChatBox source in CMakeLists.txt - Fix Renderer::render_lable to skip rendering if VAO is null - Update credits to include utf8cpp library * fix(ui): correct chat box layout with dynamic height and bottom anchor * feat(chat): implement client-server chat messaging Add protobuf definition for ChatMsg, new packet ID CHAT_MSG (4001), and handle sending/receiving chat messages on both client and server side. Wire up UI components (ChatBox, TextField) to allow message input and display, including a message queue in ClientWorld for thread-safe processing. Also add default initialization for ChatMessage::time. * feat(chat): distinguish between send and cancel in chat input * feat(ui): add background to Label widget and refactor debug overlay * refactor(ui): decouple ChatBox from image dependencies, allow custom TextField backgrounds TextField's background is now a generic `Widget` pointer, enabling use of any widget (e.g., `Rect`, `Image`) as background. `ChatBox` no longer creates its own `TextField`; it accepts one via `set_text_field`. Removed `set_d_image` and `set_default_image` in favor of `set_background`. Added a shared default image constant in `default_image.hpp`. Updated `host_game_ui.cpp`, `join_game_ui.cpp`, and `world_ui_manager.cpp` to construct backgrounds accordingly. * refactor(ui): move width, height, and fill properties to base Widget Consolidate width, height, and fill (fill_parent, fill_width, fill_height) into the base Widget class. Replace per-widget set_fill(bool) with set_fill_parent(bool), set_fill_width(bool), and set_fill_height(bool). * refactor(ui): generalize Label background, add ChatBox width method * feat(chat): implement message expiration after 5 seconds * feat(ui): add word wrap for chat messages with font width measurement * feat(audio): implement voice chat using Opus codec Add voice chat support with Opus encoding/decoding, push-to-talk (V key), and new audio recording infrastructure. * feat(audio): implement voice chat with Opus codec and streaming audio source Add AudioStreamSource for continuous PCM playback. Refactor voice send/receive to encode with Opus and stream to a dedicated source instead of per-frame sources. Enable voice transmission over network. * feat(audio): add spatial voice source with underwater effects Update voice source to support spatial positioning, low-pass filter, and reverb effect for underwater immersion. Adjust source pool size and low-pass filter parameter. Correct receive_voice parameter type. * feat(settings): add player voice volume and voice input type options - Add player voice volume slider and voice input type combo in settings UI. - Add localization strings for player voice and voice input types. - Add config overloads for const char* default values. - Implement voice input types (PTT, always, off) in world scene. - Refactor WorldScene member order and add load_config method. - Update audio engine to use player voice volume. - Downgrade some logging to debug. * fix(event): delegate error UI events to each handler Move error UI event check from top of handle_event into each individual event handler (mouse_move, mouse_button, mouse_wheel, key, text_input). Also flatten window resize dispatch: all sub-handlers are called regardless of previous handler return values, and the method always returns false. * feat(chat): add colored system messages for player join/exit * chore(logging): reduce verbosity for audio loading and input events * fix(settings): fix typo in config key "vloume" * feat(ui): add microphone icon when recording voice * feat(voice): limit voice message range to 48 units * chore(logging): downgrade text input log level to debug * feat(credits): add license identifiers and reorganize license files * feat: add sensitive word filter for chat messages Implement AC automaton-based filtering using a sensitive lexicon loaded from a JSON asset file. The filter is applied to both player names and chat messages before broadcasting, and can be toggled via the `sensitive_filter` config option. * feat(server): add config option to disable voice chat * fix: correct utf8 validation, add missing include, remove debug log |
||
|
|
b1341d7da4 |
feat: sound (#28)
* build: add OpenAL dependency * feat(deps): add dr_libs audio library * feat(audio): integrate OpenAL audio engine with WAV/MP3/FLAC support * feat: add bgm001 * feat(audio): add audio fade in/out and fix delta time naming * fix(audio-source): improve state, volume, and const correctness * feat(audio): add 3D audio playback with source pool and auto-loading * feat: add ogg loader * feat(audio): add footstep sounds and fix audio listener orientation * feat(sound): add block place and break sounds * feat(audio): add per-channel volume control and config reload * fix(audio): set distance model, reduce max distance, fix sound pos - Set OpenAL distance model to AL_INVERSE_DISTANCE_CLAMPED in engine. - Reduced AL_MAX_DISTANCE from 100 to 48 for better falloff. - Fixed block sound position to use world coordinates instead of local block coordinates. * refactor(game_time): introduce Timer for time-based updates and rename existing to TickTimer Add a new `Timer` class that operates in seconds (using `TimeType`) alongside the existing `TickTimer` which uses `TickType`. Rename the original `Timer` to `TickTimer` throughout the codebase. Update `ClientWorld` to maintain separate maps for tick-based and time-based timers, and replace the hardcoded footstep timer in `ClientPlayer` with a time-based callback timer. Also add `play_2d` to `AudioEngine` and load an ambient bird sound to demonstrate the new timer functionality. * feat(gameplay): add ocean wave ambient sounds with random selection Add four ocean wave FLAC sound files and play one randomly when player is within 10 blocks of sea level and in an ocean biome. Include a Random member initialized from ChunkGenerator seed for consistent randomization. * feat(gameplay): detect underwater state and play transition/bubble sounds - Add is_underwater() and set_underwater() to ClientPlayer. - Change get_world() to return non-const reference for audio access. - Update Camera::update_move_camera() to detect water block changes and trigger transition sound. - Add repeating timer in ClientWorld to play random bubble ambient sounds while underwater. - Include new ambient sound assets for water transitions and bubbles. - Also add sand walk sound asset (unused in this commit). * feat(assets): add and update block break/place/walk sounds Add sounds for dirt, grass_block, leaf, log, sand, snowy_grass_block, stone. Update existing leaf/walk, sand/place, sand/walk, and stone/place sounds. * feat(gameplay): add walking sound for players and adjust underwater bubble interval - Move walk/run sound interval constants from anonymous namespace to ClientPlayer header - Add moving_time field to PlayerInfo to track continuous movement - Implement play_walk_sound callback triggered by WALK and RUN gaits - Increase underwater bubble timer from 1.0s to 1.5s * feat(asset): add grass block break and place sound effects * feat(renderer): add --no-debug flag to disable OpenGL debug output * feat(audio): add day/night-based BGM switching * feat(audio): add underwater low-pass filter effect * feat(audio): add pitch control to audio sources Implement set_pitch method that clamps pitch between 0.0 and 1.0 and applies it via AL_PITCH. Includes minor whitespace cleanup in audio_engine.cpp. * feat(audio): implement reverb effect and integrate into underwater system * asset(sound): update dirt and grass block break/place sounds * feat(network): synchronize player water sound * fix: include <numbers> * fix(audio): play ambient water bubble sound in 3D at player position |