/*************************************************************************/ /* main.cpp */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) */ /* */ /* Permission is hereby granted, free of charge, to any person obtaining */ /* a copy of this software and associated documentation files (the */ /* "Software"), to deal in the Software without restriction, including */ /* without limitation the rights to use, copy, modify, merge, publish, */ /* distribute, sublicense, and/or sell copies of the Software, and to */ /* permit persons to whom the Software is furnished to do so, subject to */ /* the following conditions: */ /* */ /* The above copyright notice and this permission notice shall be */ /* included in all copies or substantial portions of the Software. */ /* */ /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "main.h" #include "core/register_core_types.h" #include "drivers/register_driver_types.h" #include "globals.h" #include "input_map.h" #include "io/resource_loader.h" #include "message_queue.h" #include "modules/register_module_types.h" #include "os/os.h" #include "path_remap.h" #include "scene/main/scene_main_loop.h" #include "scene/register_scene_types.h" #include "script_debugger_local.h" #include "script_debugger_remote.h" #include "servers/register_server_types.h" #include "splash.h" #include "io/resource_loader.h" #include "script_language.h" #include "core/io/ip.h" #include "main/tests/test_main.h" #include "os/dir_access.h" #include "scene/main/viewport.h" #include "scene/resources/packed_scene.h" #ifdef TOOLS_ENABLED #include "editor/doc/doc_data.h" #include "editor/editor_node.h" #include "editor/project_manager.h" #endif #include "io/file_access_network.h" #include "servers/physics_2d_server.h" #include "servers/spatial_sound_2d_server.h" #include "servers/spatial_sound_server.h" #include "core/io/file_access_pack.h" #include "core/io/file_access_zip.h" #include "core/io/stream_peer_ssl.h" #include "core/io/stream_peer_tcp.h" #include "main/input_default.h" #include "performance.h" #include "translation.h" #include "version.h" static Globals *globals = NULL; static InputMap *input_map = NULL; static bool _start_success = false; static ScriptDebugger *script_debugger = NULL; static MessageQueue *message_queue = NULL; static Performance *performance = NULL; static PathRemap *path_remap; static PackedData *packed_data = NULL; #ifdef MINIZIP_ENABLED static ZipArchive *zip_packed_data = NULL; #endif static FileAccessNetworkClient *file_access_network_client = NULL; static TranslationServer *translation_server = NULL; static OS::VideoMode video_mode; static bool init_maximized = false; static bool init_windowed = false; static bool init_fullscreen = false; static bool init_always_on_top = false; static bool init_use_custom_pos = false; #ifdef DEBUG_ENABLED static bool debug_collisions = false; static bool debug_navigation = false; #endif static int frame_delay = 0; static Vector2 init_custom_pos; static int video_driver_idx = -1; static int audio_driver_idx = -1; static String locale; static bool use_debug_profiler = false; static bool force_lowdpi = false; static int init_screen = -1; static bool use_vsync = true; static bool editor = false; static OS::ProcessID allow_focus_steal_pid = 0; static String unescape_cmdline(const String &p_str) { return p_str.replace("%20", " "); } //#define DEBUG_INIT #ifdef DEBUG_INIT #define MAIN_PRINT(m_txt) print_line(m_txt) #else #define MAIN_PRINT(m_txt) #endif void Main::print_help(const char *p_binary) { OS::get_singleton()->print(VERSION_FULL_NAME " - https://godotengine.org\n"); OS::get_singleton()->print("(c) 2007-2018 Juan Linietsky, Ariel Manzur.\n"); OS::get_singleton()->print("(c) 2014-2018 Godot Engine contributors.\n"); OS::get_singleton()->print("\n"); OS::get_singleton()->print("Usage: %s [options] [path to scene or 'engine.cfg' file]\n", p_binary); OS::get_singleton()->print("\n"); OS::get_singleton()->print("Options:\n"); OS::get_singleton()->print("\t-h, -help : Print these usage instructions.\n"); OS::get_singleton()->print("\t-path : Path to a game, containing engine.cfg.\n"); #ifdef TOOLS_ENABLED OS::get_singleton()->print("\t-e, -editor : Bring up the editor instead of running the scene.\n"); #endif OS::get_singleton()->print("\t-test : Run a test ("); const char **test_names = tests_get_names(); const char *coma = ""; while (*test_names) { OS::get_singleton()->print("%s%s", coma, *test_names); test_names++; coma = ", "; } OS::get_singleton()->print(").\n"); OS::get_singleton()->print("\t-r x : Request window resolution.\n"); OS::get_singleton()->print("\t-p x : Request window position.\n"); OS::get_singleton()->print("\t-f : Request fullscreen.\n"); OS::get_singleton()->print("\t-mx : Request maximized.\n"); OS::get_singleton()->print("\t-w : Request windowed.\n"); OS::get_singleton()->print("\t-t : Request always-on-top.\n"); OS::get_singleton()->print("\t-vd : Video driver ("); for (int i = 0; i < OS::get_singleton()->get_video_driver_count(); i++) { if (i != 0) OS::get_singleton()->print(", "); OS::get_singleton()->print("%s", OS::get_singleton()->get_video_driver_name(i)); } OS::get_singleton()->print(").\n"); OS::get_singleton()->print("\t-ldpi : Force low-dpi mode (OSX only).\n"); OS::get_singleton()->print("\t-ad : Audio driver ("); for (int i = 0; i < OS::get_singleton()->get_audio_driver_count(); i++) { if (i != 0) OS::get_singleton()->print(", "); OS::get_singleton()->print("%s", OS::get_singleton()->get_audio_driver_name(i)); } OS::get_singleton()->print(").\n"); OS::get_singleton()->print("\t-rthread : Render thread mode ('unsafe', 'safe', 'separate').\n"); OS::get_singleton()->print("\t-s, -script