mirror of
https://github.com/Dingo-Shenanigans/ReSkate.git
synced 2026-10-29 03:46:50 +01:00
The Multiplayer and Custom Stuff pages of the game's pause menu were built from the game's own menu widgets: a button, a text box and a line of text, which cannot make a list with columns. The game now keeps only the frame around each page (top bar, title, Back prompt) and ReSkate draws everything in it, tabs included. The native page is one empty body. Multiplayer - Server browser: a list with name, map and skaters columns that sort, search, filters (all, servers, lobbies, friends, hide full, my map), and a panel for the session pointed at. Pressing a row joins it; the row says JOIN while pointed at. Join by code is in the panel, and its own tab is gone. - Host lobby, as before. - Current session (only in one): who is here, leave, map, join code, party. - Voice chat (only in a session). - Session settings (only for a lobby's host or a server's admin). They are sent as explicit values, which a dedicated server needs. Custom Stuff - Official maps and Custom maps: pressing a map loads it. - World: traffic, pedestrians, time of day. - Parks: a card for each lot with its style, layout and load. - Player: noclip, no bail, Hall of Meat, board wear, the camera views, flight speed and the boosts. - Online: player and nametag distances, nametags, chat, chat bubbles, Discord status, and showing your tag and items. - Visuals: camera effects, challenges, shuffle playlists. - Binds: record or clear the button for each action. - The player card name is no longer on the page (cardname in the console still sets it). Input: the game keeps the mouse and controller while its menu is up, so the pages only watch them. They have their own focus, moved with the D-pad or arrow keys and pressed with A or Enter, with LT/RT or Z/C for tabs; lists remember the row the focus left. Typing in a text box or recording a bind takes the keyboard and controller for that long, as chat does. Nothing is taken while the game is not the window in front, and the overlay's own menu draws on top. Layout follows the game's menu at any window shape: scaled to fit whole, 192 units clear at the sides, centred past 4704 units wide. Sounds: the pages raise the game's own UI one-shot event for moving the focus, pressing and changing tab.
25 lines
1.3 KiB
C++
25 lines
1.3 KiB
C++
#pragma once
|
|
#include <cstdint>
|
|
#include <string>
|
|
|
|
namespace dingosdk::overlay { struct CallbacksV3; struct HubPage; }
|
|
|
|
namespace dingosdk::multiplayer {
|
|
// Call after the session tick, including while disconnected. All UI model
|
|
// operations execute on the client thread under the native model lock.
|
|
void tick_native_menu(std::uintptr_t base, bool loading) noexcept;
|
|
// Run on the client thread BEFORE submitting a map load, while widget assets
|
|
// and dynamic schemas still exist. Returns false if cleanup could not finish.
|
|
bool prepare_native_menu_level_load(std::uintptr_t base) noexcept;
|
|
// Register with the validated client-transition hook, before the native handler
|
|
// releases assets. Suspends updates through native loads, permanently on exit.
|
|
void native_menu_before_level_transition(std::uintptr_t base, unsigned next) noexcept;
|
|
// Uses the same validated runtime queues as the overlay. The reader must be a
|
|
// snapshot reader; it must not consume the overlay's console log cursor.
|
|
void set_native_menu_callbacks(const overlay::CallbacksV3& callbacks);
|
|
// Whether one of ReSkate's pages (Multiplayer, Custom Stuff) is the pause menu's page on
|
|
// screen right now, and which. Any thread: the overlay draws the page from it
|
|
// (overlay::HubPageFeed).
|
|
overlay::HubPage native_menu_page() noexcept;
|
|
} // namespace dingosdk::multiplayer
|