|
@@ -28,6 +28,7 @@
|
|
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|
|
/*************************************************************************/
|
|
|
#include "main.h"
|
|
|
+
|
|
|
#include "app_icon.gen.h"
|
|
|
#include "core/register_core_types.h"
|
|
|
#include "drivers/register_driver_types.h"
|
|
@@ -110,6 +111,7 @@ static bool force_lowdpi = false;
|
|
|
static int init_screen = -1;
|
|
|
static bool use_vsync = true;
|
|
|
static bool editor = false;
|
|
|
+static bool show_help = false;
|
|
|
|
|
|
static OS::ProcessID allow_focus_steal_pid = 0;
|
|
|
|
|
@@ -128,63 +130,88 @@ static String unescape_cmdline(const String &p_str) {
|
|
|
|
|
|
void Main::print_help(const char *p_binary) {
|
|
|
|
|
|
- OS::get_singleton()->print(VERSION_FULL_NAME " (c) 2008-2017 Juan Linietsky, Ariel Manzur.\n");
|
|
|
+ OS::get_singleton()->print(VERSION_FULL_NAME " - https://godotengine.org\n");
|
|
|
+ OS::get_singleton()->print("(c) 2007-2017 Juan Linietsky, Ariel Manzur.\n");
|
|
|
+ OS::get_singleton()->print("(c) 2014-2017 Godot Engine contributors.\n");
|
|
|
+ OS::get_singleton()->print("\n");
|
|
|
OS::get_singleton()->print("Usage: %s [options] [path to scene or 'project.godot' file]\n", p_binary);
|
|
|
- OS::get_singleton()->print("Options:\n");
|
|
|
+ OS::get_singleton()->print("\n");
|
|
|
+
|
|
|
+ OS::get_singleton()->print("General options:\n");
|
|
|
OS::get_singleton()->print(" -h, --help Display this help message.\n");
|
|
|
- OS::get_singleton()->print(" --path <directory> Path to the project (<directory> must contain a 'project.godot' file).\n");
|
|
|
+ OS::get_singleton()->print(" -v, --verbose Use verbose stdout mode.\n");
|
|
|
+ OS::get_singleton()->print(" --quiet Quiet mode, silences stdout messages. Errors are still displayed.\n");
|
|
|
+ OS::get_singleton()->print("\n");
|
|
|
+
|
|
|
+ OS::get_singleton()->print("Run options:\n");
|
|
|
#ifdef TOOLS_ENABLED
|
|
|
- OS::get_singleton()->print(" -e, --editor Bring up the editor instead of running the scene.\n");
|
|
|
+ OS::get_singleton()->print(" -e, --editor Start the editor instead of running the scene.\n");
|
|
|
+ OS::get_singleton()->print(" -p, --project-manager Start the project manager, even if a project is auto-detected.\n");
|
|
|
#endif
|
|
|
- OS::get_singleton()->print(" --test <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(" -l, --language <locale> Use a specific locale (<locale> being a two-letter code).\n");
|
|
|
+ OS::get_singleton()->print(" --path <directory> Path to a project (<directory> must contain a 'project.godot' file).\n");
|
|
|
+ OS::get_singleton()->print(" --main-pack <file> Path to a pack (.pck) file to load.\n");
|
|
|
+ OS::get_singleton()->print(" --render-thread <mode> Render thread mode ('unsafe', 'safe', 'separate').\n");
|
|
|
+ OS::get_singleton()->print(" --remote-fs <address> Remote filesystem (<host/IP>[:<port>] address).\n");
|
|
|
+ OS::get_singleton()->print(" --remote-fs-password <password> Password for remote filesystem.\n");
|
|
|
+ OS::get_singleton()->print(" --audio-driver <driver> 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(" -r, --resolution <W>x<H> Request window resolution.\n");
|
|
|
- OS::get_singleton()->print(" -p, --position <X>,<Y> Request window position.\n");
|
|
|
- OS::get_singleton()->print(" -f, --fullscreen Request fullscreen mode.\n");
|
|
|
- OS::get_singleton()->print(" -m, --maximized Request a maximized window.\n");
|
|
|
- OS::get_singleton()->print(" -w, --windowed Request windowed mode.\n");
|
|
|
OS::get_singleton()->print(" --video-driver <driver> 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(" --low-dpi Force low-DPI mode (macOS only).\n");
|
|
|
+ OS::get_singleton()->print("\n");
|
|
|
|
|
|
- OS::get_singleton()->print(" --audio-driver <driver> Audio driver (");
|
|
|
- for (int i = 0; i < OS::get_singleton()->get_audio_driver_count(); i++) {
|
|
|
+ OS::get_singleton()->print("Display options:\n");
|
|
|
+ OS::get_singleton()->print(" -f, --fullscreen Request fullscreen mode.\n");
|
|
|
+ OS::get_singleton()->print(" -m, --maximized Request a maximized window.\n");
|
|
|
+ OS::get_singleton()->print(" -w, --windowed Request windowed mode.\n");
|
|
|
+ OS::get_singleton()->print(" --resolution <W>x<H> Request window resolution.\n");
|
|
|
+ OS::get_singleton()->print(" --position <X>,<Y> Request window position.\n");
|
|
|
+ OS::get_singleton()->print(" --low-dpi Force low-DPI mode (macOS only).\n");
|
|
|
+ OS::get_singleton()->print(" --no-window Disable window creation (Windows only). Useful together with --script.\n");
|
|
|
+ OS::get_singleton()->print("\n");
|
|
|
|
|
|
- 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(" --render-thread <mode> Render thread mode ('unsafe', 'safe', 'separate').\n");
|
|
|
- OS::get_singleton()->print(" -s, --script <script> Run a script.\n");
|
|
|
+ OS::get_singleton()->print("Debug options:\n");
|
|
|
OS::get_singleton()->print(" -d, --debug Debug (local stdout debugger).\n");
|
|
|
+ OS::get_singleton()->print(" -b, --breakpoints Breakpoint list as source::line comma-separated pairs, no spaces (use %%20 instead).\n");
|
|
|
+ OS::get_singleton()->print(" --profiling Enable profiling in the script debugger.\n");
|
|
|
+ OS::get_singleton()->print(" --remote-debug <address> Remote debug (<host/IP>:<port> address).\n");
|
|
|
+#ifdef DEBUG_ENABLED
|
|
|
+ OS::get_singleton()->print(" --debug-collisions Show collisions shapes when running the scene.\n");
|
|
|
+ OS::get_singleton()->print(" --debug-navigation Show navigation polygons when running the scene.\n");
|
|
|
+#endif
|
|
|
OS::get_singleton()->print(" --frame-delay <ms> Simulate high CPU load (delay each frame by <ms> milliseconds).\n");
|
|
|
OS::get_singleton()->print(" --time-scale <scale> Force time scale (higher values are faster, 1.0 is normal speed).\n");
|
|
|
- OS::get_singleton()->print(" -b, --breakpoints Breakpoint list as source::line comma-separated pairs, no spaces (use %%20, %%2C, ... instead).\n");
|
|
|
- OS::get_singleton()->print(" -v, --verbose Use verbose stdout mode.\n");
|
|
|
- OS::get_singleton()->print(" -l, --language <locale> Use a specific locale (<locale> being a two-letter code).\n");
|
|
|
- OS::get_singleton()->print(" --remote-debug <address> Remote debug (<ip>:<port> host address).\n");
|
|
|
- OS::get_singleton()->print(" --remote-fs <host/IP>[:<port>] Remote filesystem.\n");
|
|
|
- OS::get_singleton()->print(" --remote-fs-password <password> Password for remote filesystem.\n");
|
|
|
+ OS::get_singleton()->print("\n");
|
|
|
+
|
|
|
+ OS::get_singleton()->print("Standalone tools:\n");
|
|
|
+ OS::get_singleton()->print(" -s, --script <script> Run a script.\n");
|
|
|
#ifdef TOOLS_ENABLED
|
|
|
+ OS::get_singleton()->print(" --export <target> Export the project using the given export target.\n");
|
|
|
+ OS::get_singleton()->print(" --export-debug Use together with --export, enables debug mode for the template.\n");
|
|
|
OS::get_singleton()->print(" --doctool <file> Dump the whole engine API to <file> in XML format. If <file> exists, it will be merged.\n");
|
|
|
OS::get_singleton()->print(" --no-docbase Disallow dumping the base types (used with --doctool).\n");
|
|
|
- OS::get_singleton()->print(" --export <target> Export the project using the given export target.\n");
|
|
|
+#ifdef DEBUG_METHODS_ENABLED
|
|
|
+ OS::get_singleton()->print(" --gdnative-generate-json-api Generate JSON dump of the Godot API for GDNative bindings.\n");
|
|
|
+#endif
|
|
|
+ OS::get_singleton()->print(" --test <test> Run a unit test (");
|
|
|
+ const char **test_names = tests_get_names();
|
|
|
+ const char *comma = "";
|
|
|
+ while (*test_names) {
|
|
|
+ OS::get_singleton()->print("%s'%s'", comma, *test_names);
|
|
|
+ test_names++;
|
|
|
+ comma = ", ";
|
|
|
+ }
|
|
|
+ OS::get_singleton()->print(").\n");
|
|
|
#endif
|
|
|
}
|
|
|
|
|
@@ -254,15 +281,10 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
String remotefs;
|
|
|
String remotefs_pass;
|
|
|
|
|
|
- String screen = "";
|
|
|
-
|
|
|
- List<String> pack_list;
|
|
|
Vector<String> breakpoints;
|
|
|
bool use_custom_res = true;
|
|
|
bool force_res = false;
|
|
|
|
|
|
- I = args.front();
|
|
|
-
|
|
|
packed_data = PackedData::get_singleton();
|
|
|
if (!packed_data)
|
|
|
packed_data = memnew(PackedData);
|
|
@@ -279,18 +301,17 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
packed_data->add_pack_source(zip_packed_data);
|
|
|
#endif
|
|
|
|
|
|
+ I = args.front();
|
|
|
while (I) {
|
|
|
|
|
|
List<String>::Element *N = I->next();
|
|
|
|
|
|
- if (I->get() == "--noop") {
|
|
|
-
|
|
|
- // no op
|
|
|
- } else if (I->get() == "-h" || I->get() == "--help" || I->get() == "/?") { // display help
|
|
|
+ if (I->get() == "-h" || I->get() == "--help" || I->get() == "/?") { // display help
|
|
|
|
|
|
+ show_help = true;
|
|
|
goto error;
|
|
|
|
|
|
- } else if (I->get() == "-r" || I->get() == "--resolution") { // force resolution
|
|
|
+ } else if (I->get() == "--resolution") { // force resolution
|
|
|
|
|
|
if (I->next()) {
|
|
|
|
|
@@ -298,16 +319,16 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
|
|
|
if (vm.find("x") == -1) { // invalid parameter format
|
|
|
|
|
|
- OS::get_singleton()->print("Invalid resolution argument: %s\n", vm.utf8().get_data());
|
|
|
+ OS::get_singleton()->print("Invalid resolution '%s', it should be e.g. '1280x720'.\n", vm.utf8().get_data());
|
|
|
goto error;
|
|
|
}
|
|
|
|
|
|
int w = vm.get_slice("x", 0).to_int();
|
|
|
int h = vm.get_slice("x", 1).to_int();
|
|
|
|
|
|
- if (w == 0 || h == 0) {
|
|
|
+ if (w <= 0 || h <= 0) {
|
|
|
|
|
|
- OS::get_singleton()->print("Invalid resolution, width and height must be above 0\n");
|
|
|
+ OS::get_singleton()->print("Invalid resolution '%s', width and height must be above 0.\n", vm.utf8().get_data());
|
|
|
goto error;
|
|
|
}
|
|
|
|
|
@@ -317,10 +338,10 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
|
|
|
N = I->next()->next();
|
|
|
} else {
|
|
|
- OS::get_singleton()->print("Invalid resolution argument, needs resolution\n");
|
|
|
+ OS::get_singleton()->print("Missing resolution argument, aborting.\n");
|
|
|
goto error;
|
|
|
}
|
|
|
- } else if (I->get() == "-p" || I->get() == "--position") { // position
|
|
|
+ } else if (I->get() == "--position") { // set window position
|
|
|
|
|
|
if (I->next()) {
|
|
|
|
|
@@ -328,7 +349,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
|
|
|
if (vm.find(",") == -1) { // invalid parameter format
|
|
|
|
|
|
- OS::get_singleton()->print("Invalid position argument: %s\n", vm.utf8().get_data());
|
|
|
+ OS::get_singleton()->print("Invalid position '%s', it should be e.g. '80,128'.\n", vm.utf8().get_data());
|
|
|
goto error;
|
|
|
}
|
|
|
|
|
@@ -340,7 +361,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
|
|
|
N = I->next()->next();
|
|
|
} else {
|
|
|
- OS::get_singleton()->print("Invalid position argument, needs position\n");
|
|
|
+ OS::get_singleton()->print("Missing position argument, aborting.\n");
|
|
|
goto error;
|
|
|
}
|
|
|
|
|
@@ -350,7 +371,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
} else if (I->get() == "-w" || I->get() == "--windowed") { // force windowed window
|
|
|
|
|
|
init_windowed = true;
|
|
|
- } else if (I->get() == "--profile") { // enable profiler
|
|
|
+ } else if (I->get() == "--profiling") { // enable profiling
|
|
|
|
|
|
use_debug_profiler = true;
|
|
|
} else if (I->get() == "--video-driver") { // force video driver
|
|
@@ -360,7 +381,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
video_driver = I->next()->get();
|
|
|
N = I->next()->next();
|
|
|
} else {
|
|
|
- OS::get_singleton()->print("Invalid --video-driver argument, needs driver name\n");
|
|
|
+ OS::get_singleton()->print("Missing video driver argument, aborting.\n");
|
|
|
goto error;
|
|
|
}
|
|
|
} else if (I->get() == "-l" || I->get() == "--language") { // language
|
|
@@ -370,10 +391,10 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
locale = I->next()->get();
|
|
|
N = I->next()->next();
|
|
|
} else {
|
|
|
- OS::get_singleton()->print("Invalid language argument, needs language code\n");
|
|
|
+ OS::get_singleton()->print("Missing language argument, aborting.\n");
|
|
|
goto error;
|
|
|
}
|
|
|
- } else if (I->get() == "--low-dpi") { // force low DPI
|
|
|
+ } else if (I->get() == "--low-dpi") { // force low DPI (macOS only)
|
|
|
|
|
|
force_lowdpi = true;
|
|
|
} else if (I->get() == "--remote-fs") { // remote filesystem
|
|
@@ -383,6 +404,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
remotefs = I->next()->get();
|
|
|
N = I->next()->next();
|
|
|
} else {
|
|
|
+ OS::get_singleton()->print("Missing remote filesystem address, aborting.\n");
|
|
|
goto error;
|
|
|
}
|
|
|
} else if (I->get() == "--remote-fs-password") { // remote filesystem password
|
|
@@ -392,9 +414,10 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
remotefs_pass = I->next()->get();
|
|
|
N = I->next()->next();
|
|
|
} else {
|
|
|
+ OS::get_singleton()->print("Missing remote filesystem password, aborting.\n");
|
|
|
goto error;
|
|
|
}
|
|
|
- } else if (I->get() == "--render-thread") { // rendering thread
|
|
|
+ } else if (I->get() == "--render-thread") { // render thread mode
|
|
|
|
|
|
if (I->next()) {
|
|
|
|
|
@@ -407,6 +430,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
|
|
|
N = I->next()->next();
|
|
|
} else {
|
|
|
+ OS::get_singleton()->print("Missing render thread mode argument, aborting.\n");
|
|
|
goto error;
|
|
|
}
|
|
|
|
|
@@ -417,6 +441,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
audio_driver = I->next()->get();
|
|
|
N = I->next()->next();
|
|
|
} else {
|
|
|
+ OS::get_singleton()->print("Missing audio driver argument, aborting.\n");
|
|
|
goto error;
|
|
|
}
|
|
|
|
|
@@ -427,7 +452,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
} else if (I->get() == "-e" || I->get() == "--editor") { // starts editor
|
|
|
|
|
|
editor = true;
|
|
|
- } else if (I->get() == "--no-window") { // disable window creation
|
|
|
+ } else if (I->get() == "--no-window") { // disable window creation, Windows only
|
|
|
|
|
|
OS::get_singleton()->set_no_window_mode(true);
|
|
|
} else if (I->get() == "--quiet") { // quieter output
|
|
@@ -447,6 +472,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
}
|
|
|
N = I->next()->next();
|
|
|
} else {
|
|
|
+ OS::get_singleton()->print("Missing relative or absolute path, aborting.\n");
|
|
|
goto error;
|
|
|
}
|
|
|
} else if (I->get().ends_with("project.godot")) {
|
|
@@ -474,6 +500,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
breakpoints = bplist.split(",");
|
|
|
N = I->next()->next();
|
|
|
} else {
|
|
|
+ OS::get_singleton()->print("Missing list of breakpoints, aborting.\n");
|
|
|
goto error;
|
|
|
}
|
|
|
|
|
@@ -484,6 +511,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
frame_delay = I->next()->get().to_int();
|
|
|
N = I->next()->next();
|
|
|
} else {
|
|
|
+ OS::get_singleton()->print("Missing frame delay argument, aborting.\n");
|
|
|
goto error;
|
|
|
}
|
|
|
|
|
@@ -494,20 +522,10 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
Engine::get_singleton()->set_time_scale(I->next()->get().to_double());
|
|
|
N = I->next()->next();
|
|
|
} else {
|
|
|
+ OS::get_singleton()->print("Missing time scale argument, aborting.\n");
|
|
|
goto error;
|
|
|
}
|
|
|
|
|
|
- } else if (I->get() == "--pack") {
|
|
|
-
|
|
|
- if (I->next()) {
|
|
|
-
|
|
|
- pack_list.push_back(I->next()->get());
|
|
|
- N = I->next()->next();
|
|
|
- } else {
|
|
|
-
|
|
|
- goto error;
|
|
|
- };
|
|
|
-
|
|
|
} else if (I->get() == "--main-pack") {
|
|
|
|
|
|
if (I->next()) {
|
|
@@ -515,46 +533,39 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
main_pack = I->next()->get();
|
|
|
N = I->next()->next();
|
|
|
} else {
|
|
|
-
|
|
|
+ OS::get_singleton()->print("Missing path to main pack file, aborting.\n");
|
|
|
goto error;
|
|
|
};
|
|
|
|
|
|
- } else if (I->get() == "--debug" || I->get() == "-d") {
|
|
|
+ } else if (I->get() == "-d" || I->get() == "--debug") {
|
|
|
debug_mode = "local";
|
|
|
#ifdef DEBUG_ENABLED
|
|
|
- } else if (I->get() == "--debug-collision") {
|
|
|
+ } else if (I->get() == "--debug-collisions") {
|
|
|
debug_collisions = true;
|
|
|
} else if (I->get() == "--debug-navigation") {
|
|
|
debug_navigation = true;
|
|
|
#endif
|
|
|
- } else if (I->get() == "--editor-scene") {
|
|
|
-
|
|
|
- if (I->next()) {
|
|
|
-
|
|
|
- ProjectSettings::get_singleton()->set("editor_scene", game_path = I->next()->get());
|
|
|
- } else {
|
|
|
- goto error;
|
|
|
- }
|
|
|
-
|
|
|
} else if (I->get() == "--remote-debug") {
|
|
|
if (I->next()) {
|
|
|
|
|
|
debug_mode = "remote";
|
|
|
debug_host = I->next()->get();
|
|
|
- if (debug_host.find(":") == -1) { //wrong host
|
|
|
- OS::get_singleton()->print("Invalid debug host string\n");
|
|
|
+ if (debug_host.find(":") == -1) { // wrong address
|
|
|
+ OS::get_singleton()->print("Invalid debug host address, it should be of the form <host/IP>:<port>.\n");
|
|
|
goto error;
|
|
|
}
|
|
|
N = I->next()->next();
|
|
|
} else {
|
|
|
+ OS::get_singleton()->print("Missing remote debug host address, aborting.\n");
|
|
|
goto error;
|
|
|
}
|
|
|
- } else if (I->get() == "--allow_focus_steal_pid") {
|
|
|
+ } else if (I->get() == "--allow_focus_steal_pid") { // not exposed to user
|
|
|
if (I->next()) {
|
|
|
|
|
|
allow_focus_steal_pid = I->next()->get().to_int64();
|
|
|
N = I->next()->next();
|
|
|
} else {
|
|
|
+ OS::get_singleton()->print("Missing editor PID argument, aborting.\n");
|
|
|
goto error;
|
|
|
}
|
|
|
} else {
|
|
@@ -618,7 +629,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
|
|
|
Error err = file_access_network_client->connect(remotefs, port, remotefs_pass);
|
|
|
if (err) {
|
|
|
- OS::get_singleton()->printerr("Could not connect to remotefs: %s:%i\n", remotefs.utf8().get_data(), port);
|
|
|
+ OS::get_singleton()->printerr("Could not connect to remotefs: %s:%i.\n", remotefs.utf8().get_data(), port);
|
|
|
goto error;
|
|
|
}
|
|
|
|
|
@@ -654,7 +665,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
#ifdef TOOLS_ENABLED
|
|
|
editor = false;
|
|
|
#else
|
|
|
- OS::get_singleton()->print("error: Couldn't load game path '%s'\n", game_path.ascii().get_data());
|
|
|
+ OS::get_singleton()->print("Error: Could not load game path '%s'.\n", game_path.ascii().get_data());
|
|
|
|
|
|
goto error;
|
|
|
#endif
|
|
@@ -744,11 +755,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
OS::get_singleton()->_render_thread_mode = OS::RenderThreadMode(rtm);
|
|
|
}
|
|
|
|
|
|
- /* Determine Video Driver */
|
|
|
-
|
|
|
- if (audio_driver == "") { // specified in project.godot
|
|
|
- audio_driver = GLOBAL_DEF("audio/driver", OS::get_singleton()->get_audio_driver_name(0));
|
|
|
- }
|
|
|
+ /* Determine audio and video drivers */
|
|
|
|
|
|
for (int i = 0; i < OS::get_singleton()->get_video_driver_count(); i++) {
|
|
|
|
|
@@ -766,6 +773,10 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
|
//goto error;
|
|
|
}
|
|
|
|
|
|
+ if (audio_driver == "") { // specified in project.godot
|
|
|
+ audio_driver = GLOBAL_DEF("audio/driver", OS::get_singleton()->get_audio_driver_name(0));
|
|
|
+ }
|
|
|
+
|
|
|
for (int i = 0; i < OS::get_singleton()->get_audio_driver_count(); i++) {
|
|
|
|
|
|
if (audio_driver == OS::get_singleton()->get_audio_driver_name(i)) {
|
|
@@ -833,7 +844,8 @@ error:
|
|
|
args.clear();
|
|
|
main_args.clear();
|
|
|
|
|
|
- print_help(execpath);
|
|
|
+ if (show_help)
|
|
|
+ print_help(execpath);
|
|
|
|
|
|
if (performance)
|
|
|
memdelete(performance);
|
|
@@ -1053,23 +1065,18 @@ bool Main::start() {
|
|
|
String game_path;
|
|
|
String script;
|
|
|
String test;
|
|
|
- String screen;
|
|
|
String _export_preset;
|
|
|
- String _import;
|
|
|
- String _import_script;
|
|
|
- bool noquit = false;
|
|
|
bool export_debug = false;
|
|
|
bool project_manager_request = false;
|
|
|
+
|
|
|
List<String> args = OS::get_singleton()->get_cmdline_args();
|
|
|
for (int i = 0; i < args.size(); i++) {
|
|
|
//parameters that do not have an argument to the right
|
|
|
if (args[i] == "--no-docbase") {
|
|
|
doc_base = false;
|
|
|
- } else if (args[i] == "--no-quit") {
|
|
|
- noquit = true;
|
|
|
- } else if (args[i] == "--editor" || args[i] == "-e") {
|
|
|
+ } else if (args[i] == "-e" || args[i] == "--editor") {
|
|
|
editor = true;
|
|
|
- } else if (args[i] == "-P" || args[i] == "--project-manager") {
|
|
|
+ } else if (args[i] == "-p" || args[i] == "--project-manager") {
|
|
|
project_manager_request = true;
|
|
|
} else if (args[i].length() && args[i][0] != '-' && game_path == "") {
|
|
|
game_path = args[i];
|
|
@@ -1081,10 +1088,8 @@ bool Main::start() {
|
|
|
doc_tool = args[i + 1];
|
|
|
for (int j = i + 2; j < args.size(); j++)
|
|
|
removal_docs.push_back(args[j]);
|
|
|
- } else if (args[i] == "--script" || args[i] == "-s") {
|
|
|
+ } else if (args[i] == "-s" || args[i] == "--script") {
|
|
|
script = args[i + 1];
|
|
|
- } else if (args[i] == "--level" || args[i] == "-l") {
|
|
|
- Engine::get_singleton()->_custom_level = args[i + 1];
|
|
|
} else if (args[i] == "--test") {
|
|
|
test = args[i + 1];
|
|
|
} else if (args[i] == "--export") {
|
|
@@ -1094,12 +1099,6 @@ bool Main::start() {
|
|
|
editor = true; //needs editor
|
|
|
_export_preset = args[i + 1];
|
|
|
export_debug = true;
|
|
|
- } else if (args[i] == "--import") {
|
|
|
- editor = true; //needs editor
|
|
|
- _import = args[i + 1];
|
|
|
- } else if (args[i] == "--import-script") {
|
|
|
- editor = true; //needs editor
|
|
|
- _import_script = args[i + 1];
|
|
|
} else {
|
|
|
// The parameter does not match anything known, don't skip the next argument
|
|
|
parsed_pair = false;
|
|
@@ -1205,7 +1204,7 @@ bool Main::start() {
|
|
|
|
|
|
if (!main_loop) {
|
|
|
if (!ClassDB::class_exists(main_loop_type)) {
|
|
|
- OS::get_singleton()->alert("godot: error: MainLoop type doesn't exist: " + main_loop_type);
|
|
|
+ OS::get_singleton()->alert("Error: MainLoop type doesn't exist: " + main_loop_type);
|
|
|
return false;
|
|
|
} else {
|
|
|
|
|
@@ -1355,19 +1354,8 @@ bool Main::start() {
|
|
|
#ifdef TOOLS_ENABLED
|
|
|
if (editor) {
|
|
|
|
|
|
- if (_import != "") {
|
|
|
-
|
|
|
- //editor_node->import_scene(_import,local_game_path,_import_script);
|
|
|
- if (!noquit)
|
|
|
- sml->quit();
|
|
|
- game_path = ""; //no load anything
|
|
|
- } else {
|
|
|
-
|
|
|
- Error serr = editor_node->load_scene(local_game_path);
|
|
|
- }
|
|
|
+ Error serr = editor_node->load_scene(local_game_path);
|
|
|
OS::get_singleton()->set_context(OS::CONTEXT_EDITOR);
|
|
|
-
|
|
|
- //editor_node->set_edited_scene(game);
|
|
|
}
|
|
|
#endif
|
|
|
}
|
|
@@ -1441,7 +1429,6 @@ bool Main::start() {
|
|
|
n->set_name(name);
|
|
|
|
|
|
//defer so references are all valid on _ready()
|
|
|
- //sml->get_root()->add_child(n);
|
|
|
to_add.push_back(n);
|
|
|
|
|
|
if (global_var) {
|
|
@@ -1466,7 +1453,6 @@ bool Main::start() {
|
|
|
|
|
|
ERR_EXPLAIN("Failed loading scene: " + local_game_path);
|
|
|
ERR_FAIL_COND_V(!scene, false)
|
|
|
- //sml->get_root()->add_child(scene);
|
|
|
sml->add_current_scene(scene);
|
|
|
|
|
|
String iconpath = GLOBAL_DEF("application/config/icon", "Variant()");
|
|
@@ -1480,27 +1466,6 @@ bool Main::start() {
|
|
|
}
|
|
|
|
|
|
#ifdef TOOLS_ENABLED
|
|
|
-
|
|
|
- /*if (_export_platform!="") {
|
|
|
-
|
|
|
- sml->quit();
|
|
|
- }*/
|
|
|
-
|
|
|
- /*
|
|
|
- if (sml->get_root_node()) {
|
|
|
-
|
|
|
- Console *console = memnew( Console );
|
|
|
-
|
|
|
- sml->get_root_node()->cast_to<RootNode>()->set_console(console);
|
|
|
- if (GLOBAL_DEF("console/visible_default",false).operator bool()) {
|
|
|
-
|
|
|
- console->show();
|
|
|
- } else {P
|
|
|
-
|
|
|
- console->hide();
|
|
|
- };
|
|
|
- }
|
|
|
-*/
|
|
|
if (project_manager_request || (script == "" && test == "" && game_path == "" && !editor)) {
|
|
|
|
|
|
ProjectManager *pmanager = memnew(ProjectManager);
|
|
@@ -1509,7 +1474,6 @@ bool Main::start() {
|
|
|
sml->get_root()->add_child(pmanager);
|
|
|
OS::get_singleton()->set_context(OS::CONTEXT_PROJECTMAN);
|
|
|
}
|
|
|
-
|
|
|
#endif
|
|
|
}
|
|
|
|
|
@@ -1590,10 +1554,6 @@ bool Main::iteration() {
|
|
|
|
|
|
time_accum -= frame_slice;
|
|
|
message_queue->flush();
|
|
|
- /*
|
|
|
- if (AudioServer::get_singleton())
|
|
|
- AudioServer::get_singleton()->update();
|
|
|
- */
|
|
|
|
|
|
fixed_process_ticks = MAX(fixed_process_ticks, OS::get_singleton()->get_ticks_usec() - fixed_begin); // keep the largest one for reference
|
|
|
fixed_process_max = MAX(OS::get_singleton()->get_ticks_usec() - fixed_begin, fixed_process_max);
|
|
@@ -1642,7 +1602,6 @@ bool Main::iteration() {
|
|
|
script_debugger->idle_poll();
|
|
|
}
|
|
|
|
|
|
- //x11_delay_usec(10000);
|
|
|
frames++;
|
|
|
Engine::get_singleton()->_idle_frames++;
|
|
|
|
|
@@ -1744,7 +1703,6 @@ void Main::cleanup() {
|
|
|
unregister_core_driver_types();
|
|
|
unregister_core_types();
|
|
|
|
|
|
- //PerformanceMetrics::finish();
|
|
|
OS::get_singleton()->clear_last_error();
|
|
|
OS::get_singleton()->finalize_core();
|
|
|
}
|