summaryrefslogtreecommitdiff
path: root/core/core_bind.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/core_bind.h')
-rw-r--r--core/core_bind.h770
1 files changed, 770 insertions, 0 deletions
diff --git a/core/core_bind.h b/core/core_bind.h
new file mode 100644
index 0000000000..7794750387
--- /dev/null
+++ b/core/core_bind.h
@@ -0,0 +1,770 @@
+/*************************************************************************/
+/* core_bind.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2020 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. */
+/*************************************************************************/
+
+#ifndef CORE_BIND_H
+#define CORE_BIND_H
+
+#include "core/io/compression.h"
+#include "core/io/image.h"
+#include "core/io/resource_loader.h"
+#include "core/io/resource_saver.h"
+#include "core/os/dir_access.h"
+#include "core/os/file_access.h"
+#include "core/os/os.h"
+#include "core/os/semaphore.h"
+#include "core/os/thread.h"
+
+class _ResourceLoader : public Object {
+ GDCLASS(_ResourceLoader, Object);
+
+protected:
+ static void _bind_methods();
+ static _ResourceLoader *singleton;
+
+public:
+ enum ThreadLoadStatus {
+ THREAD_LOAD_INVALID_RESOURCE,
+ THREAD_LOAD_IN_PROGRESS,
+ THREAD_LOAD_FAILED,
+ THREAD_LOAD_LOADED
+ };
+
+ static _ResourceLoader *get_singleton() { return singleton; }
+
+ Error load_threaded_request(const String &p_path, const String &p_type_hint = "", bool p_use_sub_threads = false);
+ ThreadLoadStatus load_threaded_get_status(const String &p_path, Array r_progress = Array());
+ RES load_threaded_get(const String &p_path);
+
+ RES load(const String &p_path, const String &p_type_hint = "", bool p_no_cache = false);
+ Vector<String> get_recognized_extensions_for_type(const String &p_type);
+ void set_abort_on_missing_resources(bool p_abort);
+ PackedStringArray get_dependencies(const String &p_path);
+ bool has_cached(const String &p_path);
+ bool exists(const String &p_path, const String &p_type_hint = "");
+
+ _ResourceLoader() { singleton = this; }
+};
+
+VARIANT_ENUM_CAST(_ResourceLoader::ThreadLoadStatus);
+
+class _ResourceSaver : public Object {
+ GDCLASS(_ResourceSaver, Object);
+
+protected:
+ static void _bind_methods();
+ static _ResourceSaver *singleton;
+
+public:
+ enum SaverFlags {
+
+ FLAG_RELATIVE_PATHS = 1,
+ FLAG_BUNDLE_RESOURCES = 2,
+ FLAG_CHANGE_PATH = 4,
+ FLAG_OMIT_EDITOR_PROPERTIES = 8,
+ FLAG_SAVE_BIG_ENDIAN = 16,
+ FLAG_COMPRESS = 32,
+ FLAG_REPLACE_SUBRESOURCE_PATHS = 64,
+ };
+
+ static _ResourceSaver *get_singleton() { return singleton; }
+
+ Error save(const String &p_path, const RES &p_resource, SaverFlags p_flags);
+ Vector<String> get_recognized_extensions(const RES &p_resource);
+
+ _ResourceSaver() { singleton = this; }
+};
+
+VARIANT_ENUM_CAST(_ResourceSaver::SaverFlags);
+
+class MainLoop;
+
+class _OS : public Object {
+ GDCLASS(_OS, Object);
+
+protected:
+ static void _bind_methods();
+ static _OS *singleton;
+
+public:
+ enum VideoDriver {
+ VIDEO_DRIVER_GLES2,
+ VIDEO_DRIVER_VULKAN,
+ };
+
+ enum Weekday {
+ DAY_SUNDAY,
+ DAY_MONDAY,
+ DAY_TUESDAY,
+ DAY_WEDNESDAY,
+ DAY_THURSDAY,
+ DAY_FRIDAY,
+ DAY_SATURDAY
+ };
+
+ enum Month {
+ // Start at 1 to follow Windows SYSTEMTIME structure
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ms724950(v=vs.85).aspx
+ MONTH_JANUARY = 1,
+ MONTH_FEBRUARY,
+ MONTH_MARCH,
+ MONTH_APRIL,
+ MONTH_MAY,
+ MONTH_JUNE,
+ MONTH_JULY,
+ MONTH_AUGUST,
+ MONTH_SEPTEMBER,
+ MONTH_OCTOBER,
+ MONTH_NOVEMBER,
+ MONTH_DECEMBER
+ };
+
+ virtual PackedStringArray get_connected_midi_inputs();
+ virtual void open_midi_inputs();
+ virtual void close_midi_inputs();
+
+ void set_low_processor_usage_mode(bool p_enabled);
+ bool is_in_low_processor_usage_mode() const;
+
+ void set_low_processor_usage_mode_sleep_usec(int p_usec);
+ int get_low_processor_usage_mode_sleep_usec() const;
+
+ String get_executable_path() const;
+ int execute(const String &p_path, const Vector<String> &p_arguments, bool p_blocking = true, Array p_output = Array(), bool p_read_stderr = false);
+
+ Error kill(int p_pid);
+ Error shell_open(String p_uri);
+
+ int get_process_id() const;
+
+ bool has_environment(const String &p_var) const;
+ String get_environment(const String &p_var) const;
+
+ String get_name() const;
+ Vector<String> get_cmdline_args();
+
+ String get_locale() const;
+
+ String get_model_name() const;
+
+ void dump_memory_to_file(const String &p_file);
+ void dump_resources_to_file(const String &p_file);
+
+ void print_resources_in_use(bool p_short = false);
+ void print_all_resources(const String &p_to_file);
+ void print_all_textures_by_size();
+ void print_resources_by_type(const Vector<String> &p_types);
+
+ bool is_debug_build() const;
+
+ String get_unique_id() const;
+
+ String get_keycode_string(uint32_t p_code) const;
+ bool is_keycode_unicode(uint32_t p_unicode) const;
+ int find_keycode_from_string(const String &p_code) const;
+
+ void set_use_file_access_save_and_swap(bool p_enable);
+
+ int get_exit_code() const;
+ void set_exit_code(int p_code);
+ Dictionary get_date(bool utc) const;
+ Dictionary get_time(bool utc) const;
+ Dictionary get_datetime(bool utc) const;
+ Dictionary get_datetime_from_unix_time(int64_t unix_time_val) const;
+ int64_t get_unix_time_from_datetime(Dictionary datetime) const;
+ Dictionary get_time_zone_info() const;
+ double get_unix_time() const;
+
+ uint64_t get_static_memory_usage() const;
+ uint64_t get_static_memory_peak_usage() const;
+
+ void delay_usec(uint32_t p_usec) const;
+ void delay_msec(uint32_t p_msec) const;
+ uint32_t get_ticks_msec() const;
+ uint64_t get_ticks_usec() const;
+
+ bool can_use_threads() const;
+
+ bool is_userfs_persistent() const;
+
+ bool is_stdout_verbose() const;
+
+ int get_processor_count() const;
+
+ enum SystemDir {
+ SYSTEM_DIR_DESKTOP,
+ SYSTEM_DIR_DCIM,
+ SYSTEM_DIR_DOCUMENTS,
+ SYSTEM_DIR_DOWNLOADS,
+ SYSTEM_DIR_MOVIES,
+ SYSTEM_DIR_MUSIC,
+ SYSTEM_DIR_PICTURES,
+ SYSTEM_DIR_RINGTONES,
+ };
+
+ String get_system_dir(SystemDir p_dir) const;
+
+ String get_user_data_dir() const;
+
+ Error set_thread_name(const String &p_name);
+
+ bool has_feature(const String &p_feature) const;
+
+ bool request_permission(const String &p_name);
+ bool request_permissions();
+ Vector<String> get_granted_permissions() const;
+
+ int get_tablet_driver_count() const;
+ String get_tablet_driver_name(int p_driver) const;
+ String get_current_tablet_driver() const;
+ void set_current_tablet_driver(const String &p_driver);
+
+ static _OS *get_singleton() { return singleton; }
+
+ _OS() { singleton = this; }
+};
+
+VARIANT_ENUM_CAST(_OS::VideoDriver);
+VARIANT_ENUM_CAST(_OS::Weekday);
+VARIANT_ENUM_CAST(_OS::Month);
+VARIANT_ENUM_CAST(_OS::SystemDir);
+
+class _Geometry2D : public Object {
+ GDCLASS(_Geometry2D, Object);
+
+ static _Geometry2D *singleton;
+
+protected:
+ static void _bind_methods();
+
+public:
+ static _Geometry2D *get_singleton();
+ Variant segment_intersects_segment(const Vector2 &p_from_a, const Vector2 &p_to_a, const Vector2 &p_from_b, const Vector2 &p_to_b);
+ Variant line_intersects_line(const Vector2 &p_from_a, const Vector2 &p_dir_a, const Vector2 &p_from_b, const Vector2 &p_dir_b);
+ Vector<Vector2> get_closest_points_between_segments(const Vector2 &p1, const Vector2 &q1, const Vector2 &p2, const Vector2 &q2);
+ Vector2 get_closest_point_to_segment(const Vector2 &p_point, const Vector2 &p_a, const Vector2 &p_b);
+ Vector2 get_closest_point_to_segment_uncapped(const Vector2 &p_point, const Vector2 &p_a, const Vector2 &p_b);
+ bool point_is_inside_triangle(const Vector2 &s, const Vector2 &a, const Vector2 &b, const Vector2 &c) const;
+
+ bool is_point_in_circle(const Vector2 &p_point, const Vector2 &p_circle_pos, real_t p_circle_radius);
+ real_t segment_intersects_circle(const Vector2 &p_from, const Vector2 &p_to, const Vector2 &p_circle_pos, real_t p_circle_radius);
+
+ bool is_polygon_clockwise(const Vector<Vector2> &p_polygon);
+ bool is_point_in_polygon(const Point2 &p_point, const Vector<Vector2> &p_polygon);
+ Vector<int> triangulate_polygon(const Vector<Vector2> &p_polygon);
+ Vector<int> triangulate_delaunay(const Vector<Vector2> &p_points);
+ Vector<Point2> convex_hull(const Vector<Point2> &p_points);
+
+ enum PolyBooleanOperation {
+ OPERATION_UNION,
+ OPERATION_DIFFERENCE,
+ OPERATION_INTERSECTION,
+ OPERATION_XOR
+ };
+ // 2D polygon boolean operations.
+ Array merge_polygons(const Vector<Vector2> &p_polygon_a, const Vector<Vector2> &p_polygon_b); // Union (add).
+ Array clip_polygons(const Vector<Vector2> &p_polygon_a, const Vector<Vector2> &p_polygon_b); // Difference (subtract).
+ Array intersect_polygons(const Vector<Vector2> &p_polygon_a, const Vector<Vector2> &p_polygon_b); // Common area (multiply).
+ Array exclude_polygons(const Vector<Vector2> &p_polygon_a, const Vector<Vector2> &p_polygon_b); // All but common area (xor).
+
+ // 2D polyline vs polygon operations.
+ Array clip_polyline_with_polygon(const Vector<Vector2> &p_polyline, const Vector<Vector2> &p_polygon); // Cut.
+ Array intersect_polyline_with_polygon(const Vector<Vector2> &p_polyline, const Vector<Vector2> &p_polygon); // Chop.
+
+ // 2D offset polygons/polylines.
+ enum PolyJoinType {
+ JOIN_SQUARE,
+ JOIN_ROUND,
+ JOIN_MITER
+ };
+ enum PolyEndType {
+ END_POLYGON,
+ END_JOINED,
+ END_BUTT,
+ END_SQUARE,
+ END_ROUND
+ };
+ Array offset_polygon(const Vector<Vector2> &p_polygon, real_t p_delta, PolyJoinType p_join_type = JOIN_SQUARE);
+ Array offset_polyline(const Vector<Vector2> &p_polygon, real_t p_delta, PolyJoinType p_join_type = JOIN_SQUARE, PolyEndType p_end_type = END_SQUARE);
+
+ Dictionary make_atlas(const Vector<Size2> &p_rects);
+
+ _Geometry2D() { singleton = this; }
+};
+
+VARIANT_ENUM_CAST(_Geometry2D::PolyBooleanOperation);
+VARIANT_ENUM_CAST(_Geometry2D::PolyJoinType);
+VARIANT_ENUM_CAST(_Geometry2D::PolyEndType);
+
+class _Geometry3D : public Object {
+ GDCLASS(_Geometry3D, Object);
+
+ static _Geometry3D *singleton;
+
+protected:
+ static void _bind_methods();
+
+public:
+ static _Geometry3D *get_singleton();
+ Vector<Plane> build_box_planes(const Vector3 &p_extents);
+ Vector<Plane> build_cylinder_planes(float p_radius, float p_height, int p_sides, Vector3::Axis p_axis = Vector3::AXIS_Z);
+ Vector<Plane> build_capsule_planes(float p_radius, float p_height, int p_sides, int p_lats, Vector3::Axis p_axis = Vector3::AXIS_Z);
+ Vector<Vector3> get_closest_points_between_segments(const Vector3 &p1, const Vector3 &p2, const Vector3 &q1, const Vector3 &q2);
+ Vector3 get_closest_point_to_segment(const Vector3 &p_point, const Vector3 &p_a, const Vector3 &p_b);
+ Vector3 get_closest_point_to_segment_uncapped(const Vector3 &p_point, const Vector3 &p_a, const Vector3 &p_b);
+ Variant ray_intersects_triangle(const Vector3 &p_from, const Vector3 &p_dir, const Vector3 &p_v0, const Vector3 &p_v1, const Vector3 &p_v2);
+ Variant segment_intersects_triangle(const Vector3 &p_from, const Vector3 &p_to, const Vector3 &p_v0, const Vector3 &p_v1, const Vector3 &p_v2);
+
+ Vector<Vector3> segment_intersects_sphere(const Vector3 &p_from, const Vector3 &p_to, const Vector3 &p_sphere_pos, real_t p_sphere_radius);
+ Vector<Vector3> segment_intersects_cylinder(const Vector3 &p_from, const Vector3 &p_to, float p_height, float p_radius);
+ Vector<Vector3> segment_intersects_convex(const Vector3 &p_from, const Vector3 &p_to, const Vector<Plane> &p_planes);
+
+ Vector<Vector3> clip_polygon(const Vector<Vector3> &p_points, const Plane &p_plane);
+
+ _Geometry3D() { singleton = this; }
+};
+
+class _File : public Reference {
+ GDCLASS(_File, Reference);
+
+ FileAccess *f = nullptr;
+ bool eswap = false;
+
+protected:
+ static void _bind_methods();
+
+public:
+ enum ModeFlags {
+
+ READ = 1,
+ WRITE = 2,
+ READ_WRITE = 3,
+ WRITE_READ = 7,
+ };
+
+ enum CompressionMode {
+ COMPRESSION_FASTLZ = Compression::MODE_FASTLZ,
+ COMPRESSION_DEFLATE = Compression::MODE_DEFLATE,
+ COMPRESSION_ZSTD = Compression::MODE_ZSTD,
+ COMPRESSION_GZIP = Compression::MODE_GZIP
+ };
+
+ Error open_encrypted(const String &p_path, ModeFlags p_mode_flags, const Vector<uint8_t> &p_key);
+ Error open_encrypted_pass(const String &p_path, ModeFlags p_mode_flags, const String &p_pass);
+ Error open_compressed(const String &p_path, ModeFlags p_mode_flags, CompressionMode p_compress_mode = COMPRESSION_FASTLZ);
+
+ Error open(const String &p_path, ModeFlags p_mode_flags); // open a file.
+ void close(); // Close a file.
+ bool is_open() const; // True when file is open.
+
+ String get_path() const; // Returns the path for the current open file.
+ String get_path_absolute() const; // Returns the absolute path for the current open file.
+
+ void seek(int64_t p_position); // Seek to a given position.
+ void seek_end(int64_t p_position = 0); // Seek from the end of file.
+ int64_t get_position() const; // Get position in the file.
+ int64_t get_len() const; // Get size of the file.
+
+ bool eof_reached() const; // Reading passed EOF.
+
+ uint8_t get_8() const; // Get a byte.
+ uint16_t get_16() const; // Get 16 bits uint.
+ uint32_t get_32() const; // Get 32 bits uint.
+ uint64_t get_64() const; // Get 64 bits uint.
+
+ float get_float() const;
+ double get_double() const;
+ real_t get_real() const;
+
+ Variant get_var(bool p_allow_objects = false) const;
+
+ Vector<uint8_t> get_buffer(int p_length) const; // Get an array of bytes.
+ String get_line() const;
+ Vector<String> get_csv_line(const String &p_delim = ",") const;
+ String get_as_text() const;
+ String get_md5(const String &p_path) const;
+ String get_sha256(const String &p_path) const;
+
+ /* Use this for files WRITTEN in _big_ endian machines (ie, amiga/mac).
+ * It's not about the current CPU type but file formats.
+ * This flags get reset to false (little endian) on each open.
+ */
+
+ void set_endian_swap(bool p_swap);
+ bool get_endian_swap();
+
+ Error get_error() const; // Get last error.
+
+ void store_8(uint8_t p_dest); // Store a byte.
+ void store_16(uint16_t p_dest); // Store 16 bits uint.
+ void store_32(uint32_t p_dest); // Store 32 bits uint.
+ void store_64(uint64_t p_dest); // Store 64 bits uint.
+
+ void store_float(float p_dest);
+ void store_double(double p_dest);
+ void store_real(real_t p_real);
+
+ void store_string(const String &p_string);
+ void store_line(const String &p_string);
+ void store_csv_line(const Vector<String> &p_values, const String &p_delim = ",");
+
+ virtual void store_pascal_string(const String &p_string);
+ virtual String get_pascal_string();
+
+ void store_buffer(const Vector<uint8_t> &p_buffer); // Store an array of bytes.
+
+ void store_var(const Variant &p_var, bool p_full_objects = false);
+
+ bool file_exists(const String &p_name) const; // Return true if a file exists.
+
+ uint64_t get_modified_time(const String &p_file) const;
+
+ _File() {}
+ virtual ~_File();
+};
+
+VARIANT_ENUM_CAST(_File::ModeFlags);
+VARIANT_ENUM_CAST(_File::CompressionMode);
+
+class _Directory : public Reference {
+ GDCLASS(_Directory, Reference);
+ DirAccess *d;
+ bool dir_open = false;
+
+protected:
+ static void _bind_methods();
+
+public:
+ Error open(const String &p_path);
+
+ bool is_open() const;
+
+ Error list_dir_begin(bool p_skip_navigational = false, bool p_skip_hidden = false); // This starts dir listing.
+ String get_next();
+ bool current_is_dir() const;
+
+ void list_dir_end();
+
+ int get_drive_count();
+ String get_drive(int p_drive);
+ int get_current_drive();
+
+ Error change_dir(String p_dir); // Can be relative or absolute, return false on success.
+ String get_current_dir(); // Return current dir location.
+
+ Error make_dir(String p_dir);
+ Error make_dir_recursive(String p_dir);
+
+ bool file_exists(String p_file);
+ bool dir_exists(String p_dir);
+
+ int get_space_left();
+
+ Error copy(String p_from, String p_to);
+ Error rename(String p_from, String p_to);
+ Error remove(String p_name);
+
+ _Directory();
+ virtual ~_Directory();
+
+private:
+ bool _list_skip_navigational;
+ bool _list_skip_hidden;
+};
+
+class _Marshalls : public Object {
+ GDCLASS(_Marshalls, Object);
+
+ static _Marshalls *singleton;
+
+protected:
+ static void _bind_methods();
+
+public:
+ static _Marshalls *get_singleton();
+
+ String variant_to_base64(const Variant &p_var, bool p_full_objects = false);
+ Variant base64_to_variant(const String &p_str, bool p_allow_objects = false);
+
+ String raw_to_base64(const Vector<uint8_t> &p_arr);
+ Vector<uint8_t> base64_to_raw(const String &p_str);
+
+ String utf8_to_base64(const String &p_str);
+ String base64_to_utf8(const String &p_str);
+
+ _Marshalls() { singleton = this; }
+ ~_Marshalls() { singleton = nullptr; }
+};
+
+class _Mutex : public Reference {
+ GDCLASS(_Mutex, Reference);
+ Mutex mutex;
+
+ static void _bind_methods();
+
+public:
+ void lock();
+ Error try_lock();
+ void unlock();
+};
+
+class _Semaphore : public Reference {
+ GDCLASS(_Semaphore, Reference);
+ Semaphore semaphore;
+
+ static void _bind_methods();
+
+public:
+ void wait();
+ Error try_wait();
+ void post();
+};
+
+class _Thread : public Reference {
+ GDCLASS(_Thread, Reference);
+
+protected:
+ Variant ret;
+ Variant userdata;
+ volatile bool active = false;
+ Object *target_instance = nullptr;
+ StringName target_method;
+ Thread *thread = nullptr;
+ static void _bind_methods();
+ static void _start_func(void *ud);
+
+public:
+ enum Priority {
+
+ PRIORITY_LOW,
+ PRIORITY_NORMAL,
+ PRIORITY_HIGH,
+ PRIORITY_MAX
+ };
+
+ Error start(Object *p_instance, const StringName &p_method, const Variant &p_userdata = Variant(), Priority p_priority = PRIORITY_NORMAL);
+ String get_id() const;
+ bool is_active() const;
+ Variant wait_to_finish();
+
+ _Thread() {}
+ ~_Thread();
+};
+
+VARIANT_ENUM_CAST(_Thread::Priority);
+
+class _ClassDB : public Object {
+ GDCLASS(_ClassDB, Object);
+
+protected:
+ static void _bind_methods();
+
+public:
+ PackedStringArray get_class_list() const;
+ PackedStringArray get_inheriters_from_class(const StringName &p_class) const;
+ StringName get_parent_class(const StringName &p_class) const;
+ bool class_exists(const StringName &p_class) const;
+ bool is_parent_class(const StringName &p_class, const StringName &p_inherits) const;
+ bool can_instance(const StringName &p_class) const;
+ Variant instance(const StringName &p_class) const;
+
+ bool has_signal(StringName p_class, StringName p_signal) const;
+ Dictionary get_signal(StringName p_class, StringName p_signal) const;
+ Array get_signal_list(StringName p_class, bool p_no_inheritance = false) const;
+
+ Array get_property_list(StringName p_class, bool p_no_inheritance = false) const;
+ Variant get_property(Object *p_object, const StringName &p_property) const;
+ Error set_property(Object *p_object, const StringName &p_property, const Variant &p_value) const;
+
+ bool has_method(StringName p_class, StringName p_method, bool p_no_inheritance = false) const;
+
+ Array get_method_list(StringName p_class, bool p_no_inheritance = false) const;
+
+ PackedStringArray get_integer_constant_list(const StringName &p_class, bool p_no_inheritance = false) const;
+ bool has_integer_constant(const StringName &p_class, const StringName &p_name) const;
+ int get_integer_constant(const StringName &p_class, const StringName &p_name) const;
+ StringName get_category(const StringName &p_node) const;
+
+ bool is_class_enabled(StringName p_class) const;
+
+ _ClassDB() {}
+ ~_ClassDB() {}
+};
+
+class _Engine : public Object {
+ GDCLASS(_Engine, Object);
+
+protected:
+ static void _bind_methods();
+ static _Engine *singleton;
+
+public:
+ static _Engine *get_singleton() { return singleton; }
+ void set_iterations_per_second(int p_ips);
+ int get_iterations_per_second() const;
+
+ void set_physics_jitter_fix(float p_threshold);
+ float get_physics_jitter_fix() const;
+ float get_physics_interpolation_fraction() const;
+
+ void set_target_fps(int p_fps);
+ int get_target_fps() const;
+
+ float get_frames_per_second() const;
+ uint64_t get_physics_frames() const;
+ uint64_t get_idle_frames() const;
+
+ int get_frames_drawn();
+
+ void set_time_scale(float p_scale);
+ float get_time_scale();
+
+ MainLoop *get_main_loop() const;
+
+ Dictionary get_version_info() const;
+ Dictionary get_author_info() const;
+ Array get_copyright_info() const;
+ Dictionary get_donor_info() const;
+ Dictionary get_license_info() const;
+ String get_license_text() const;
+
+ bool is_in_physics_frame() const;
+
+ bool has_singleton(const String &p_name) const;
+ Object *get_singleton_object(const String &p_name) const;
+
+ void set_editor_hint(bool p_enabled);
+ bool is_editor_hint() const;
+
+ _Engine() { singleton = this; }
+};
+
+class _JSON;
+
+class JSONParseResult : public Reference {
+ GDCLASS(JSONParseResult, Reference);
+
+ friend class _JSON;
+
+ Error error;
+ String error_string;
+ int error_line = -1;
+
+ Variant result;
+
+protected:
+ static void _bind_methods();
+
+public:
+ void set_error(Error p_error);
+ Error get_error() const;
+
+ void set_error_string(const String &p_error_string);
+ String get_error_string() const;
+
+ void set_error_line(int p_error_line);
+ int get_error_line() const;
+
+ void set_result(const Variant &p_result);
+ Variant get_result() const;
+
+ JSONParseResult() {}
+};
+
+class _JSON : public Object {
+ GDCLASS(_JSON, Object);
+
+protected:
+ static void _bind_methods();
+ static _JSON *singleton;
+
+public:
+ static _JSON *get_singleton() { return singleton; }
+
+ String print(const Variant &p_value, const String &p_indent = "", bool p_sort_keys = false);
+ Ref<JSONParseResult> parse(const String &p_json);
+
+ _JSON() { singleton = this; }
+};
+
+class _EngineDebugger : public Object {
+ GDCLASS(_EngineDebugger, Object);
+
+ class ProfilerCallable {
+ friend class _EngineDebugger;
+
+ Callable callable_toggle;
+ Callable callable_add;
+ Callable callable_tick;
+
+ public:
+ ProfilerCallable() {}
+
+ ProfilerCallable(const Callable &p_toggle, const Callable &p_add, const Callable &p_tick) {
+ callable_toggle = p_toggle;
+ callable_add = p_add;
+ callable_tick = p_tick;
+ }
+ };
+
+ Map<StringName, Callable> captures;
+ Map<StringName, ProfilerCallable> profilers;
+
+protected:
+ static void _bind_methods();
+ static _EngineDebugger *singleton;
+
+public:
+ static _EngineDebugger *get_singleton() { return singleton; }
+
+ bool is_active();
+
+ void register_profiler(const StringName &p_name, const Callable &p_toggle, const Callable &p_add, const Callable &p_tick);
+ void unregister_profiler(const StringName &p_name);
+ bool is_profiling(const StringName &p_name);
+ bool has_profiler(const StringName &p_name);
+ void profiler_add_frame_data(const StringName &p_name, const Array &p_data);
+ void profiler_enable(const StringName &p_name, bool p_enabled, const Array &p_opts = Array());
+
+ void register_message_capture(const StringName &p_name, const Callable &p_callable);
+ void unregister_message_capture(const StringName &p_name);
+ bool has_capture(const StringName &p_name);
+
+ void send_message(const String &p_msg, const Array &p_data);
+
+ static void call_toggle(void *p_user, bool p_enable, const Array &p_opts);
+ static void call_add(void *p_user, const Array &p_data);
+ static void call_tick(void *p_user, float p_frame_time, float p_idle_time, float p_physics_time, float p_physics_frame_time);
+ static Error call_capture(void *p_user, const String &p_cmd, const Array &p_data, bool &r_captured);
+
+ _EngineDebugger() { singleton = this; }
+ ~_EngineDebugger();
+};
+
+#endif // CORE_BIND_H