// SPDX-License-Identifier: BSD-2-Clause // Copyright (c) 2025 Kirill Dmitrievich // File: globals.hh // Description: Global variables #ifndef CLIENT_GLOBALS_HH #define CLIENT_GLOBALS_HH #pragma once #include "shared/globals.hh" namespace config { class KeyBind; class GamepadAxis; class GamepadButton; } // namespace config class ConfigMap; struct GLFWwindow; struct ImFont; class Dimension; namespace globals { extern ConfigMap client_config; extern GLFWwindow* window; // Some gamesystems that aren't really // gameplay-oriented might still use client // framerate to interpolate discrete things // so it's still a good idea to keep these available extern float window_frametime; extern float window_frametime_avg; extern std::uint64_t window_frametime_us; extern std::uint64_t window_framecount; // https://gafferongames.com/post/fix_your_timestep/ extern std::uint64_t fixed_accumulator; extern int width; extern int height; extern float aspect; extern GLuint world_fbo; extern GLuint world_fbo_color; extern GLuint world_fbo_depth; extern std::size_t num_drawcalls; extern std::size_t num_triangles; extern ENetHost* client_host; extern Dimension* dimension; extern entt::entity player; extern ImFont* font_unscii16; extern ImFont* font_unscii8; extern config::KeyBind* gui_keybind_ptr; extern config::GamepadAxis* gui_gamepad_axis_ptr; extern config::GamepadButton* gui_gamepad_button_ptr; extern unsigned int gui_scale; extern unsigned int gui_screen; extern ALCdevice* sound_dev; extern ALCcontext* sound_ctx; } // namespace globals #endif