# Released under the MIT License. See LICENSE for details. # """A dummy stub module for the real _babase. The real _babase is a compiled extension module and only available in the live engine. This dummy-module allows Pylint/Mypy/etc. to function reasonably well outside of that environment. Make sure this file is never included in dirs seen by the engine! In the future perhaps this can be a stub (.pyi) file, but we will need to make sure that it works with all our tools (mypy, pylint, pycharm). NOTE: This file was autogenerated by batools.dummymodule; do not edit by hand. """ # I'm sorry Pylint. I know this file saddens you. Be strong. # pylint: disable=useless-suppression # pylint: disable=unnecessary-pass # pylint: disable=use-dict-literal # pylint: disable=use-list-literal # pylint: disable=unused-argument # pylint: disable=missing-docstring # pylint: disable=too-many-locals # pylint: disable=redefined-builtin # pylint: disable=too-many-lines # pylint: disable=redefined-outer-name # pylint: disable=invalid-name # pylint: disable=no-value-for-parameter from __future__ import annotations from typing import TYPE_CHECKING, overload, Sequence, TypeVar if TYPE_CHECKING: from typing import Any, Callable from babase import App import babase _T = TypeVar('_T') app: App def _uninferrable() -> Any: """Get an "Any" in mypy and "uninferrable" in Pylint.""" # pylint: disable=undefined-variable return _not_a_real_variable # type: ignore class AppTimer: """Timers are used to run code at later points in time. Category: **General Utility Classes** This class encapsulates a timer based on app-time. The underlying timer will be destroyed when this object is no longer referenced. If you do not want to worry about keeping a reference to your timer around, use the babase.apptimer() function instead to get a one-off timer. ##### Arguments ###### time > Length of time in seconds that the timer will wait before firing. ###### call > A callable Python object. Remember that the timer will retain a strong reference to the callable for as long as it exists, so you may want to look into concepts such as babase.WeakCall if that is not desired. ###### repeat > If True, the timer will fire repeatedly, with each successive firing having the same delay as the first. ##### Example Use a Timer object to print repeatedly for a few seconds: ... def say_it(): ... babase.screenmessage('BADGER!') ... def stop_saying_it(): ... global g_timer ... g_timer = None ... babase.screenmessage('MUSHROOM MUSHROOM!') ... # Create our timer; it will run as long as we have the self.t ref. ... g_timer = babase.AppTimer(0.3, say_it, repeat=True) ... # Now fire off a one-shot timer to kill it. ... babase.apptimer(3.89, stop_saying_it) """ def __init__( self, time: float, call: Callable[[], Any], repeat: bool = False ) -> None: pass class ContextCall: """A context-preserving callable. Category: **General Utility Classes** A ContextCall wraps a callable object along with a reference to the current context (see babase.ContextRef); it handles restoring the context when run and automatically clears itself if the context it belongs to dies. Generally you should not need to use this directly; all standard Ballistica callbacks involved with timers, materials, UI functions, etc. handle this under-the-hood so you don't have to worry about it. The only time it may be necessary is if you are implementing your own callbacks, such as a worker thread that does some action and then runs some game code when done. By wrapping said callback in one of these, you can ensure that you will not inadvertently be keeping the current activity alive or running code in a torn-down (expired) context_ref. You can also use babase.WeakCall for similar functionality, but ContextCall has the added bonus that it will not run during context_ref shutdown, whereas babase.WeakCall simply looks at whether the target object instance still exists. ##### Examples **Example A:** code like this can inadvertently prevent our activity (self) from ending until the operation completes, since the bound method we're passing (self.dosomething) contains a strong-reference to self). >>> start_some_long_action(callback_when_done=self.dosomething) **Example B:** in this case our activity (self) can still die properly; the callback will clear itself when the activity starts shutting down, becoming a harmless no-op and releasing the reference to our activity. >>> start_long_action( ... callback_when_done=babase.ContextCall(self.mycallback)) """ def __init__(self, call: Callable) -> None: pass def __call__(self) -> None: """Support for calling.""" pass class ContextRef: """Store or use a ballistica context. Category: **General Utility Classes** Many operations such as bascenev1.newnode() or bascenev1.gettexture() operate implicitly on a current 'context'. A context is some sort of state that functionality can implicitly use. Context determines, for example, which scene nodes or textures get added to without having to specify it explicitly in the newnode()/gettexture() call. Contexts can also affect object lifecycles; for example a babase.ContextCall will become a no-op when the context it was created in is destroyed. In general, if you are a modder, you should not need to worry about contexts; mod code should mostly be getting run in the correct context and timers and other callbacks will take care of saving and restoring contexts automatically. There may be rare cases, however, where you need to deal directly with contexts, and that is where this class comes in. Creating a babase.ContextRef() will capture a reference to the current context. Other modules may provide ways to access their contexts; for example a bascenev1.Activity instance has a 'context' attribute. You can also use babase.ContextRef.empty() to create a reference to *no* context. Some code such as UI calls may expect this and may complain if you try to use them within a context. ##### Usage ContextRefs are generally used with the Python 'with' statement, which sets the context they point to as current on entry and resets it to the previous value on exit. ##### Example Explicitly create a few UI bits with no context set. (UI stuff may complain if called within a context): >>> with bui.ContextRef.empty(): ... my_container = bui.containerwidget() """ def __init__( self, ) -> None: pass def __enter__(self) -> None: """Support for "with" statement.""" pass def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> Any: """Support for "with" statement.""" pass @classmethod def empty(cls) -> ContextRef: """Return a ContextRef pointing to no context. This is useful when code should be run free of a context. For example, UI code generally insists on being run this way. Otherwise, callbacks set on the UI could inadvertently stop working due to a game activity ending, which would be unintuitive behavior. """ return ContextRef() def is_empty(self) -> bool: """Whether the context was created as empty.""" return bool() def is_expired(self) -> bool: """Whether the context has expired.""" return bool() class DisplayTimer: """Timers are used to run code at later points in time. Category: **General Utility Classes** This class encapsulates a timer based on display-time. The underlying timer will be destroyed when this object is no longer referenced. If you do not want to worry about keeping a reference to your timer around, use the babase.displaytimer() function instead to get a one-off timer. Display-time is a time value intended to be used for animation and other visual purposes. It will generally increment by a consistent amount each frame. It will pass at an overall similar rate to AppTime, but trades accuracy for smoothness. ##### Arguments ###### time > Length of time in seconds that the timer will wait before firing. ###### call > A callable Python object. Remember that the timer will retain a strong reference to the callable for as long as it exists, so you may want to look into concepts such as babase.WeakCall if that is not desired. ###### repeat > If True, the timer will fire repeatedly, with each successive firing having the same delay as the first. ##### Example Use a Timer object to print repeatedly for a few seconds: ... def say_it(): ... babase.screenmessage('BADGER!') ... def stop_saying_it(): ... global g_timer ... g_timer = None ... babase.screenmessage('MUSHROOM MUSHROOM!') ... # Create our timer; it will run as long as we have the self.t ref. ... g_timer = babase.DisplayTimer(0.3, say_it, repeat=True) ... # Now fire off a one-shot timer to kill it. ... babase.displaytimer(3.89, stop_saying_it) """ def __init__( self, time: float, call: Callable[[], Any], repeat: bool = False ) -> None: pass class FeatureSetData: """Internal.""" pass class SimpleSound: """A simple sound wrapper for internal use. Do not use for gameplay code as it will only play locally. """ def play(self) -> None: """Play the sound locally.""" return None class Vec3(Sequence[float]): """A vector of 3 floats. Category: **General Utility Classes** These can be created the following ways (checked in this order): - with no args, all values are set to 0 - with a single numeric arg, all values are set to that value - with a single three-member sequence arg, sequence values are copied - otherwise assumes individual x/y/z args (positional or keywords) """ x: float """The vector's X component.""" y: float """The vector's Y component.""" z: float """The vector's Z component.""" # pylint: disable=function-redefined @overload def __init__(self) -> None: pass @overload def __init__(self, value: float): pass @overload def __init__(self, values: Sequence[float]): pass @overload def __init__(self, x: float, y: float, z: float): pass def __init__(self, *args: Any, **kwds: Any): pass def __add__(self, other: Vec3) -> Vec3: return self def __sub__(self, other: Vec3) -> Vec3: return self @overload def __mul__(self, other: float) -> Vec3: return self @overload def __mul__(self, other: Sequence[float]) -> Vec3: return self def __mul__(self, other: Any) -> Any: return self @overload def __rmul__(self, other: float) -> Vec3: return self @overload def __rmul__(self, other: Sequence[float]) -> Vec3: return self def __rmul__(self, other: Any) -> Any: return self # (for index access) def __getitem__(self, typeargs: Any) -> Any: return 0.0 def __len__(self) -> int: return 3 # (for iterator access) def __iter__(self) -> Any: return self def __next__(self) -> float: return 0.0 def __neg__(self) -> Vec3: return self def __setitem__(self, index: int, val: float) -> None: pass def cross(self, other: Vec3) -> Vec3: """Returns the cross product of this vector and another.""" return Vec3() def dot(self, other: Vec3) -> float: """Returns the dot product of this vector and another.""" return float() def length(self) -> float: """Returns the length of the vector.""" return float() def normalized(self) -> Vec3: """Returns a normalized version of the vector.""" return Vec3() def add_clean_frame_callback(call: Callable) -> None: """(internal) Provide an object to be called once the next non-progress-bar-frame has been rendered. Useful for queueing things to load in the background without elongating any current progress-bar-load. """ return None def android_get_external_files_dir() -> str: """(internal) Returns the android external storage path, or None if there is none on this device """ return str() def app_instance_uuid() -> str: """(internal)""" return str() def appname() -> str: """(internal)""" return str() def appnameupper() -> str: """(internal) Return whether this build of the game can display full unicode such as Emoji, Asian languages, etc. """ return str() def apptime() -> babase.AppTime: """Return the current app-time in seconds. Category: **General Utility Functions** App-time is a monotonic time value; it starts at 0.0 when the app launches and will never jump by large amounts or go backwards, even if the system time changes. Its progression will pause when the app is in a suspended state. Note that the AppTime returned here is simply float; it just has a unique type in the type-checker's eyes to help prevent it from being accidentally used with time functionality expecting other time types. """ import babase # pylint: disable=cyclic-import return babase.AppTime(0.0) def apptimer(time: float, call: Callable[[], Any]) -> None: """Schedule a callable object to run based on app-time. Category: **General Utility Functions** This function creates a one-off timer which cannot be canceled or modified once created. If you require the ability to do so, or need a repeating timer, use the babase.AppTimer class instead. ##### Arguments ###### time (float) > Length of time in seconds that the timer will wait before firing. ###### call (Callable[[], Any]) > A callable Python object. Note that the timer will retain a strong reference to the callable for as long as the timer exists, so you may want to look into concepts such as babase.WeakCall if that is not desired. ##### Examples Print some stuff through time: >>> babase.screenmessage('hello from now!') >>> babase.apptimer(1.0, babase.Call(babase.screenmessage, 'hello from the future!')) >>> babase.apptimer(2.0, babase.Call(babase.screenmessage, ... 'hello from the future 2!')) """ return None def can_display_full_unicode() -> bool: """(internal)""" return bool() def charstr(char_id: babase.SpecialChar) -> str: """Get a unicode string representing a special character. Category: **General Utility Functions** Note that these utilize the private-use block of unicode characters (U+E000-U+F8FF) and are specific to the game; exporting or rendering them elsewhere will be meaningless. See babase.SpecialChar for the list of available characters. """ return str() def clipboard_get_text() -> str: """Return text currently on the system clipboard. Category: **General Utility Functions** Ensure that babase.clipboard_has_text() returns True before calling this function. """ return str() def clipboard_has_text() -> bool: """Return whether there is currently text on the clipboard. Category: **General Utility Functions** This will return False if no system clipboard is available; no need to call babase.clipboard_is_supported() separately. """ return bool() def clipboard_is_supported() -> bool: """Return whether this platform supports clipboard operations at all. Category: **General Utility Functions** If this returns False, UIs should not show 'copy to clipboard' buttons, etc. """ return bool() def clipboard_set_text(value: str) -> None: """Copy a string to the system clipboard. Category: **General Utility Functions** Ensure that babase.clipboard_is_supported() returns True before adding buttons/etc. that make use of this functionality. """ return None def commit_config(config: str) -> None: """(internal)""" return None def contains_python_dist() -> bool: """(internal)""" return bool() def debug_print_py_err() -> None: """(internal) Debugging func for tracking leaked Python errors in the C++ layer. """ return None def display_log(name: str, level: str, message: str) -> None: """(internal) Sends a log message to the in-game console and any per-platform log destinations (Android log, etc.). This generally is not called directly and should instead be fed Python logging output. """ return None def displaytime() -> babase.DisplayTime: """Return the current display-time in seconds. Category: **General Utility Functions** Display-time is a time value intended to be used for animation and other visual purposes. It will generally increment by a consistent amount each frame. It will pass at an overall similar rate to AppTime, but trades accuracy for smoothness. Note that the value returned here is simply a float; it just has a unique type in the type-checker's eyes to help prevent it from being accidentally used with time functionality expecting other time types. """ import babase # pylint: disable=cyclic-import return babase.DisplayTime(0.0) def displaytimer(time: float, call: Callable[[], Any]) -> None: """Schedule a callable object to run based on display-time. Category: **General Utility Functions** This function creates a one-off timer which cannot be canceled or modified once created. If you require the ability to do so, or need a repeating timer, use the babase.DisplayTimer class instead. Display-time is a time value intended to be used for animation and other visual purposes. It will generally increment by a consistent amount each frame. It will pass at an overall similar rate to AppTime, but trades accuracy for smoothness. ##### Arguments ###### time (float) > Length of time in seconds that the timer will wait before firing. ###### call (Callable[[], Any]) > A callable Python object. Note that the timer will retain a strong reference to the callable for as long as the timer exists, so you may want to look into concepts such as babase.WeakCall if that is not desired. ##### Examples Print some stuff through time: >>> babase.screenmessage('hello from now!') >>> babase.displaytimer(1.0, babase.Call(babase.screenmessage, ... 'hello from the future!')) >>> babase.displaytimer(2.0, babase.Call(babase.screenmessage, ... 'hello from the future 2!')) """ return None def do_apply_app_config() -> None: """(internal)""" return None def do_once() -> bool: """Return whether this is the first time running a line of code. Category: **General Utility Functions** This is used by 'print_once()' type calls to keep from overflowing logs. The call functions by registering the filename and line where The call is made from. Returns True if this location has not been registered already, and False if it has. ##### Example This print will only fire for the first loop iteration: >>> for i in range(10): ... if babase.do_once(): ... print('HelloWorld once from loop!') """ return bool() def ehv() -> None: """(internal)""" return None def empty_app_mode_activate() -> None: """(internal)""" return None def empty_app_mode_deactivate() -> None: """(internal)""" return None def empty_app_mode_handle_intent_default() -> None: """(internal)""" return None def empty_app_mode_handle_intent_exec(command: str) -> None: """(internal)""" return None def env() -> dict: """(internal) Returns a dict containing general info about the operating environment such as version, platform, etc. This info is now exposed through babase.App; refer to those docs for info on specific elements. """ return dict() def evaluate_lstr(value: str) -> str: """(internal)""" return str() def exec_arg() -> str | None: """(internal)""" return '' def fade_screen( to: int = 0, time: float = 0.25, endcall: Callable[[], None] | None = None ) -> None: """(internal) Fade the local game screen in our out from black over a duration of time. if "to" is 0, the screen will fade out to black. Otherwise it will fade in from black. If endcall is provided, it will be run after a completely faded frame is drawn. """ return None def fatal_error(message: str) -> None: """Trigger a fatal error. Use this in situations where it is not possible for the engine to continue on in a useful way. This can sometimes help provide more clear information at the exact source of a problem as compared to raising an Exception. In the vast majority of cases, however, Exceptions should be preferred. """ return None def get_appconfig_builtin_keys() -> list[str]: """(internal)""" return ['blah', 'blah2'] def get_appconfig_default_value(key: str) -> Any: """(internal)""" return _uninferrable() def get_camera_position() -> tuple[float, ...]: """(internal) WARNING: these camera controls will not apply to network clients and may behave unpredictably in other ways. Use them only for tinkering. """ return (0.0, 0.0, 0.0) def get_camera_target() -> tuple[float, ...]: """(internal) WARNING: these camera controls will not apply to network clients and may behave unpredictably in other ways. Use them only for tinkering. """ return (0.0, 0.0, 0.0) def get_display_resolution() -> tuple[int, int] | None: """(internal) Return the currently selected display resolution for fullscreen display. Returns None if resolutions cannot be directly set. """ return (0, 0) def get_idle_time() -> int: """(internal) Returns the amount of time since any game input has been received. """ return int() def get_immediate_return_code() -> int | None: """(internal)""" return 0 def get_low_level_config_value(key: str, default_value: int) -> int: """(internal)""" return int() def get_max_graphics_quality() -> str: """(internal) Return the max graphics-quality supported on the current hardware. """ return str() def get_replays_dir() -> str: """(internal)""" return str() def get_string_height(string: str, suppress_warning: bool = False) -> float: """(internal) Given a string, returns its height using the standard small app font. """ return float() def get_string_width(string: str, suppress_warning: bool = False) -> float: """(internal) Given a string, returns its width using the standard small app font. """ return float() def get_thread_name() -> str: """(internal) Returns the name of the current thread. This may vary depending on platform and should not be used in logic; only for debugging. """ return str() def get_v1_cloud_log() -> str: """(internal)""" return str() def get_v1_cloud_log_file_path() -> str: """(internal) Return the path to the app log file. """ return str() def get_volatile_data_directory() -> str: """(internal) Return the path to the app volatile data directory. This directory is for data generated by the app that does not need to be backed up and can be recreated if necessary. """ return str() def getapp() -> babase.App: """(internal)""" import babase # pylint: disable=cyclic-import return babase.App() def getsimplesound(name: str) -> SimpleSound: """(internal).""" return SimpleSound() def has_gamma_control() -> bool: """(internal) Returns whether the system can adjust overall screen gamma) """ return bool() def has_user_run_commands() -> bool: """(internal)""" return bool() def hastouchscreen() -> bool: """(internal) Return whether a touchscreen is present on the current device. """ return bool() def have_chars(text: str) -> bool: """(internal)""" return bool() def have_permission(permission: babase.Permission) -> bool: """(internal)""" return bool() def in_logic_thread() -> bool: """(internal) Returns whether or not the current thread is the logic thread. """ return bool() def increment_analytics_count(name: str, increment: int = 1) -> None: """(internal)""" return None def increment_analytics_count_raw_2( name: str, uses_increment: bool = True, increment: int = 1 ) -> None: """(internal)""" return None def increment_analytics_counts_raw(name: str, increment: int = 1) -> None: """(internal)""" return None def is_log_full() -> bool: """(internal)""" return bool() def is_os_playing_music() -> bool: """(internal) Tells whether the OS is currently playing music of some sort. (Used to determine whether the game should avoid playing its own) """ return bool() def is_running_on_fire_tv() -> bool: """(internal)""" return bool() def is_running_on_ouya() -> bool: """(internal)""" return bool() def is_xcode_build() -> bool: """(internal)""" return bool() def lifecyclelog(message: str) -> None: """(internal)""" return None def lock_all_input() -> None: """(internal) Prevents all keyboard, mouse, and gamepad events from being processed. """ return None def login_adapter_back_end_active_change(login_type: str, active: bool) -> None: """(internal)""" return None def login_adapter_get_sign_in_token(login_type: str, attempt_id: int) -> None: """(internal)""" return None def mac_music_app_get_library_source() -> None: """(internal)""" return None def mac_music_app_get_playlists() -> list[str]: """(internal)""" return ['blah', 'blah2'] def mac_music_app_get_volume() -> int: """(internal)""" return int() def mac_music_app_init() -> None: """(internal)""" return None def mac_music_app_play_playlist(playlist: str) -> bool: """(internal)""" return bool() def mac_music_app_set_volume(volume: int) -> None: """(internal)""" return None def mac_music_app_stop() -> None: """(internal)""" return None def mark_log_sent() -> None: """(internal)""" return None def music_player_play(files: Any) -> None: """(internal) Starts internal music file playback (for internal use) """ return None def music_player_set_volume(volume: float) -> None: """(internal) Sets internal music player volume (for internal use) """ return None def music_player_shutdown() -> None: """(internal) Finalizes internal music file playback (for internal use) """ return None def music_player_stop() -> None: """(internal) Stops internal music file playback (for internal use) """ return None def native_stack_trace() -> str | None: """Return a native stack trace as a string, or None if not available. Category: **General Utility Functions** Stack traces contain different data and formatting across platforms. Only use them for debugging. """ return '' def on_app_running() -> None: """(internal)""" return None def on_initial_app_mode_set() -> None: """(internal)""" return None def open_dir_externally(path: str) -> None: """(internal) Open the provided dir in the default external app. """ return None def pre_env() -> dict: """(internal) Returns a dict containing general info about the operating environment such as version, platform, etc. This info is now exposed through babase.App; refer to those docs for info on specific elements. """ return dict() def print_context() -> None: """(internal) Prints info about the current context_ref state; for debugging. """ return None def print_load_info() -> None: """(internal) Category: **General Utility Functions** """ return None def pushcall( call: Callable, from_other_thread: bool = False, suppress_other_thread_warning: bool = False, other_thread_use_fg_context: bool = False, raw: bool = False, ) -> None: """Push a call to the logic event-loop. Category: **General Utility Functions** This call expects to be used in the logic thread, and will automatically save and restore the babase.Context to behave seamlessly. If you want to push a call from outside of the logic thread, however, you can pass 'from_other_thread' as True. In this case the call will always run in the UI context_ref on the logic thread or whichever context_ref is in the foreground if other_thread_use_fg_context is True. Passing raw=True will disable thread checks and context_ref sets/restores. """ return None # noinspection PyShadowingBuiltins def quit(soft: bool = False, back: bool = False) -> None: """Quit the game. Category: **General Utility Functions** On systems like Android, 'soft' will end the activity but keep the app running. """ return None def reached_end_of_babase() -> None: """A simple user-agent-string that should be used in any web requests made on behalf of the engine. """ return None def reload_media() -> None: """(internal) Reload all currently loaded game media; useful for development/debugging. """ return None def request_permission(permission: babase.Permission) -> None: """(internal)""" return None def resolve_appconfig_value(key: str) -> Any: """(internal)""" return _uninferrable() def run_app() -> None: """Run the app to completion. Note that this only works on platforms/builds where ballistica manages its own event loop. """ return None def safecolor( color: Sequence[float], target_intensity: float = 0.6 ) -> tuple[float, ...]: """Given a color tuple, return a color safe to display as text. Category: **General Utility Functions** Accepts tuples of length 3 or 4. This will slightly brighten very dark colors, etc. """ return (0.0, 0.0, 0.0) def screenmessage( message: str | babase.Lstr, color: Sequence[float] | None = None, log: bool = False, ) -> None: """Print a message to the local client's screen, in a given color. Category: **General Utility Functions** Note that this version of the function is purely for local display. To broadcast screen messages in network play, look for methods such as broadcastmessage() provided by the scene-version packages. """ return None def set_analytics_screen(screen: str) -> None: """Used for analytics to see where in the app players spend their time. Category: **General Utility Functions** Generally called when opening a new window or entering some UI. 'screen' should be a string description of an app location ('Main Menu', etc.) """ return None def set_camera_manual(value: bool) -> None: """(internal) WARNING: these camera controls will not apply to network clients and may behave unpredictably in other ways. Use them only for tinkering. """ return None def set_camera_position(x: float, y: float, z: float) -> None: """(internal) WARNING: these camera controls will not apply to network clients and may behave unpredictably in other ways. Use them only for tinkering. """ return None def set_camera_target(x: float, y: float, z: float) -> None: """(internal) WARNING: these camera controls will not apply to network clients and may behave unpredictably in other ways. Use them only for tinkering. """ return None def set_internal_language_keys( listobj: list[tuple[str, str]], random_names_list: list[tuple[str, str]] ) -> None: """(internal)""" return None def set_low_level_config_value(key: str, value: int) -> None: """(internal)""" return None def set_platform_misc_read_vals(mode: str) -> None: """(internal)""" return None def set_stress_testing(testing: bool, player_count: int) -> None: """(internal)""" return None def set_thread_name(name: str) -> None: """(internal) Sets the name of the current thread (on platforms where this is available). EventLoop names are only for debugging and should not be used in logic, as naming behavior can vary across platforms. """ return None def set_ui_input_device(input_device_id: int | None) -> None: """(internal) Sets the input-device that currently owns the user interface. """ return None def setup_sigint() -> None: """(internal)""" return None def show_progress_bar() -> None: """(internal) Category: **General Utility Functions** """ return None def submit_analytics_counts() -> None: """(internal)""" return None def unlock_all_input() -> None: """(internal) Resumes normal keyboard, mouse, and gamepad event processing. """ return None def user_agent_string() -> str: """(internal)""" return str() def user_ran_commands() -> None: """(internal)""" return None def v1_cloud_log(message: str) -> None: """(internal) Push messages to the old v1 cloud log. """ return None def workspaces_in_use() -> bool: """(internal) Returns whether workspaces functionality has been enabled at any point this run. """ return bool()