Fixes small typos and grammar correction
This commit is contained in:
parent
adf233ed04
commit
91181c2086
|
@ -37,7 +37,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- Ability to convert visual shaders to text-based shaders.
|
- Ability to convert visual shaders to text-based shaders.
|
||||||
- See the [complete list of new functions](https://github.com/godotengine/godot/pull/26164).
|
- See the [complete list of new functions](https://github.com/godotengine/godot/pull/26164).
|
||||||
- Improved visual scripting.
|
- Improved visual scripting.
|
||||||
- Visual scripting now uses an unified graph where all functions are represented.
|
- Visual scripting now uses a unified graph where all functions are represented.
|
||||||
- Nodes can now be edited directly in the graph.
|
- Nodes can now be edited directly in the graph.
|
||||||
- Support for fuzzy searching.
|
- Support for fuzzy searching.
|
||||||
- The `tool` mode can now be enabled in visual scripts.
|
- The `tool` mode can now be enabled in visual scripts.
|
||||||
|
@ -900,7 +900,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- Removed many debugging prints in the console.
|
- Removed many debugging prints in the console.
|
||||||
- Export templates now display an error dialog if no project was found when starting.
|
- Export templates now display an error dialog if no project was found when starting.
|
||||||
- DynamicFont oversampling is now enabled by default.
|
- DynamicFont oversampling is now enabled by default.
|
||||||
- Nodes' internal logic now consistently use internal physics processing.
|
- Nodes' internal logic now consistently uses internal physics processing.
|
||||||
- Allow attaching and clearing scripts on multiple nodes at once.
|
- Allow attaching and clearing scripts on multiple nodes at once.
|
||||||
- Default values are no longer saved in scene and resource files.
|
- Default values are no longer saved in scene and resource files.
|
||||||
- The selection rectangle of 2D nodes is now hidden when not pertinent (no more rectangle for collision shapes).
|
- The selection rectangle of 2D nodes is now hidden when not pertinent (no more rectangle for collision shapes).
|
||||||
|
|
|
@ -385,7 +385,7 @@ if selected_platform in platform_list:
|
||||||
if not (f[0] in ARGUMENTS): # allow command line to override platform flags
|
if not (f[0] in ARGUMENTS): # allow command line to override platform flags
|
||||||
env[f[0]] = f[1]
|
env[f[0]] = f[1]
|
||||||
|
|
||||||
# Must happen after the flags definition, so that they can be used by platform detect
|
# Must happen after the flags' definition, so that they can be used by platform detect
|
||||||
detect.configure(env)
|
detect.configure(env)
|
||||||
|
|
||||||
# Set our C and C++ standard requirements.
|
# Set our C and C++ standard requirements.
|
||||||
|
|
|
@ -393,7 +393,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b
|
||||||
|
|
||||||
if (exec_path != "") {
|
if (exec_path != "") {
|
||||||
// We do several tests sequentially until one succeeds to find a PCK,
|
// We do several tests sequentially until one succeeds to find a PCK,
|
||||||
// and if so we attempt loading it at the end.
|
// and if so, we attempt loading it at the end.
|
||||||
|
|
||||||
// Attempt with PCK bundled into executable.
|
// Attempt with PCK bundled into executable.
|
||||||
bool found = _load_resource_pack(exec_path);
|
bool found = _load_resource_pack(exec_path);
|
||||||
|
|
|
@ -1377,9 +1377,9 @@ Vector<String> _File::get_csv_line(const String &p_delim) const {
|
||||||
return f->get_csv_line(p_delim);
|
return f->get_csv_line(p_delim);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**< use this for files WRITTEN in _big_ endian machines (ie, amiga/mac)
|
/**< use this for files WRITTEN in _big_ endian machines (i.e. amiga/mac)
|
||||||
* It's not about the current CPU type but file formats.
|
* It's not about the current CPU type but file formats.
|
||||||
* this flags get reset to false (little endian) on each open
|
* These flags get reset to false (little endian) on each open
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void _File::set_endian_swap(bool p_swap) {
|
void _File::set_endian_swap(bool p_swap) {
|
||||||
|
|
|
@ -100,7 +100,7 @@ void Crypto::load_default_certificates(String p_path) {
|
||||||
|
|
||||||
PackedByteArray Crypto::hmac_digest(HashingContext::HashType p_hash_type, PackedByteArray p_key, PackedByteArray p_msg) {
|
PackedByteArray Crypto::hmac_digest(HashingContext::HashType p_hash_type, PackedByteArray p_key, PackedByteArray p_msg) {
|
||||||
Ref<HMACContext> ctx = Ref<HMACContext>(HMACContext::create());
|
Ref<HMACContext> ctx = Ref<HMACContext>(HMACContext::create());
|
||||||
ERR_FAIL_COND_V_MSG(ctx.is_null(), PackedByteArray(), "HMAC is not available witout mbedtls module.");
|
ERR_FAIL_COND_V_MSG(ctx.is_null(), PackedByteArray(), "HMAC is not available without mbedtls module.");
|
||||||
Error err = ctx->start(p_hash_type, p_key);
|
Error err = ctx->start(p_hash_type, p_key);
|
||||||
ERR_FAIL_COND_V(err != OK, PackedByteArray());
|
ERR_FAIL_COND_V(err != OK, PackedByteArray());
|
||||||
err = ctx->update(p_msg);
|
err = ctx->update(p_msg);
|
||||||
|
@ -108,7 +108,7 @@ PackedByteArray Crypto::hmac_digest(HashingContext::HashType p_hash_type, Packed
|
||||||
return ctx->finish();
|
return ctx->finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compares two HMACS for equality without leaking timing information in order to prevent timing attakcs.
|
// Compares two HMACS for equality without leaking timing information in order to prevent timing attacks.
|
||||||
// @see: https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-string-comparison-with-double-hmac-strategy
|
// @see: https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-string-comparison-with-double-hmac-strategy
|
||||||
bool Crypto::constant_time_compare(PackedByteArray p_trusted, PackedByteArray p_received) {
|
bool Crypto::constant_time_compare(PackedByteArray p_trusted, PackedByteArray p_received) {
|
||||||
const uint8_t *t = p_trusted.ptr();
|
const uint8_t *t = p_trusted.ptr();
|
||||||
|
|
|
@ -192,7 +192,7 @@ void EngineDebugger::deinitialize() {
|
||||||
singleton = nullptr;
|
singleton = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear profilers/captuers/protocol handlers.
|
// Clear profilers/captures/protocol handlers.
|
||||||
profilers.clear();
|
profilers.clear();
|
||||||
captures.clear();
|
captures.clear();
|
||||||
protocols.clear();
|
protocols.clear();
|
||||||
|
|
|
@ -723,7 +723,7 @@ void Input::warp_mouse_position(const Vector2 &p_to) {
|
||||||
|
|
||||||
Point2i Input::warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, const Rect2 &p_rect) {
|
Point2i Input::warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, const Rect2 &p_rect) {
|
||||||
// The relative distance reported for the next event after a warp is in the boundaries of the
|
// The relative distance reported for the next event after a warp is in the boundaries of the
|
||||||
// size of the rect on that axis, but it may be greater, in which case there's not problem as fmod()
|
// size of the rect on that axis, but it may be greater, in which case there's no problem as fmod()
|
||||||
// will warp it, but if the pointer has moved in the opposite direction between the pointer relocation
|
// will warp it, but if the pointer has moved in the opposite direction between the pointer relocation
|
||||||
// and the subsequent event, the reported relative distance will be less than the size of the rect
|
// and the subsequent event, the reported relative distance will be less than the size of the rect
|
||||||
// and thus fmod() will be disabled for handling the situation.
|
// and thus fmod() will be disabled for handling the situation.
|
||||||
|
@ -779,7 +779,7 @@ bool Input::is_emulating_touch_from_mouse() const {
|
||||||
return emulate_touch_from_mouse;
|
return emulate_touch_from_mouse;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calling this whenever the game window is focused helps unstucking the "touch mouse"
|
// Calling this whenever the game window is focused helps unsticking the "touch mouse"
|
||||||
// if the OS or its abstraction class hasn't properly reported that touch pointers raised
|
// if the OS or its abstraction class hasn't properly reported that touch pointers raised
|
||||||
void Input::ensure_touch_mouse_raised() {
|
void Input::ensure_touch_mouse_raised() {
|
||||||
if (mouse_from_touch_index != -1) {
|
if (mouse_from_touch_index != -1) {
|
||||||
|
|
|
@ -567,6 +567,7 @@ const OrderedHashMap<String, List<Ref<InputEvent>>> &InputMap::get_builtins() {
|
||||||
inputs.push_back(InputEventKey::create_reference(KEY_E | KEY_MASK_CTRL));
|
inputs.push_back(InputEventKey::create_reference(KEY_E | KEY_MASK_CTRL));
|
||||||
inputs.push_back(InputEventKey::create_reference(KEY_RIGHT | KEY_MASK_CMD));
|
inputs.push_back(InputEventKey::create_reference(KEY_RIGHT | KEY_MASK_CMD));
|
||||||
default_builtin_cache.insert("ui_text_caret_line_end.OSX", inputs);
|
default_builtin_cache.insert("ui_text_caret_line_end.OSX", inputs);
|
||||||
|
|
||||||
// Text Caret Movement Page Up/Down
|
// Text Caret Movement Page Up/Down
|
||||||
|
|
||||||
inputs = List<Ref<InputEvent>>();
|
inputs = List<Ref<InputEvent>>();
|
||||||
|
|
|
@ -181,8 +181,8 @@ int Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This will handle both Gzip and Deflat streams. It will automatically allocate the output buffer into the provided p_dst_vect Vector.
|
This will handle both Gzip and Deflate streams. It will automatically allocate the output buffer into the provided p_dst_vect Vector.
|
||||||
This is required for compressed data who's final uncompressed size is unknown, as is the case for HTTP response bodies.
|
This is required for compressed data whose final uncompressed size is unknown, as is the case for HTTP response bodies.
|
||||||
This is much slower however than using Compression::decompress because it may result in multiple full copies of the output buffer.
|
This is much slower however than using Compression::decompress because it may result in multiple full copies of the output buffer.
|
||||||
*/
|
*/
|
||||||
int Compression::decompress_dynamic(Vector<uint8_t> *p_dst_vect, int p_max_dst_size, const uint8_t *p_src, int p_src_size, Mode p_mode) {
|
int Compression::decompress_dynamic(Vector<uint8_t> *p_dst_vect, int p_max_dst_size, const uint8_t *p_src, int p_src_size, Mode p_mode) {
|
||||||
|
@ -248,7 +248,7 @@ int Compression::decompress_dynamic(Vector<uint8_t> *p_dst_vect, int p_max_dst_s
|
||||||
|
|
||||||
out_mark += gzip_chunk;
|
out_mark += gzip_chunk;
|
||||||
|
|
||||||
// Encorce max output size
|
// Enforce max output size
|
||||||
if (p_max_dst_size > -1 && strm.total_out > (uint64_t)p_max_dst_size) {
|
if (p_max_dst_size > -1 && strm.total_out > (uint64_t)p_max_dst_size) {
|
||||||
(void)inflateEnd(&strm);
|
(void)inflateEnd(&strm);
|
||||||
p_dst_vect->resize(0);
|
p_dst_vect->resize(0);
|
||||||
|
|
|
@ -50,7 +50,7 @@ _FORCE_INLINE_ bool _should_call_local(MultiplayerAPI::RPCMode mode, bool is_mas
|
||||||
// Do nothing.
|
// Do nothing.
|
||||||
} break;
|
} break;
|
||||||
case MultiplayerAPI::RPC_MODE_REMOTE: {
|
case MultiplayerAPI::RPC_MODE_REMOTE: {
|
||||||
// Do nothing also. Remote cannot produce a local call.
|
// Do nothing. Remote cannot produce a local call.
|
||||||
} break;
|
} break;
|
||||||
case MultiplayerAPI::RPC_MODE_MASTERSYNC: {
|
case MultiplayerAPI::RPC_MODE_MASTERSYNC: {
|
||||||
if (is_master) {
|
if (is_master) {
|
||||||
|
@ -675,7 +675,7 @@ Error MultiplayerAPI::_encode_and_compress_variant(const Variant &p_variant, uin
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
if (r_buffer) {
|
if (r_buffer) {
|
||||||
// The first byte is not used by the marshaling, so store the type
|
// The first byte is not used by the marshalling, so store the type
|
||||||
// so we know how to decompress and decode this variant.
|
// so we know how to decompress and decode this variant.
|
||||||
r_buffer[0] = p_variant.get_type();
|
r_buffer[0] = p_variant.get_type();
|
||||||
}
|
}
|
||||||
|
@ -791,7 +791,7 @@ void MultiplayerAPI::_send_rpc(Node *p_from, int p_to, bool p_unreliable, bool p
|
||||||
packet_cache.resize(m_amount);
|
packet_cache.resize(m_amount);
|
||||||
|
|
||||||
// Encode meta.
|
// Encode meta.
|
||||||
// The meta is composed by a single byte that contains (starting from the least segnificant bit):
|
// The meta is composed by a single byte that contains (starting from the least significant bit):
|
||||||
// - `NetworkCommands` in the first three bits.
|
// - `NetworkCommands` in the first three bits.
|
||||||
// - `NetworkNodeIdCompression` in the next 2 bits.
|
// - `NetworkNodeIdCompression` in the next 2 bits.
|
||||||
// - `NetworkNameIdCompression` in the next 1 bit.
|
// - `NetworkNameIdCompression` in the next 1 bit.
|
||||||
|
@ -830,7 +830,7 @@ void MultiplayerAPI::_send_rpc(Node *p_from, int p_to, bool p_unreliable, bool p
|
||||||
ofs += 4;
|
ofs += 4;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// The targets doesn't know the node yet, so we need to use 32 bits int.
|
// The targets don't know the node yet, so we need to use 32 bits int.
|
||||||
node_id_compression = NETWORK_NODE_ID_COMPRESSION_32;
|
node_id_compression = NETWORK_NODE_ID_COMPRESSION_32;
|
||||||
MAKE_ROOM(ofs + 4);
|
MAKE_ROOM(ofs + 4);
|
||||||
encode_uint32(psc->id, &(packet_cache.write[ofs]));
|
encode_uint32(psc->id, &(packet_cache.write[ofs]));
|
||||||
|
|
|
@ -224,7 +224,7 @@ Error PacketPeerUDP::connect_to_host(const IP_Address &p_host, int p_port) {
|
||||||
|
|
||||||
// I see no reason why we should get ERR_BUSY (wouldblock/eagain) here.
|
// I see no reason why we should get ERR_BUSY (wouldblock/eagain) here.
|
||||||
// This is UDP, so connect is only used to tell the OS to which socket
|
// This is UDP, so connect is only used to tell the OS to which socket
|
||||||
// it shuold deliver packets when multiple are bound on the same address/port.
|
// it should deliver packets when multiple are bound on the same address/port.
|
||||||
if (err != OK) {
|
if (err != OK) {
|
||||||
close();
|
close();
|
||||||
ERR_FAIL_V_MSG(FAILED, "Unable to connect");
|
ERR_FAIL_V_MSG(FAILED, "Unable to connect");
|
||||||
|
|
|
@ -1245,7 +1245,7 @@ Error ResourceFormatLoaderBinary::rename_dependencies(const String &p_path, cons
|
||||||
String ResourceFormatLoaderBinary::get_resource_type(const String &p_path) const {
|
String ResourceFormatLoaderBinary::get_resource_type(const String &p_path) const {
|
||||||
FileAccess *f = FileAccess::open(p_path, FileAccess::READ);
|
FileAccess *f = FileAccess::open(p_path, FileAccess::READ);
|
||||||
if (!f) {
|
if (!f) {
|
||||||
return ""; //could not rwead
|
return ""; //could not read
|
||||||
}
|
}
|
||||||
|
|
||||||
ResourceLoaderBinary loader;
|
ResourceLoaderBinary loader;
|
||||||
|
|
|
@ -215,7 +215,7 @@ void ResourceLoader::_thread_load_function(void *p_userdata) {
|
||||||
load_task.loader_id = Thread::get_caller_id();
|
load_task.loader_id = Thread::get_caller_id();
|
||||||
|
|
||||||
if (load_task.semaphore) {
|
if (load_task.semaphore) {
|
||||||
//this is an actual thread, so wait for Ok fom semaphore
|
//this is an actual thread, so wait for Ok from semaphore
|
||||||
thread_load_semaphore->wait(); //wait until its ok to start loading
|
thread_load_semaphore->wait(); //wait until its ok to start loading
|
||||||
}
|
}
|
||||||
load_task.resource = _load(load_task.remapped_path, load_task.remapped_path != load_task.local_path ? load_task.local_path : String(), load_task.type_hint, load_task.cache_mode, &load_task.error, load_task.use_sub_threads, &load_task.progress);
|
load_task.resource = _load(load_task.remapped_path, load_task.remapped_path != load_task.local_path ? load_task.local_path : String(), load_task.type_hint, load_task.cache_mode, &load_task.error, load_task.use_sub_threads, &load_task.progress);
|
||||||
|
@ -443,7 +443,7 @@ RES ResourceLoader::load_threaded_get(const String &p_path, Error *r_error) {
|
||||||
|
|
||||||
ThreadLoadTask &load_task = thread_load_tasks[local_path];
|
ThreadLoadTask &load_task = thread_load_tasks[local_path];
|
||||||
|
|
||||||
//semaphore still exists, meaning its still loading, request poll
|
//semaphore still exists, meaning it's still loading, request poll
|
||||||
Semaphore *semaphore = load_task.semaphore;
|
Semaphore *semaphore = load_task.semaphore;
|
||||||
if (semaphore) {
|
if (semaphore) {
|
||||||
load_task.poll_requests++;
|
load_task.poll_requests++;
|
||||||
|
@ -452,7 +452,7 @@ RES ResourceLoader::load_threaded_get(const String &p_path, Error *r_error) {
|
||||||
// As we got a semaphore, this means we are going to have to wait
|
// As we got a semaphore, this means we are going to have to wait
|
||||||
// until the sub-resource is done loading
|
// until the sub-resource is done loading
|
||||||
//
|
//
|
||||||
// As this thread will become 'blocked' we should "echange" its
|
// As this thread will become 'blocked' we should "exchange" its
|
||||||
// active status with a waiting one, to ensure load continues.
|
// active status with a waiting one, to ensure load continues.
|
||||||
//
|
//
|
||||||
// This ensures loading is never blocked and that is also within
|
// This ensures loading is never blocked and that is also within
|
||||||
|
|
|
@ -194,7 +194,7 @@ RES TranslationLoaderPO::load_translation(FileAccess *f, Error *r_error) {
|
||||||
l = l.substr(1, l.length());
|
l = l.substr(1, l.length());
|
||||||
// Find final quote, ignoring escaped ones (\").
|
// Find final quote, ignoring escaped ones (\").
|
||||||
// The escape_next logic is necessary to properly parse things like \\"
|
// The escape_next logic is necessary to properly parse things like \\"
|
||||||
// where the blackslash is the one being escaped, not the quote.
|
// where the backslash is the one being escaped, not the quote.
|
||||||
int end_pos = -1;
|
int end_pos = -1;
|
||||||
bool escape_next = false;
|
bool escape_next = false;
|
||||||
for (int i = 0; i < l.length(); i++) {
|
for (int i = 0; i < l.length(); i++) {
|
||||||
|
|
|
@ -344,7 +344,7 @@ void XMLParser::_bind_methods() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Error XMLParser::read() {
|
Error XMLParser::read() {
|
||||||
// if not end reached, parse the node
|
// if end not reached, parse the node
|
||||||
if (P && (P - data) < (int64_t)length - 1 && *P != 0) {
|
if (P && (P - data) < (int64_t)length - 1 && *P != 0) {
|
||||||
_parse_current_node();
|
_parse_current_node();
|
||||||
return OK;
|
return OK;
|
||||||
|
|
|
@ -132,7 +132,7 @@ bool Basis::is_symmetric() const {
|
||||||
|
|
||||||
Basis Basis::diagonalize() {
|
Basis Basis::diagonalize() {
|
||||||
//NOTE: only implemented for symmetric matrices
|
//NOTE: only implemented for symmetric matrices
|
||||||
//with the Jacobi iterative method method
|
//with the Jacobi iterative method
|
||||||
#ifdef MATH_CHECKS
|
#ifdef MATH_CHECKS
|
||||||
ERR_FAIL_COND_V(!is_symmetric(), Basis());
|
ERR_FAIL_COND_V(!is_symmetric(), Basis());
|
||||||
#endif
|
#endif
|
||||||
|
@ -317,7 +317,7 @@ Vector3 Basis::rotref_posscale_decomposition(Basis &rotref) const {
|
||||||
// Multiplies the matrix from left by the rotation matrix: M -> R.M
|
// Multiplies the matrix from left by the rotation matrix: M -> R.M
|
||||||
// Note that this does *not* rotate the matrix itself.
|
// Note that this does *not* rotate the matrix itself.
|
||||||
//
|
//
|
||||||
// The main use of Basis is as Transform.basis, which is used a the transformation matrix
|
// The main use of Basis is as Transform.basis, which is used by the transformation matrix
|
||||||
// of 3D object. Rotate here refers to rotation of the object (which is R * (*this)),
|
// of 3D object. Rotate here refers to rotation of the object (which is R * (*this)),
|
||||||
// not the matrix itself (which is R * (*this) * R.transposed()).
|
// not the matrix itself (which is R * (*this) * R.transposed()).
|
||||||
Basis Basis::rotated(const Vector3 &p_axis, real_t p_phi) const {
|
Basis Basis::rotated(const Vector3 &p_axis, real_t p_phi) const {
|
||||||
|
@ -881,7 +881,7 @@ void Basis::get_axis_angle(Vector3 &r_axis, real_t &r_angle) const {
|
||||||
if ((Math::abs(elements[1][0] - elements[0][1]) < epsilon) && (Math::abs(elements[2][0] - elements[0][2]) < epsilon) && (Math::abs(elements[2][1] - elements[1][2]) < epsilon)) {
|
if ((Math::abs(elements[1][0] - elements[0][1]) < epsilon) && (Math::abs(elements[2][0] - elements[0][2]) < epsilon) && (Math::abs(elements[2][1] - elements[1][2]) < epsilon)) {
|
||||||
// singularity found
|
// singularity found
|
||||||
// first check for identity matrix which must have +1 for all terms
|
// first check for identity matrix which must have +1 for all terms
|
||||||
// in leading diagonaland zero in other terms
|
// in leading diagonal and zero in other terms
|
||||||
if ((Math::abs(elements[1][0] + elements[0][1]) < epsilon2) && (Math::abs(elements[2][0] + elements[0][2]) < epsilon2) && (Math::abs(elements[2][1] + elements[1][2]) < epsilon2) && (Math::abs(elements[0][0] + elements[1][1] + elements[2][2] - 3) < epsilon2)) {
|
if ((Math::abs(elements[1][0] + elements[0][1]) < epsilon2) && (Math::abs(elements[2][0] + elements[0][2]) < epsilon2) && (Math::abs(elements[2][1] + elements[1][2]) < epsilon2) && (Math::abs(elements[0][0] + elements[1][1] + elements[2][2] - 3) < epsilon2)) {
|
||||||
// this singularity is identity matrix so angle = 0
|
// this singularity is identity matrix so angle = 0
|
||||||
r_axis = Vector3(0, 1, 0);
|
r_axis = Vector3(0, 1, 0);
|
||||||
|
|
|
@ -978,7 +978,7 @@ Expression::ENode *Expression::_parse_expression() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reduce the set set of expressions and place them in an operator tree, respecting precedence */
|
/* Reduce the set of expressions and place them in an operator tree, respecting precedence */
|
||||||
|
|
||||||
while (expression.size() > 1) {
|
while (expression.size() > 1) {
|
||||||
int next_op = -1;
|
int next_op = -1;
|
||||||
|
|
|
@ -87,9 +87,9 @@ struct _AtlasWorkRectResult {
|
||||||
void Geometry2D::make_atlas(const Vector<Size2i> &p_rects, Vector<Point2i> &r_result, Size2i &r_size) {
|
void Geometry2D::make_atlas(const Vector<Size2i> &p_rects, Vector<Point2i> &r_result, Size2i &r_size) {
|
||||||
// Super simple, almost brute force scanline stacking fitter.
|
// Super simple, almost brute force scanline stacking fitter.
|
||||||
// It's pretty basic for now, but it tries to make sure that the aspect ratio of the
|
// It's pretty basic for now, but it tries to make sure that the aspect ratio of the
|
||||||
// resulting atlas is somehow square. This is necessary because video cards have limits.
|
// resulting atlas is somehow square. This is necessary because video cards have limits
|
||||||
// On texture size (usually 2048 or 4096), so the more square a texture, the more chances.
|
// on texture size (usually 2048 or 4096), so the squarer a texture, the more the chances
|
||||||
// It will work in every hardware.
|
// that it will work in every hardware.
|
||||||
// For example, it will prioritize a 1024x1024 atlas (works everywhere) instead of a
|
// For example, it will prioritize a 1024x1024 atlas (works everywhere) instead of a
|
||||||
// 256x8192 atlas (won't work anywhere).
|
// 256x8192 atlas (won't work anywhere).
|
||||||
|
|
||||||
|
|
|
@ -268,7 +268,7 @@ Error QuickHull::build(const Vector<Vector3> &p_points, Geometry3D::MeshData &r_
|
||||||
for (Map<Edge, FaceConnect>::Element *E = lit_edges.front(); E; E = E->next()) {
|
for (Map<Edge, FaceConnect>::Element *E = lit_edges.front(); E; E = E->next()) {
|
||||||
FaceConnect &fc = E->get();
|
FaceConnect &fc = E->get();
|
||||||
if (fc.left && fc.right) {
|
if (fc.left && fc.right) {
|
||||||
continue; //edge is uninteresting, not on horizont
|
continue; //edge is uninteresting, not on horizon
|
||||||
}
|
}
|
||||||
|
|
||||||
//create new face!
|
//create new face!
|
||||||
|
|
|
@ -97,7 +97,7 @@ bool Triangulate::snip(const Vector<Vector2> &p_contour, int u, int v, int w, in
|
||||||
|
|
||||||
// It can happen that the triangulation ends up with three aligned vertices to deal with.
|
// It can happen that the triangulation ends up with three aligned vertices to deal with.
|
||||||
// In this scenario, making the check below strict may reject the possibility of
|
// In this scenario, making the check below strict may reject the possibility of
|
||||||
// forming a last triangle with these aligned vertices, preventing the triangulatiom
|
// forming a last triangle with these aligned vertices, preventing the triangulation
|
||||||
// from completing.
|
// from completing.
|
||||||
// To avoid that we allow zero-area triangles if all else failed.
|
// To avoid that we allow zero-area triangles if all else failed.
|
||||||
float threshold = relaxed ? -CMP_EPSILON : CMP_EPSILON;
|
float threshold = relaxed ? -CMP_EPSILON : CMP_EPSILON;
|
||||||
|
|
|
@ -596,7 +596,7 @@ void Object::get_property_list(List<PropertyInfo> *p_list, bool p_reversed) cons
|
||||||
|
|
||||||
_get_property_listv(p_list, p_reversed);
|
_get_property_listv(p_list, p_reversed);
|
||||||
|
|
||||||
if (!is_class("Script")) { // can still be set, but this is for userfriendlyness
|
if (!is_class("Script")) { // can still be set, but this is for user-friendliness
|
||||||
p_list->push_back(PropertyInfo(Variant::OBJECT, "script", PROPERTY_HINT_RESOURCE_TYPE, "Script", PROPERTY_USAGE_DEFAULT));
|
p_list->push_back(PropertyInfo(Variant::OBJECT, "script", PROPERTY_HINT_RESOURCE_TYPE, "Script", PROPERTY_USAGE_DEFAULT));
|
||||||
}
|
}
|
||||||
if (!metadata.is_empty()) {
|
if (!metadata.is_empty()) {
|
||||||
|
@ -1671,7 +1671,7 @@ Variant::Type Object::get_static_property_type_indexed(const Vector<StringName>
|
||||||
|
|
||||||
for (int i = 1; i < p_path.size(); i++) {
|
for (int i = 1; i < p_path.size(); i++) {
|
||||||
if (check.get_type() == Variant::OBJECT || check.get_type() == Variant::DICTIONARY || check.get_type() == Variant::ARRAY) {
|
if (check.get_type() == Variant::OBJECT || check.get_type() == Variant::DICTIONARY || check.get_type() == Variant::ARRAY) {
|
||||||
// We cannot be sure about the type of properties this types can have
|
// We cannot be sure about the type of properties this type can have
|
||||||
if (r_valid) {
|
if (r_valid) {
|
||||||
*r_valid = false;
|
*r_valid = false;
|
||||||
}
|
}
|
||||||
|
@ -1719,10 +1719,10 @@ void *Object::get_script_instance_binding(int p_script_language_index) {
|
||||||
ERR_FAIL_INDEX_V(p_script_language_index, MAX_SCRIPT_INSTANCE_BINDINGS, nullptr);
|
ERR_FAIL_INDEX_V(p_script_language_index, MAX_SCRIPT_INSTANCE_BINDINGS, nullptr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//it's up to the script language to make this thread safe, if the function is called twice due to threads being out of syncro
|
//it's up to the script language to make this thread safe, if the function is called twice due to threads being out of sync
|
||||||
//just return the same pointer.
|
//just return the same pointer.
|
||||||
//if you want to put a big lock in the entire function and keep allocated pointers in a map or something, feel free to do it
|
//if you want to put a big lock in the entire function and keep allocated pointers in a map or something, feel free to do it
|
||||||
//as it should not really affect performance much (won't be called too often), as in far most caes the condition below will be false afterwards
|
//as it should not really affect performance much (won't be called too often), as in far most cases the condition below will be false afterwards
|
||||||
|
|
||||||
if (!_script_instance_bindings[p_script_language_index]) {
|
if (!_script_instance_bindings[p_script_language_index]) {
|
||||||
void *script_data = ScriptServer::get_language(p_script_language_index)->alloc_instance_binding_data(this);
|
void *script_data = ScriptServer::get_language(p_script_language_index)->alloc_instance_binding_data(this);
|
||||||
|
|
|
@ -136,7 +136,7 @@ void PoolAllocator::compact_up(int p_from) {
|
||||||
for (int i = entry_count - 1; i >= p_from; i--) {
|
for (int i = entry_count - 1; i >= p_from; i--) {
|
||||||
Entry &entry = entry_array[entry_indices[i]];
|
Entry &entry = entry_array[entry_indices[i]];
|
||||||
|
|
||||||
/* determine hole size to nextious entry */
|
/* determine hole size for next entry */
|
||||||
|
|
||||||
int hole_size = next_entry_end_pos - (entry.pos + aligned(entry.len));
|
int hole_size = next_entry_end_pos - (entry.pos + aligned(entry.len));
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ struct _PHashTranslationCmp {
|
||||||
|
|
||||||
void PHashTranslation::generate(const Ref<Translation> &p_from) {
|
void PHashTranslation::generate(const Ref<Translation> &p_from) {
|
||||||
// This method compresses a Translation instance.
|
// This method compresses a Translation instance.
|
||||||
// Right now it doesn't handle context or plurals, so Translation subclasses using plurals or context (i.e TranslationPO) shouldn't be compressed.
|
// Right now, it doesn't handle context or plurals, so Translation subclasses using plurals or context (i.e TranslationPO) shouldn't be compressed.
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
List<StringName> keys;
|
List<StringName> keys;
|
||||||
p_from->get_message_list(&keys);
|
p_from->get_message_list(&keys);
|
||||||
|
|
|
@ -158,7 +158,7 @@ int TranslationPO::_get_plural_index(int p_n) const {
|
||||||
void TranslationPO::_cache_plural_tests(const String &p_plural_rule) {
|
void TranslationPO::_cache_plural_tests(const String &p_plural_rule) {
|
||||||
// Some examples of p_plural_rule passed in can have the form:
|
// Some examples of p_plural_rule passed in can have the form:
|
||||||
// "n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5" (Arabic)
|
// "n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5" (Arabic)
|
||||||
// "n >= 2" (French) // When evaluating the last, esp careful with this one.
|
// "n >= 2" (French) // When evaluating the last, especially careful with this one.
|
||||||
// "n != 1" (English)
|
// "n != 1" (English)
|
||||||
int first_ques_mark = p_plural_rule.find("?");
|
int first_ques_mark = p_plural_rule.find("?");
|
||||||
if (first_ques_mark == -1) {
|
if (first_ques_mark == -1) {
|
||||||
|
|
|
@ -1764,7 +1764,7 @@ bool String::parse_utf8(const char *p_utf8, int p_len) {
|
||||||
|
|
||||||
if (skip) {
|
if (skip) {
|
||||||
_UNICERROR("no space left");
|
_UNICERROR("no space left");
|
||||||
return true; //not enough spac
|
return true; //not enough space
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4480,7 +4480,7 @@ String String::sprintf(const Array &values, bool *error) const {
|
||||||
for (; *self; self++) {
|
for (; *self; self++) {
|
||||||
const char32_t c = *self;
|
const char32_t c = *self;
|
||||||
|
|
||||||
if (in_format) { // We have % - lets see what else we get.
|
if (in_format) { // We have % - let's see what else we get.
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case '%': { // Replace %% with %
|
case '%': { // Replace %% with %
|
||||||
formatted += chr(c);
|
formatted += chr(c);
|
||||||
|
|
|
@ -141,7 +141,7 @@ uint32_t Array::hash() const {
|
||||||
|
|
||||||
void Array::_assign(const Array &p_array) {
|
void Array::_assign(const Array &p_array) {
|
||||||
if (_p->typed.type != Variant::OBJECT && _p->typed.type == p_array._p->typed.type) {
|
if (_p->typed.type != Variant::OBJECT && _p->typed.type == p_array._p->typed.type) {
|
||||||
//same type or untyped, just reference, shuold be fine
|
//same type or untyped, just reference, should be fine
|
||||||
_ref(p_array);
|
_ref(p_array);
|
||||||
} else if (_p->typed.type == Variant::NIL) { //from typed to untyped, must copy, but this is cheap anyway
|
} else if (_p->typed.type == Variant::NIL) { //from typed to untyped, must copy, but this is cheap anyway
|
||||||
_p->array = p_array._p->array;
|
_p->array = p_array._p->array;
|
||||||
|
|
|
@ -126,7 +126,7 @@ bool Callable::operator==(const Callable &p_callable) const {
|
||||||
if (custom_a == custom_b) {
|
if (custom_a == custom_b) {
|
||||||
if (custom_a) {
|
if (custom_a) {
|
||||||
if (custom == p_callable.custom) {
|
if (custom == p_callable.custom) {
|
||||||
return true; //same pointer, dont even compare
|
return true; //same pointer, don't even compare
|
||||||
}
|
}
|
||||||
|
|
||||||
CallableCustom::CompareEqualFunc eq_a = custom->get_compare_equal_func();
|
CallableCustom::CompareEqualFunc eq_a = custom->get_compare_equal_func();
|
||||||
|
@ -155,7 +155,7 @@ bool Callable::operator<(const Callable &p_callable) const {
|
||||||
if (custom_a == custom_b) {
|
if (custom_a == custom_b) {
|
||||||
if (custom_a) {
|
if (custom_a) {
|
||||||
if (custom == p_callable.custom) {
|
if (custom == p_callable.custom) {
|
||||||
return false; //same pointer, dont even compare
|
return false; //same pointer, don't even compare
|
||||||
}
|
}
|
||||||
|
|
||||||
CallableCustom::CompareLessFunc less_a = custom->get_compare_less_func();
|
CallableCustom::CompareLessFunc less_a = custom->get_compare_less_func();
|
||||||
|
|
|
@ -2198,7 +2198,7 @@ void Variant::interpolate(const Variant &a, const Variant &b, float c, Variant &
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case STRING: {
|
case STRING: {
|
||||||
//this is pretty funny and bizarre, but artists like to use it for typewritter effects
|
//this is pretty funny and bizarre, but artists like to use it for typewriter effects
|
||||||
String sa = *reinterpret_cast<const String *>(a._data._mem);
|
String sa = *reinterpret_cast<const String *>(a._data._mem);
|
||||||
String sb = *reinterpret_cast<const String *>(b._data._mem);
|
String sb = *reinterpret_cast<const String *>(b._data._mem);
|
||||||
String dst;
|
String dst;
|
||||||
|
|
|
@ -119,7 +119,7 @@ static void update_external_dependency_for_store(VkSubpassDependency &dependency
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_depth) {
|
if (is_depth) {
|
||||||
// Depth resources have addtional stages that may be interested in them
|
// Depth resources have additional stages that may be interested in them
|
||||||
dependency.dstStageMask |= VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT;
|
dependency.dstStageMask |= VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT;
|
||||||
dependency.dstAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
|
dependency.dstAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
|
||||||
}
|
}
|
||||||
|
@ -3108,7 +3108,7 @@ Error RenderingDeviceVulkan::texture_clear(RID p_texture, const Color &p_color,
|
||||||
|
|
||||||
VkImageLayout clear_layout = (src_tex->layout == VK_IMAGE_LAYOUT_GENERAL) ? VK_IMAGE_LAYOUT_GENERAL : VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
|
VkImageLayout clear_layout = (src_tex->layout == VK_IMAGE_LAYOUT_GENERAL) ? VK_IMAGE_LAYOUT_GENERAL : VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
|
||||||
|
|
||||||
// NOTE: Perhaps the valid stages/accesses for a given onwner should be a property of the owner. (Here and places like _get_buffer_from_owner)
|
// NOTE: Perhaps the valid stages/accesses for a given owner should be a property of the owner. (Here and places like _get_buffer_from_owner)
|
||||||
const VkPipelineStageFlags valid_texture_stages = VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
|
const VkPipelineStageFlags valid_texture_stages = VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
|
||||||
constexpr VkAccessFlags read_access = VK_ACCESS_SHADER_READ_BIT;
|
constexpr VkAccessFlags read_access = VK_ACCESS_SHADER_READ_BIT;
|
||||||
constexpr VkAccessFlags read_write_access = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
constexpr VkAccessFlags read_write_access = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
||||||
|
@ -3250,7 +3250,7 @@ VkRenderPass RenderingDeviceVulkan::_render_pass_create(const Vector<AttachmentF
|
||||||
Vector<VkAttachmentReference> depth_stencil_references;
|
Vector<VkAttachmentReference> depth_stencil_references;
|
||||||
Vector<VkAttachmentReference> resolve_references;
|
Vector<VkAttachmentReference> resolve_references;
|
||||||
|
|
||||||
// Set up a dependencies from/to external equivalent to the default (implicit) one, and then amend them
|
// Set up dependencies from/to external equivalent to the default (implicit) one, and then amend them
|
||||||
const VkPipelineStageFlags default_access_mask = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
|
const VkPipelineStageFlags default_access_mask = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
|
||||||
VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
|
VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
|
||||||
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
|
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
|
||||||
|
@ -3279,7 +3279,7 @@ VkRenderPass RenderingDeviceVulkan::_render_pass_create(const Vector<AttachmentF
|
||||||
bool is_storage = p_format[i].usage_flags & TEXTURE_USAGE_STORAGE_BIT;
|
bool is_storage = p_format[i].usage_flags & TEXTURE_USAGE_STORAGE_BIT;
|
||||||
|
|
||||||
// For each UNDEFINED, assume the prior use was a *read*, as we'd be discarding the output of a write
|
// For each UNDEFINED, assume the prior use was a *read*, as we'd be discarding the output of a write
|
||||||
// Also, each UNDEFINED will do an immediate layout transition (write), s.t. we must ensure execution syncronization vs.
|
// Also, each UNDEFINED will do an immediate layout transition (write), s.t. we must ensure execution synchronization vs.
|
||||||
// the read. If this is a performance issue, one could track the actual last accessor of each resource, adding only that
|
// the read. If this is a performance issue, one could track the actual last accessor of each resource, adding only that
|
||||||
// stage
|
// stage
|
||||||
switch (is_depth_stencil ? p_initial_depth_action : p_initial_color_action) {
|
switch (is_depth_stencil ? p_initial_depth_action : p_initial_color_action) {
|
||||||
|
@ -3424,12 +3424,12 @@ VkRenderPass RenderingDeviceVulkan::_render_pass_create(const Vector<AttachmentF
|
||||||
|
|
||||||
// NOTE: Big Mallet Approach -- any layout transition causes a full barrier
|
// NOTE: Big Mallet Approach -- any layout transition causes a full barrier
|
||||||
if (reference.layout != description.initialLayout) {
|
if (reference.layout != description.initialLayout) {
|
||||||
// NOTE: this should be smarter based on the textures knowledge of it's previous role
|
// NOTE: this should be smarter based on the texture's knowledge of its previous role
|
||||||
dependency_from_external.srcStageMask |= VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
|
dependency_from_external.srcStageMask |= VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
|
||||||
dependency_from_external.srcAccessMask |= VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT;
|
dependency_from_external.srcAccessMask |= VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT;
|
||||||
}
|
}
|
||||||
if (reference.layout != description.finalLayout) {
|
if (reference.layout != description.finalLayout) {
|
||||||
// NOTE: this should be smarter based on the textures knowledge of it's subsequent role
|
// NOTE: this should be smarter based on the texture's knowledge of its subsequent role
|
||||||
dependency_to_external.dstStageMask |= VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
|
dependency_to_external.dstStageMask |= VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
|
||||||
dependency_to_external.dstAccessMask |= VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT;
|
dependency_to_external.dstAccessMask |= VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT;
|
||||||
}
|
}
|
||||||
|
@ -5151,7 +5151,7 @@ RID RenderingDeviceVulkan::uniform_set_create(const Vector<Uniform> &p_uniforms,
|
||||||
}
|
}
|
||||||
ERR_FAIL_COND_V_MSG(!buffer, RID(), "Storage buffer supplied (binding: " + itos(uniform.binding) + ") is invalid.");
|
ERR_FAIL_COND_V_MSG(!buffer, RID(), "Storage buffer supplied (binding: " + itos(uniform.binding) + ") is invalid.");
|
||||||
|
|
||||||
//if 0, then its sized on link time
|
//if 0, then it's sized on link time
|
||||||
ERR_FAIL_COND_V_MSG(set_uniform.length > 0 && buffer->size != (uint32_t)set_uniform.length, RID(),
|
ERR_FAIL_COND_V_MSG(set_uniform.length > 0 && buffer->size != (uint32_t)set_uniform.length, RID(),
|
||||||
"Storage buffer supplied (binding: " + itos(uniform.binding) + ") size (" + itos(buffer->size) + " does not match size of shader uniform: (" + itos(set_uniform.length) + ").");
|
"Storage buffer supplied (binding: " + itos(uniform.binding) + ") size (" + itos(buffer->size) + " does not match size of shader uniform: (" + itos(set_uniform.length) + ").");
|
||||||
|
|
||||||
|
@ -5336,7 +5336,7 @@ Vector<uint8_t> RenderingDeviceVulkan::buffer_get_data(RID p_buffer) {
|
||||||
ERR_FAIL_V_MSG(Vector<uint8_t>(), "Buffer is either invalid or this type of buffer can't be retrieved. Only Index and Vertex buffers allow retrieving.");
|
ERR_FAIL_V_MSG(Vector<uint8_t>(), "Buffer is either invalid or this type of buffer can't be retrieved. Only Index and Vertex buffers allow retrieving.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure no one is using the buffer -- the "false" gets us to the same command buffer as below.
|
// Make sure no one is using the buffer -- the "false" gets us to the same command buffer as below.
|
||||||
_buffer_memory_barrier(buffer->buffer, 0, buffer->size, src_stage_mask, src_access_mask, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_READ_BIT, false);
|
_buffer_memory_barrier(buffer->buffer, 0, buffer->size, src_stage_mask, src_access_mask, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_READ_BIT, false);
|
||||||
|
|
||||||
VkCommandBuffer command_buffer = frames[frame].setup_command_buffer;
|
VkCommandBuffer command_buffer = frames[frame].setup_command_buffer;
|
||||||
|
@ -5729,7 +5729,7 @@ RID RenderingDeviceVulkan::render_pipeline_create(RID p_shader, FramebufferForma
|
||||||
#endif
|
#endif
|
||||||
//create ID to associate with this pipeline
|
//create ID to associate with this pipeline
|
||||||
RID id = render_pipeline_owner.make_rid(pipeline);
|
RID id = render_pipeline_owner.make_rid(pipeline);
|
||||||
//now add aall the dependencies
|
//now add all the dependencies
|
||||||
_add_dependency(id, p_shader);
|
_add_dependency(id, p_shader);
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
@ -5780,7 +5780,7 @@ RID RenderingDeviceVulkan::compute_pipeline_create(RID p_shader) {
|
||||||
|
|
||||||
//create ID to associate with this pipeline
|
//create ID to associate with this pipeline
|
||||||
RID id = compute_pipeline_owner.make_rid(pipeline);
|
RID id = compute_pipeline_owner.make_rid(pipeline);
|
||||||
//now add aall the dependencies
|
//now add all the dependencies
|
||||||
_add_dependency(id, p_shader);
|
_add_dependency(id, p_shader);
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
@ -6817,7 +6817,7 @@ void RenderingDeviceVulkan::draw_list_end(uint32_t p_post_barrier) {
|
||||||
|
|
||||||
// To ensure proper synchronization, we must make sure rendering is done before:
|
// To ensure proper synchronization, we must make sure rendering is done before:
|
||||||
// * Some buffer is copied
|
// * Some buffer is copied
|
||||||
// * Another render pass happens (since we may be done
|
// * Another render pass happens (since we may be done)
|
||||||
|
|
||||||
#ifdef FORCE_FULL_BARRIER
|
#ifdef FORCE_FULL_BARRIER
|
||||||
_full_barrier(true);
|
_full_barrier(true);
|
||||||
|
@ -7780,7 +7780,7 @@ uint64_t RenderingDeviceVulkan::get_memory_usage() const {
|
||||||
|
|
||||||
void RenderingDeviceVulkan::_flush(bool p_current_frame) {
|
void RenderingDeviceVulkan::_flush(bool p_current_frame) {
|
||||||
if (local_device.is_valid() && !p_current_frame) {
|
if (local_device.is_valid() && !p_current_frame) {
|
||||||
return; //flushign previous frames has no effect with local device
|
return; //flushing previous frames has no effect with local device
|
||||||
}
|
}
|
||||||
//not doing this crashes RADV (undefined behavior)
|
//not doing this crashes RADV (undefined behavior)
|
||||||
if (p_current_frame) {
|
if (p_current_frame) {
|
||||||
|
|
|
@ -1313,13 +1313,13 @@ Error VulkanContext::swap_buffers() {
|
||||||
DemoUpdateTargetIPD(demo);
|
DemoUpdateTargetIPD(demo);
|
||||||
|
|
||||||
// Note: a real application would position its geometry to that it's in
|
// Note: a real application would position its geometry to that it's in
|
||||||
// the correct locatoin for when the next image is presented. It might
|
// the correct location for when the next image is presented. It might
|
||||||
// also wait, so that there's less latency between any input and when
|
// also wait, so that there's less latency between any input and when
|
||||||
// the next image is rendered/presented. This demo program is so
|
// the next image is rendered/presented. This demo program is so
|
||||||
// simple that it doesn't do either of those.
|
// simple that it doesn't do either of those.
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// Wait for the image acquired semaphore to be signaled to ensure
|
// Wait for the image acquired semaphore to be signalled to ensure
|
||||||
// that the image won't be rendered to until the presentation
|
// that the image won't be rendered to until the presentation
|
||||||
// engine has fully released ownership to the application, and it is
|
// engine has fully released ownership to the application, and it is
|
||||||
// okay to render to the image.
|
// okay to render to the image.
|
||||||
|
@ -1385,7 +1385,7 @@ Error VulkanContext::swap_buffers() {
|
||||||
ERR_FAIL_COND_V(err, ERR_CANT_CREATE);
|
ERR_FAIL_COND_V(err, ERR_CANT_CREATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we are using separate queues we have to wait for image ownership,
|
// If we are using separate queues, we have to wait for image ownership,
|
||||||
// otherwise wait for draw complete
|
// otherwise wait for draw complete
|
||||||
VkPresentInfoKHR present = {
|
VkPresentInfoKHR present = {
|
||||||
/*sType*/ VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
|
/*sType*/ VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
|
||||||
|
|
|
@ -529,7 +529,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
||||||
input_map = memnew(InputMap);
|
input_map = memnew(InputMap);
|
||||||
globals = memnew(ProjectSettings);
|
globals = memnew(ProjectSettings);
|
||||||
|
|
||||||
register_core_settings(); //here globals is present
|
register_core_settings(); //here globals are present
|
||||||
|
|
||||||
translation_server = memnew(TranslationServer);
|
translation_server = memnew(TranslationServer);
|
||||||
performance = memnew(Performance);
|
performance = memnew(Performance);
|
||||||
|
@ -1517,7 +1517,7 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
|
||||||
|
|
||||||
input = memnew(Input);
|
input = memnew(Input);
|
||||||
|
|
||||||
/* Iniitalize Display Server */
|
/* Initialize Display Server */
|
||||||
|
|
||||||
{
|
{
|
||||||
String rendering_driver; // temp broken
|
String rendering_driver; // temp broken
|
||||||
|
@ -1547,7 +1547,7 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
|
||||||
display_server->screen_set_orientation(window_orientation);
|
display_server->screen_set_orientation(window_orientation);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize Pen Table Driver */
|
/* Initialize Pen Tablet Driver */
|
||||||
|
|
||||||
{
|
{
|
||||||
GLOBAL_DEF_RST_NOVAL("input_devices/pen_tablet/driver", "");
|
GLOBAL_DEF_RST_NOVAL("input_devices/pen_tablet/driver", "");
|
||||||
|
@ -1796,7 +1796,7 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
|
||||||
if (!project_manager) {
|
if (!project_manager) {
|
||||||
// If not running the project manager, and now that the engine is
|
// If not running the project manager, and now that the engine is
|
||||||
// able to load resources, load the global shader variables.
|
// able to load resources, load the global shader variables.
|
||||||
// If running on editor, dont load the textures because the editor
|
// If running on editor, don't load the textures because the editor
|
||||||
// may want to import them first. Editor will reload those later.
|
// may want to import them first. Editor will reload those later.
|
||||||
rendering_server->global_variables_load_settings(!editor);
|
rendering_server->global_variables_load_settings(!editor);
|
||||||
}
|
}
|
||||||
|
@ -1804,7 +1804,7 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
|
||||||
_start_success = true;
|
_start_success = true;
|
||||||
locale = String();
|
locale = String();
|
||||||
|
|
||||||
ClassDB::set_current_api(ClassDB::API_NONE); //no more api is registered at this point
|
ClassDB::set_current_api(ClassDB::API_NONE); //no more APIs are registered at this point
|
||||||
|
|
||||||
print_verbose("CORE API HASH: " + uitos(ClassDB::get_api_hash(ClassDB::API_CORE)));
|
print_verbose("CORE API HASH: " + uitos(ClassDB::get_api_hash(ClassDB::API_CORE)));
|
||||||
print_verbose("EDITOR API HASH: " + uitos(ClassDB::get_api_hash(ClassDB::API_EDITOR)));
|
print_verbose("EDITOR API HASH: " + uitos(ClassDB::get_api_hash(ClassDB::API_EDITOR)));
|
||||||
|
@ -2606,7 +2606,7 @@ void Main::cleanup(bool p_force) {
|
||||||
// Sync pending commands that may have been queued from a different thread during ScriptServer finalization
|
// Sync pending commands that may have been queued from a different thread during ScriptServer finalization
|
||||||
RenderingServer::get_singleton()->sync();
|
RenderingServer::get_singleton()->sync();
|
||||||
|
|
||||||
//clear global shader variables before scene and other graphics stuff is deinitialized.
|
//clear global shader variables before scene and other graphics stuff are deinitialized.
|
||||||
rendering_server->global_variables_clear();
|
rendering_server->global_variables_clear();
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
|
|
|
@ -334,7 +334,7 @@ def use_windows_spawn_fix(self, platform=None):
|
||||||
# On Windows, due to the limited command line length, when creating a static library
|
# On Windows, due to the limited command line length, when creating a static library
|
||||||
# from a very high number of objects SCons will invoke "ar" once per object file;
|
# from a very high number of objects SCons will invoke "ar" once per object file;
|
||||||
# that makes object files with same names to be overwritten so the last wins and
|
# that makes object files with same names to be overwritten so the last wins and
|
||||||
# the library looses symbols defined by overwritten objects.
|
# the library loses symbols defined by overwritten objects.
|
||||||
# By enabling quick append instead of the default mode (replacing), libraries will
|
# By enabling quick append instead of the default mode (replacing), libraries will
|
||||||
# got built correctly regardless the invocation strategy.
|
# got built correctly regardless the invocation strategy.
|
||||||
# Furthermore, since SCons will rebuild the library from scratch when an object file
|
# Furthermore, since SCons will rebuild the library from scratch when an object file
|
||||||
|
@ -478,7 +478,7 @@ def detect_visual_c_compiler_version(tools_env):
|
||||||
# and not scons setup environment (env)... so make sure you call the right environment on it or it will fail to detect
|
# and not scons setup environment (env)... so make sure you call the right environment on it or it will fail to detect
|
||||||
# the proper vc version that will be called
|
# the proper vc version that will be called
|
||||||
|
|
||||||
# There is no flag to give to visual c compilers to set the architecture, ie scons bits argument (32,64,ARM etc)
|
# There is no flag to give to visual c compilers to set the architecture, i.e. scons bits argument (32,64,ARM etc)
|
||||||
# There are many different cl.exe files that are run, and each one compiles & links to a different architecture
|
# There are many different cl.exe files that are run, and each one compiles & links to a different architecture
|
||||||
# As far as I know, the only way to figure out what compiler will be run when Scons calls cl.exe via Program()
|
# As far as I know, the only way to figure out what compiler will be run when Scons calls cl.exe via Program()
|
||||||
# is to check the PATH variable and figure out which one will be called first. Code below does that and returns:
|
# is to check the PATH variable and figure out which one will be called first. Code below does that and returns:
|
||||||
|
@ -633,7 +633,7 @@ def generate_vs_project(env, num_jobs):
|
||||||
'call "' + batch_file + '" !plat!',
|
'call "' + batch_file + '" !plat!',
|
||||||
]
|
]
|
||||||
|
|
||||||
# windows allows us to have spaces in paths, so we need
|
# Windows allows us to have spaces in paths, so we need
|
||||||
# to double quote off the directory. However, the path ends
|
# to double quote off the directory. However, the path ends
|
||||||
# in a backslash, so we need to remove this, lest it escape the
|
# in a backslash, so we need to remove this, lest it escape the
|
||||||
# last double quote off, confusing MSBuild
|
# last double quote off, confusing MSBuild
|
||||||
|
|
|
@ -461,7 +461,7 @@ void BulletPhysicsServer3D::body_set_space(RID p_body, RID p_space) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (body->get_space() == space) {
|
if (body->get_space() == space) {
|
||||||
return; //pointles
|
return; //pointless
|
||||||
}
|
}
|
||||||
|
|
||||||
body->set_space(space);
|
body->set_space(space);
|
||||||
|
@ -617,11 +617,11 @@ uint32_t BulletPhysicsServer3D::body_get_collision_mask(RID p_body) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void BulletPhysicsServer3D::body_set_user_flags(RID p_body, uint32_t p_flags) {
|
void BulletPhysicsServer3D::body_set_user_flags(RID p_body, uint32_t p_flags) {
|
||||||
// This function si not currently supported
|
// This function is not currently supported
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t BulletPhysicsServer3D::body_get_user_flags(RID p_body) const {
|
uint32_t BulletPhysicsServer3D::body_get_user_flags(RID p_body) const {
|
||||||
// This function si not currently supported
|
// This function is not currently supported
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -898,7 +898,7 @@ void BulletPhysicsServer3D::soft_body_set_space(RID p_body, RID p_space) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (body->get_space() == space) {
|
if (body->get_space() == space) {
|
||||||
return; //pointles
|
return; //pointless
|
||||||
}
|
}
|
||||||
|
|
||||||
body->set_space(space);
|
body->set_space(space);
|
||||||
|
|
|
@ -116,7 +116,7 @@ void UNSCALE_BT_BASIS(btTransform &scaledBasis) {
|
||||||
}
|
}
|
||||||
} else { // Column 1 scale not fuzzy zero.
|
} else { // Column 1 scale not fuzzy zero.
|
||||||
if (column2.fuzzyZero()) {
|
if (column2.fuzzyZero()) {
|
||||||
// Create two vectors othogonal to column 1.
|
// Create two vectors orthogonal to column 1.
|
||||||
// Ensure that a default basis is created if column 1 = <0, 1, 0>
|
// Ensure that a default basis is created if column 1 = <0, 1, 0>
|
||||||
column0 = btVector3(column1[1], -column1[0], 0);
|
column0 = btVector3(column1[1], -column1[0], 0);
|
||||||
column2 = column0.cross(column1);
|
column2 = column0.cross(column1);
|
||||||
|
|
|
@ -43,7 +43,7 @@ GodotCollisionDispatcher::GodotCollisionDispatcher(btCollisionConfiguration *col
|
||||||
|
|
||||||
bool GodotCollisionDispatcher::needsCollision(const btCollisionObject *body0, const btCollisionObject *body1) {
|
bool GodotCollisionDispatcher::needsCollision(const btCollisionObject *body0, const btCollisionObject *body1) {
|
||||||
if (body0->getUserIndex() == CASTED_TYPE_AREA || body1->getUserIndex() == CASTED_TYPE_AREA) {
|
if (body0->getUserIndex() == CASTED_TYPE_AREA || body1->getUserIndex() == CASTED_TYPE_AREA) {
|
||||||
// Avoide area narrow phase
|
// Avoid area narrow phase
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return btCollisionDispatcher::needsCollision(body0, body1);
|
return btCollisionDispatcher::needsCollision(body0, body1);
|
||||||
|
@ -51,7 +51,7 @@ bool GodotCollisionDispatcher::needsCollision(const btCollisionObject *body0, co
|
||||||
|
|
||||||
bool GodotCollisionDispatcher::needsResponse(const btCollisionObject *body0, const btCollisionObject *body1) {
|
bool GodotCollisionDispatcher::needsResponse(const btCollisionObject *body0, const btCollisionObject *body1) {
|
||||||
if (body0->getUserIndex() == CASTED_TYPE_AREA || body1->getUserIndex() == CASTED_TYPE_AREA) {
|
if (body0->getUserIndex() == CASTED_TYPE_AREA || body1->getUserIndex() == CASTED_TYPE_AREA) {
|
||||||
// Avoide area narrow phase
|
// Avoid area narrow phase
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return btCollisionDispatcher::needsResponse(body0, body1);
|
return btCollisionDispatcher::needsResponse(body0, body1);
|
||||||
|
|
|
@ -113,7 +113,7 @@ btScalar GodotAllConvexResultCallback::addSingleResult(btCollisionWorld::LocalCo
|
||||||
|
|
||||||
PhysicsDirectSpaceState3D::ShapeResult &result = m_results[count];
|
PhysicsDirectSpaceState3D::ShapeResult &result = m_results[count];
|
||||||
|
|
||||||
result.shape = convexResult.m_localShapeInfo->m_triangleIndex; // "m_triangleIndex" Is a odd name but contains the compound shape ID
|
result.shape = convexResult.m_localShapeInfo->m_triangleIndex; // "m_triangleIndex" Is an odd name but contains the compound shape ID
|
||||||
result.rid = gObj->get_self();
|
result.rid = gObj->get_self();
|
||||||
result.collider_id = gObj->get_instance_id();
|
result.collider_id = gObj->get_instance_id();
|
||||||
result.collider = result.collider_id.is_null() ? nullptr : ObjectDB::get_instance(result.collider_id);
|
result.collider = result.collider_id.is_null() ? nullptr : ObjectDB::get_instance(result.collider_id);
|
||||||
|
@ -176,7 +176,7 @@ bool GodotClosestConvexResultCallback::needsCollision(btBroadphaseProxy *proxy0)
|
||||||
|
|
||||||
btScalar GodotClosestConvexResultCallback::addSingleResult(btCollisionWorld::LocalConvexResult &convexResult, bool normalInWorldSpace) {
|
btScalar GodotClosestConvexResultCallback::addSingleResult(btCollisionWorld::LocalConvexResult &convexResult, bool normalInWorldSpace) {
|
||||||
if (convexResult.m_localShapeInfo) {
|
if (convexResult.m_localShapeInfo) {
|
||||||
m_shapeId = convexResult.m_localShapeInfo->m_triangleIndex; // "m_triangleIndex" Is a odd name but contains the compound shape ID
|
m_shapeId = convexResult.m_localShapeInfo->m_triangleIndex; // "m_triangleIndex" Is an odd name but contains the compound shape ID
|
||||||
} else {
|
} else {
|
||||||
m_shapeId = 0;
|
m_shapeId = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -515,7 +515,7 @@ real_t RigidBodyBullet::get_param(PhysicsServer3D::BodyParameter p_param) const
|
||||||
}
|
}
|
||||||
|
|
||||||
void RigidBodyBullet::set_mode(PhysicsServer3D::BodyMode p_mode) {
|
void RigidBodyBullet::set_mode(PhysicsServer3D::BodyMode p_mode) {
|
||||||
// This is necessary to block force_integration untile next move
|
// This is necessary to block force_integration until next move
|
||||||
can_integrate_forces = false;
|
can_integrate_forces = false;
|
||||||
destroy_kinematic_utilities();
|
destroy_kinematic_utilities();
|
||||||
// The mode change is relevant to its mass
|
// The mode change is relevant to its mass
|
||||||
|
@ -725,7 +725,7 @@ void RigidBodyBullet::set_continuous_collision_detection(bool p_enable) {
|
||||||
// 1 meter in one simulation frame
|
// 1 meter in one simulation frame
|
||||||
btBody->setCcdMotionThreshold(1e-7);
|
btBody->setCcdMotionThreshold(1e-7);
|
||||||
|
|
||||||
/// Calculate using the rule writte below the CCD swept sphere radius
|
/// Calculate using the rule write below the CCD swept sphere radius
|
||||||
/// CCD works on an embedded sphere of radius, make sure this radius
|
/// CCD works on an embedded sphere of radius, make sure this radius
|
||||||
/// is embedded inside the convex objects, preferably smaller:
|
/// is embedded inside the convex objects, preferably smaller:
|
||||||
/// for an object of dimensions 1 meter, try 0.2
|
/// for an object of dimensions 1 meter, try 0.2
|
||||||
|
|
|
@ -336,7 +336,7 @@ void SoftBodyBullet::set_trimesh_body_shape(Vector<int> p_indices, Vector<Vector
|
||||||
Map<Vector3, int>::Element *e = unique_vertices.find(p_vertices_read[vs_vertex_index]);
|
Map<Vector3, int>::Element *e = unique_vertices.find(p_vertices_read[vs_vertex_index]);
|
||||||
int vertex_id;
|
int vertex_id;
|
||||||
if (e) {
|
if (e) {
|
||||||
// Already rxisting
|
// Already existing
|
||||||
vertex_id = e->value();
|
vertex_id = e->value();
|
||||||
} else {
|
} else {
|
||||||
// Create new one
|
// Create new one
|
||||||
|
|
|
@ -81,7 +81,7 @@ int BulletPhysicsDirectSpaceState::intersect_point(const Vector3 &p_point, Shape
|
||||||
btResult.m_collisionFilterMask = p_collision_mask;
|
btResult.m_collisionFilterMask = p_collision_mask;
|
||||||
space->dynamicsWorld->contactTest(&collision_object_point, btResult);
|
space->dynamicsWorld->contactTest(&collision_object_point, btResult);
|
||||||
|
|
||||||
// The results is already populated by GodotAllConvexResultCallback
|
// The results are already populated by GodotAllConvexResultCallback
|
||||||
return btResult.m_count;
|
return btResult.m_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -970,7 +970,7 @@ void CSGBrushOperation::Build2DFaces::_merge_faces(const Vector<int> &p_segment_
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if point is on an each edge.
|
// Check if point is on each edge.
|
||||||
for (int face_edge_idx = 0; face_edge_idx < 3; ++face_edge_idx) {
|
for (int face_edge_idx = 0; face_edge_idx < 3; ++face_edge_idx) {
|
||||||
Vector2 edge_points[2] = {
|
Vector2 edge_points[2] = {
|
||||||
face_points[face_edge_idx],
|
face_points[face_edge_idx],
|
||||||
|
@ -1076,7 +1076,7 @@ void CSGBrushOperation::Build2DFaces::_find_edge_intersections(const Vector2 p_s
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If opposite point is on the segemnt, add its index to segment indices too.
|
// If opposite point is on the segment, add its index to segment indices too.
|
||||||
Vector2 closest_point = Geometry2D::get_closest_point_to_segment(vertices[opposite_vertex_idx].point, p_segment_points);
|
Vector2 closest_point = Geometry2D::get_closest_point_to_segment(vertices[opposite_vertex_idx].point, p_segment_points);
|
||||||
if ((closest_point - vertices[opposite_vertex_idx].point).length_squared() < vertex_snap2) {
|
if ((closest_point - vertices[opposite_vertex_idx].point).length_squared() < vertex_snap2) {
|
||||||
_add_vertex_idx_sorted(r_segment_indices, opposite_vertex_idx);
|
_add_vertex_idx_sorted(r_segment_indices, opposite_vertex_idx);
|
||||||
|
@ -1137,7 +1137,7 @@ int CSGBrushOperation::Build2DFaces::_insert_point(const Vector2 &p_point) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if point is on an each edge.
|
// Check if point is on each edge.
|
||||||
bool on_edge = false;
|
bool on_edge = false;
|
||||||
for (int face_edge_idx = 0; face_edge_idx < 3; ++face_edge_idx) {
|
for (int face_edge_idx = 0; face_edge_idx < 3; ++face_edge_idx) {
|
||||||
Vector2 edge_points[2] = {
|
Vector2 edge_points[2] = {
|
||||||
|
@ -1400,7 +1400,7 @@ void CSGBrushOperation::update_faces(const CSGBrush &p_brush_a, const int p_face
|
||||||
under_count++;
|
under_count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If all points under or over the plane, there is no intesection.
|
// If all points under or over the plane, there is no intersection.
|
||||||
if (over_count == 3 || under_count == 3) {
|
if (over_count == 3 || under_count == 3) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1421,7 +1421,7 @@ void CSGBrushOperation::update_faces(const CSGBrush &p_brush_a, const int p_face
|
||||||
under_count++;
|
under_count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If all points under or over the plane, there is no intesection.
|
// If all points under or over the plane, there is no intersection.
|
||||||
if (over_count == 3 || under_count == 3) {
|
if (over_count == 3 || under_count == 3) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1160,7 +1160,7 @@ CSGBrush *CSGBox3D::_build_brush() {
|
||||||
materialsw[face] = material;
|
materialsw[face] = material;
|
||||||
|
|
||||||
face++;
|
face++;
|
||||||
//face 1
|
//face 2
|
||||||
facesw[face * 3 + 0] = face_points[2] * vertex_mul;
|
facesw[face * 3 + 0] = face_points[2] * vertex_mul;
|
||||||
facesw[face * 3 + 1] = face_points[3] * vertex_mul;
|
facesw[face * 3 + 1] = face_points[3] * vertex_mul;
|
||||||
facesw[face * 3 + 2] = face_points[0] * vertex_mul;
|
facesw[face * 3 + 2] = face_points[0] * vertex_mul;
|
||||||
|
|
|
@ -248,7 +248,7 @@ void NetworkedMultiplayerENet::poll() {
|
||||||
int *new_id = memnew(int);
|
int *new_id = memnew(int);
|
||||||
*new_id = event.data;
|
*new_id = event.data;
|
||||||
|
|
||||||
if (*new_id == 0) { // Data zero is sent by server (enet won't let you configure this). Server is always 1.
|
if (*new_id == 0) { // Data zero is sent by server (ENet won't let you configure this). Server is always 1.
|
||||||
*new_id = 1;
|
*new_id = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -173,7 +173,7 @@ bool NativeScript::can_instance() const {
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
// Only valid if this is either a tool script or a "regular" script.
|
// Only valid if this is either a tool script or a "regular" script.
|
||||||
// (so an environment whre scripting is disabled (and not the editor) would not
|
// (so, an environment where scripting is disabled (and not the editor) would not
|
||||||
// create objects).
|
// create objects).
|
||||||
return script_data && (is_tool() || ScriptServer::is_scripting_enabled());
|
return script_data && (is_tool() || ScriptServer::is_scripting_enabled());
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -142,7 +142,7 @@ void GDNativeExportPlugin::_export_file(const String &p_path, const String &p_ty
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add symbols for staticaly linked libraries on iOS
|
// Add symbols for statically linked libraries on iOS
|
||||||
if (p_features.has("iOS")) {
|
if (p_features.has("iOS")) {
|
||||||
bool should_fake_dynamic = false;
|
bool should_fake_dynamic = false;
|
||||||
|
|
||||||
|
|
|
@ -2419,7 +2419,7 @@ Error GDScriptCompiler::_parse_class_blocks(GDScript *p_script, const GDScriptPa
|
||||||
p_script->initializer->call(instance, nullptr, 0, ce);
|
p_script->initializer->call(instance, nullptr, 0, ce);
|
||||||
|
|
||||||
if (ce.error != Callable::CallError::CALL_OK) {
|
if (ce.error != Callable::CallError::CALL_OK) {
|
||||||
//well, tough luck, not goinna do anything here
|
//well, tough luck, not gonna do anything here
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -244,7 +244,7 @@ Variant GDScriptFunctionState::resume(const Variant &p_arg) {
|
||||||
bool completed = true;
|
bool completed = true;
|
||||||
|
|
||||||
// If the return value is a GDScriptFunctionState reference,
|
// If the return value is a GDScriptFunctionState reference,
|
||||||
// then the function did awaited again after resuming.
|
// then the function did await again after resuming.
|
||||||
if (ret.is_ref()) {
|
if (ret.is_ref()) {
|
||||||
GDScriptFunctionState *gdfs = Object::cast_to<GDScriptFunctionState>(ret);
|
GDScriptFunctionState *gdfs = Object::cast_to<GDScriptFunctionState>(ret);
|
||||||
if (gdfs && gdfs->function == function) {
|
if (gdfs && gdfs->function == function) {
|
||||||
|
|
|
@ -3018,7 +3018,7 @@ GDScriptParser::ParseRule *GDScriptParser::get_rule(GDScriptTokenizer::Token::Ty
|
||||||
// Avoid desync.
|
// Avoid desync.
|
||||||
static_assert(sizeof(rules) / sizeof(rules[0]) == GDScriptTokenizer::Token::TK_MAX, "Amount of parse rules don't match the amount of token types.");
|
static_assert(sizeof(rules) / sizeof(rules[0]) == GDScriptTokenizer::Token::TK_MAX, "Amount of parse rules don't match the amount of token types.");
|
||||||
|
|
||||||
// Let's assume this this never invalid, since nothing generates a TK_MAX.
|
// Let's assume this is never invalid, since nothing generates a TK_MAX.
|
||||||
return &rules[p_token_type];
|
return &rules[p_token_type];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1169,7 +1169,7 @@ GDScriptTokenizer::Token GDScriptTokenizer::scan() {
|
||||||
if (pending_newline) {
|
if (pending_newline) {
|
||||||
pending_newline = false;
|
pending_newline = false;
|
||||||
if (!multiline_mode) {
|
if (!multiline_mode) {
|
||||||
// Don't return newline tokens on multine mode.
|
// Don't return newline tokens on multiline mode.
|
||||||
return last_newline;
|
return last_newline;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -649,7 +649,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
|
||||||
|
|
||||||
if (scr_B) {
|
if (scr_B) {
|
||||||
//if B is a script, the only valid condition is that A has an instance which inherits from the script
|
//if B is a script, the only valid condition is that A has an instance which inherits from the script
|
||||||
//in other situation, this shoul return false.
|
//in other situation, this should return false.
|
||||||
|
|
||||||
if (obj_A->get_script_instance() && obj_A->get_script_instance()->get_language() == GDScriptLanguage::get_singleton()) {
|
if (obj_A->get_script_instance() && obj_A->get_script_instance()->get_language() == GDScriptLanguage::get_singleton()) {
|
||||||
GDScript *cmp = static_cast<GDScript *>(obj_A->get_script_instance()->get_script().ptr());
|
GDScript *cmp = static_cast<GDScript *>(obj_A->get_script_instance()->get_script().ptr());
|
||||||
|
|
|
@ -85,7 +85,7 @@ public:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Readd compiled GDScript on export.
|
// TODO: Re-add compiled GDScript on export.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -242,7 +242,7 @@ void StreamPeerMbedTLS::poll() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We could pass NULL as second parameter, but some behaviour sanitizers doesn't seem to like that.
|
// We could pass NULL as second parameter, but some behaviour sanitizers don't seem to like that.
|
||||||
// Passing a 1 byte buffer to workaround it.
|
// Passing a 1 byte buffer to workaround it.
|
||||||
uint8_t byte;
|
uint8_t byte;
|
||||||
int ret = mbedtls_ssl_read(ssl_ctx->get_context(), &byte, 0);
|
int ret = mbedtls_ssl_read(ssl_ctx->get_context(), &byte, 0);
|
||||||
|
|
|
@ -153,8 +153,8 @@ void MobileVRInterface::set_position_from_sensors() {
|
||||||
last_magnetometer_data = magneto;
|
last_magnetometer_data = magneto;
|
||||||
|
|
||||||
if (grav.length() < 0.1) {
|
if (grav.length() < 0.1) {
|
||||||
// not ideal but use our accelerometer, this will contain shakey shakey user behaviour
|
// not ideal but use our accelerometer, this will contain shaky user behaviour
|
||||||
// maybe look into some math but I'm guessing that if this isn't available, its because we lack the gyro sensor to actually work out
|
// maybe look into some math but I'm guessing that if this isn't available, it's because we lack the gyro sensor to actually work out
|
||||||
// what a stable gravity vector is
|
// what a stable gravity vector is
|
||||||
grav = acc;
|
grav = acc;
|
||||||
if (grav.length() > 0.1) {
|
if (grav.length() > 0.1) {
|
||||||
|
@ -181,8 +181,8 @@ void MobileVRInterface::set_position_from_sensors() {
|
||||||
tracking_state = XRInterface::XR_NORMAL_TRACKING;
|
tracking_state = XRInterface::XR_NORMAL_TRACKING;
|
||||||
};
|
};
|
||||||
|
|
||||||
///@TODO improve this, the magnetometer is very fidgity sometimes flipping the axis for no apparent reason (probably a bug on my part)
|
///@TODO improve this, the magnetometer is very fidgety sometimes flipping the axis for no apparent reason (probably a bug on my part)
|
||||||
// if you have a gyro + accelerometer that combo tends to be better then combining all three but without a gyro you need the magnetometer..
|
// if you have a gyro + accelerometer that combo tends to be better than combining all three but without a gyro you need the magnetometer..
|
||||||
if (has_magneto && has_grav && !has_gyro) {
|
if (has_magneto && has_grav && !has_gyro) {
|
||||||
// convert to quaternions, easier to smooth those out
|
// convert to quaternions, easier to smooth those out
|
||||||
Quat transform_quat(orientation);
|
Quat transform_quat(orientation);
|
||||||
|
@ -372,7 +372,7 @@ Transform MobileVRInterface::get_transform_for_eye(XRInterface::Eyes p_eye, cons
|
||||||
if (initialized) {
|
if (initialized) {
|
||||||
float world_scale = xr_server->get_world_scale();
|
float world_scale = xr_server->get_world_scale();
|
||||||
|
|
||||||
// we don't need to check for the existence of our HMD, doesn't effect our values...
|
// we don't need to check for the existence of our HMD, doesn't affect our values...
|
||||||
// note * 0.01 to convert cm to m and * 0.5 as we're moving half in each direction...
|
// note * 0.01 to convert cm to m and * 0.5 as we're moving half in each direction...
|
||||||
if (p_eye == XRInterface::EYE_LEFT) {
|
if (p_eye == XRInterface::EYE_LEFT) {
|
||||||
transform_for_eye.origin.x = -(intraocular_dist * 0.01 * 0.5 * world_scale);
|
transform_for_eye.origin.x = -(intraocular_dist * 0.01 * 0.5 * world_scale);
|
||||||
|
@ -402,7 +402,7 @@ CameraMatrix MobileVRInterface::get_projection_for_eye(XRInterface::Eyes p_eye,
|
||||||
CameraMatrix eye;
|
CameraMatrix eye;
|
||||||
|
|
||||||
if (p_eye == XRInterface::EYE_MONO) {
|
if (p_eye == XRInterface::EYE_MONO) {
|
||||||
///@TODO for now hardcode some of this, what is really needed here is that this needs to be in sync with the real cameras properties
|
///@TODO for now hardcode some of this, what is really needed here is that this needs to be in sync with the real camera's properties
|
||||||
// which probably means implementing a specific class for iOS and Android. For now this is purely here as an example.
|
// which probably means implementing a specific class for iOS and Android. For now this is purely here as an example.
|
||||||
// Note also that if you use a normal viewport with AR/VR turned off you can still use the tracker output of this interface
|
// Note also that if you use a normal viewport with AR/VR turned off you can still use the tracker output of this interface
|
||||||
// to position a stock standard Godot camera and have control over this.
|
// to position a stock standard Godot camera and have control over this.
|
||||||
|
|
|
@ -129,7 +129,7 @@ DynamicFontDataAdvanced::DataAtSize *DynamicFontDataAdvanced::get_data_for_size(
|
||||||
fds->underline_position = (-FT_MulFix(fds->face->underline_position, fds->face->size->metrics.y_scale) / 64.0) / oversampling * fds->scale_color_font;
|
fds->underline_position = (-FT_MulFix(fds->face->underline_position, fds->face->size->metrics.y_scale) / 64.0) / oversampling * fds->scale_color_font;
|
||||||
fds->underline_thickness = (FT_MulFix(fds->face->underline_thickness, fds->face->size->metrics.y_scale) / 64.0) / oversampling * fds->scale_color_font;
|
fds->underline_thickness = (FT_MulFix(fds->face->underline_thickness, fds->face->size->metrics.y_scale) / 64.0) / oversampling * fds->scale_color_font;
|
||||||
|
|
||||||
//Load os2 TTF pable
|
//Load os2 TTF table
|
||||||
fds->os2 = (TT_OS2 *)FT_Get_Sfnt_Table(fds->face, FT_SFNT_OS2);
|
fds->os2 = (TT_OS2 *)FT_Get_Sfnt_Table(fds->face, FT_SFNT_OS2);
|
||||||
|
|
||||||
fds->hb_handle = hb_ft_font_create(fds->face, nullptr);
|
fds->hb_handle = hb_ft_font_create(fds->face, nullptr);
|
||||||
|
|
|
@ -166,7 +166,7 @@ bool TextServerAdvanced::load_support_data(const String &p_filename) {
|
||||||
#ifdef ICU_STATIC_DATA
|
#ifdef ICU_STATIC_DATA
|
||||||
if (icu_data == nullptr) {
|
if (icu_data == nullptr) {
|
||||||
UErrorCode err = U_ZERO_ERROR;
|
UErrorCode err = U_ZERO_ERROR;
|
||||||
u_init(&err); // Do not check for errors, since we only load part the of data.
|
u_init(&err); // Do not check for errors, since we only load part of the data.
|
||||||
icu_data = (uint8_t *)&U_ICUDATA_ENTRY_POINT;
|
icu_data = (uint8_t *)&U_ICUDATA_ENTRY_POINT;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -244,7 +244,7 @@ struct FeatureInfo {
|
||||||
};
|
};
|
||||||
|
|
||||||
static FeatureInfo feature_set[] = {
|
static FeatureInfo feature_set[] = {
|
||||||
// Registred OpenType feature tags.
|
// Registered OpenType feature tags.
|
||||||
{ HB_TAG('a', 'a', 'l', 't'), "access_all_alternates" },
|
{ HB_TAG('a', 'a', 'l', 't'), "access_all_alternates" },
|
||||||
{ HB_TAG('a', 'b', 'v', 'f'), "above_base_forms" },
|
{ HB_TAG('a', 'b', 'v', 'f'), "above_base_forms" },
|
||||||
{ HB_TAG('a', 'b', 'v', 'm'), "above_base_mark_positioning" },
|
{ HB_TAG('a', 'b', 'v', 'm'), "above_base_mark_positioning" },
|
||||||
|
@ -484,7 +484,7 @@ static FeatureInfo feature_set[] = {
|
||||||
{ HB_TAG('v', 'r', 't', '2'), "vertical_alternates_and_rotation" },
|
{ HB_TAG('v', 'r', 't', '2'), "vertical_alternates_and_rotation" },
|
||||||
{ HB_TAG('v', 'r', 't', 'r'), "vertical_alternates_for_rotation" },
|
{ HB_TAG('v', 'r', 't', 'r'), "vertical_alternates_for_rotation" },
|
||||||
{ HB_TAG('z', 'e', 'r', 'o'), "slashed_zero" },
|
{ HB_TAG('z', 'e', 'r', 'o'), "slashed_zero" },
|
||||||
// Registred OpenType variation tags.
|
// Registered OpenType variation tags.
|
||||||
{ HB_TAG('i', 't', 'a', 'l'), "italic" },
|
{ HB_TAG('i', 't', 'a', 'l'), "italic" },
|
||||||
{ HB_TAG('o', 'p', 's', 'z'), "optical_size" },
|
{ HB_TAG('o', 'p', 's', 'z'), "optical_size" },
|
||||||
{ HB_TAG('s', 'l', 'n', 't'), "slant" },
|
{ HB_TAG('s', 'l', 'n', 't'), "slant" },
|
||||||
|
@ -1660,7 +1660,7 @@ bool TextServerAdvanced::shaped_text_update_breaks(RID p_shaped) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sd->line_breaks_valid) {
|
if (sd->line_breaks_valid) {
|
||||||
return true; // Noting to do.
|
return true; // Nothing to do.
|
||||||
}
|
}
|
||||||
|
|
||||||
const UChar *data = sd->utf16.ptr();
|
const UChar *data = sd->utf16.ptr();
|
||||||
|
@ -1845,7 +1845,7 @@ bool TextServerAdvanced::shaped_text_update_justification_ops(RID p_shaped) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sd->justification_ops_valid) {
|
if (sd->justification_ops_valid) {
|
||||||
return true; // Noting to do.
|
return true; // Nothing to do.
|
||||||
}
|
}
|
||||||
|
|
||||||
const UChar *data = sd->utf16.ptr();
|
const UChar *data = sd->utf16.ptr();
|
||||||
|
|
|
@ -1091,7 +1091,7 @@ bool TextServerFallback::shaped_text_update_breaks(RID p_shaped) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sd->line_breaks_valid) {
|
if (sd->line_breaks_valid) {
|
||||||
return true; // Noting to do.
|
return true; // Nothing to do.
|
||||||
}
|
}
|
||||||
|
|
||||||
int sd_size = sd->glyphs.size();
|
int sd_size = sd->glyphs.size();
|
||||||
|
|
|
@ -1369,7 +1369,7 @@ void VisualScriptInstance::_dependency_step(VisualScriptNodeInstance *node, int
|
||||||
// Is a default value (unassigned input port).
|
// Is a default value (unassigned input port).
|
||||||
input_args[i] = &default_values[index];
|
input_args[i] = &default_values[index];
|
||||||
} else {
|
} else {
|
||||||
// Rregular temporary in stack.
|
// Regular temporary in stack.
|
||||||
input_args[i] = &variant_stack[index];
|
input_args[i] = &variant_stack[index];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1391,7 +1391,7 @@ Variant VisualScriptInstance::_call_internal(const StringName &p_method, void *p
|
||||||
ERR_FAIL_COND_V(!F, Variant());
|
ERR_FAIL_COND_V(!F, Variant());
|
||||||
Function *f = &F->get();
|
Function *f = &F->get();
|
||||||
|
|
||||||
// This call goes separate, so it can e yielded and suspended.
|
// This call goes separate, so it can be yielded and suspended.
|
||||||
Variant *variant_stack = (Variant *)p_stack;
|
Variant *variant_stack = (Variant *)p_stack;
|
||||||
bool *sequence_bits = (bool *)(variant_stack + f->max_stack);
|
bool *sequence_bits = (bool *)(variant_stack + f->max_stack);
|
||||||
const Variant **input_args = (const Variant **)(sequence_bits + f->node_count);
|
const Variant **input_args = (const Variant **)(sequence_bits + f->node_count);
|
||||||
|
|
|
@ -3958,7 +3958,7 @@ void VisualScriptEditor::_menu_option(int p_what) {
|
||||||
if (start_node == -1) {
|
if (start_node == -1) {
|
||||||
// If we still don't have a start node then,
|
// If we still don't have a start node then,
|
||||||
// run through the nodes and select the first tree node,
|
// run through the nodes and select the first tree node,
|
||||||
// ie node without any input sequence but output sequence.
|
// i.e. node without any input sequence but output sequence.
|
||||||
for (Set<int>::Element *E = nodes_from.front(); E; E = E->next()) {
|
for (Set<int>::Element *E = nodes_from.front(); E; E = E->next()) {
|
||||||
if (!nodes_to.has(E->get())) {
|
if (!nodes_to.has(E->get())) {
|
||||||
start_node = E->get();
|
start_node = E->get();
|
||||||
|
|
|
@ -1054,7 +1054,7 @@ VisualScriptExpression::ENode *VisualScriptExpression::_parse_expression() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reduce the set set of expressions and place them in an operator tree, respecting precedence */
|
/* Reduce the set of expressions and place them in an operator tree, respecting precedence */
|
||||||
|
|
||||||
while (expression.size() > 1) {
|
while (expression.size() > 1) {
|
||||||
int next_op = -1;
|
int next_op = -1;
|
||||||
|
|
|
@ -800,7 +800,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ResourceCache::has(script)) {
|
if (!ResourceCache::has(script)) {
|
||||||
//if the script is not in use by anyone, we can safely assume whathever we got is not casting to it.
|
//if the script is not in use by anyone, we can safely assume whatever we got is not casting to it.
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
Ref<Script> cast_script = Ref<Resource>(ResourceCache::get(script));
|
Ref<Script> cast_script = Ref<Resource>(ResourceCache::get(script));
|
||||||
|
|
|
@ -547,7 +547,7 @@ void VisualScriptFunctionCall::_validate_property(PropertyInfo &property) const
|
||||||
} else {
|
} else {
|
||||||
Node *bnode = _get_base_node();
|
Node *bnode = _get_base_node();
|
||||||
if (bnode) {
|
if (bnode) {
|
||||||
property.hint_string = bnode->get_path(); //convert to loong string
|
property.hint_string = bnode->get_path(); //convert to long string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1292,7 +1292,7 @@ void VisualScriptPropertySet::_validate_property(PropertyInfo &property) const {
|
||||||
} else {
|
} else {
|
||||||
Node *bnode = _get_base_node();
|
Node *bnode = _get_base_node();
|
||||||
if (bnode) {
|
if (bnode) {
|
||||||
property.hint_string = bnode->get_path(); //convert to loong string
|
property.hint_string = bnode->get_path(); //convert to long string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1970,7 +1970,7 @@ void VisualScriptPropertyGet::_validate_property(PropertyInfo &property) const {
|
||||||
} else {
|
} else {
|
||||||
Node *bnode = _get_base_node();
|
Node *bnode = _get_base_node();
|
||||||
if (bnode) {
|
if (bnode) {
|
||||||
property.hint_string = bnode->get_path(); //convert to loong string
|
property.hint_string = bnode->get_path(); //convert to long string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -425,7 +425,7 @@ void VisualScriptYieldSignal::_validate_property(PropertyInfo &property) const {
|
||||||
} else {
|
} else {
|
||||||
Node *bnode = _get_base_node();
|
Node *bnode = _get_base_node();
|
||||||
if (bnode) {
|
if (bnode) {
|
||||||
property.hint_string = bnode->get_path(); //convert to loong string
|
property.hint_string = bnode->get_path(); //convert to long string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@ int WebSocketMultiplayerPeer::_gen_unique_id() const {
|
||||||
(uint32_t)((uint64_t)this), hash); //rely on aslr heap
|
(uint32_t)((uint64_t)this), hash); //rely on aslr heap
|
||||||
hash = hash_djb2_one_32(
|
hash = hash_djb2_one_32(
|
||||||
(uint32_t)((uint64_t)&hash), hash); //rely on aslr stack
|
(uint32_t)((uint64_t)&hash), hash); //rely on aslr stack
|
||||||
hash = hash & 0x7FFFFFFF; // make it compatible with unsigned, since negatie id is used for exclusion
|
hash = hash & 0x7FFFFFFF; // make it compatible with unsigned, since negative id is used for exclusion
|
||||||
}
|
}
|
||||||
|
|
||||||
return hash;
|
return hash;
|
||||||
|
@ -186,7 +186,7 @@ void WebSocketMultiplayerPeer::_send_add(int32_t p_peer_id) {
|
||||||
for (Map<int, Ref<WebSocketPeer>>::Element *E = _peer_map.front(); E; E = E->next()) {
|
for (Map<int, Ref<WebSocketPeer>>::Element *E = _peer_map.front(); E; E = E->next()) {
|
||||||
int32_t id = E->key();
|
int32_t id = E->key();
|
||||||
if (p_peer_id == id) {
|
if (p_peer_id == id) {
|
||||||
continue; // Skip the newwly added peer (already confirmed)
|
continue; // Skip the newly added peer (already confirmed)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send new peer to others
|
// Send new peer to others
|
||||||
|
@ -314,7 +314,7 @@ void WebSocketMultiplayerPeer::_process_multiplayer(Ref<WebSocketPeer> p_peer, u
|
||||||
_peer_map.erase(id);
|
_peer_map.erase(id);
|
||||||
emit_signal("peer_disconnected", id);
|
emit_signal("peer_disconnected", id);
|
||||||
break;
|
break;
|
||||||
case SYS_ID: // Helo, server assigned ID
|
case SYS_ID: // Hello, server assigned ID
|
||||||
_peer_id = id;
|
_peer_id = id;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
#ifdef CRASH_HANDLER_EXCEPTION
|
#ifdef CRASH_HANDLER_EXCEPTION
|
||||||
|
|
||||||
// Backtrace code code based on: https://stackoverflow.com/questions/6205981/windows-c-stack-trace-from-a-running-app
|
// Backtrace code based on: https://stackoverflow.com/questions/6205981/windows-c-stack-trace-from-a-running-app
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
|
|
@ -1253,12 +1253,12 @@ void DisplayServerWindows::GetMaskBitmaps(HBITMAP hSourceBitmap, COLORREF clrTra
|
||||||
HBITMAP hOldAndMaskBitmap = (HBITMAP)SelectObject(hAndMaskDC, hAndMaskBitmap);
|
HBITMAP hOldAndMaskBitmap = (HBITMAP)SelectObject(hAndMaskDC, hAndMaskBitmap);
|
||||||
HBITMAP hOldXorMaskBitmap = (HBITMAP)SelectObject(hXorMaskDC, hXorMaskBitmap);
|
HBITMAP hOldXorMaskBitmap = (HBITMAP)SelectObject(hXorMaskDC, hXorMaskBitmap);
|
||||||
|
|
||||||
// Assign the monochrome AND mask bitmap pixels so that a pixels of the source bitmap
|
// Assign the monochrome AND mask bitmap pixels so that the pixels of the source bitmap
|
||||||
// with 'clrTransparent' will be white pixels of the monochrome bitmap
|
// with 'clrTransparent' will be white pixels of the monochrome bitmap
|
||||||
SetBkColor(hMainDC, clrTransparent);
|
SetBkColor(hMainDC, clrTransparent);
|
||||||
BitBlt(hAndMaskDC, 0, 0, bm.bmWidth, bm.bmHeight, hMainDC, 0, 0, SRCCOPY);
|
BitBlt(hAndMaskDC, 0, 0, bm.bmWidth, bm.bmHeight, hMainDC, 0, 0, SRCCOPY);
|
||||||
|
|
||||||
// Assign the color XOR mask bitmap pixels so that a pixels of the source bitmap
|
// Assign the color XOR mask bitmap pixels so that the pixels of the source bitmap
|
||||||
// with 'clrTransparent' will be black and rest the pixels same as corresponding
|
// with 'clrTransparent' will be black and rest the pixels same as corresponding
|
||||||
// pixels of the source bitmap
|
// pixels of the source bitmap
|
||||||
SetBkColor(hXorMaskDC, RGB(0, 0, 0));
|
SetBkColor(hXorMaskDC, RGB(0, 0, 0));
|
||||||
|
@ -2305,7 +2305,7 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
|
||||||
mm->set_alt(alt_mem);
|
mm->set_alt(alt_mem);
|
||||||
|
|
||||||
if ((tablet_get_current_driver() == "wintab") && wintab_available && windows[window_id].wtctx) {
|
if ((tablet_get_current_driver() == "wintab") && wintab_available && windows[window_id].wtctx) {
|
||||||
// Note: WinTab sends both WT_PACKET and WM_xBUTTONDOWN/UP/MOUSEMOVE events, use mouse 1/0 pressure only when last_pressure was not update recently.
|
// Note: WinTab sends both WT_PACKET and WM_xBUTTONDOWN/UP/MOUSEMOVE events, use mouse 1/0 pressure only when last_pressure was not updated recently.
|
||||||
if (windows[window_id].last_pressure_update < 10) {
|
if (windows[window_id].last_pressure_update < 10) {
|
||||||
windows[window_id].last_pressure_update++;
|
windows[window_id].last_pressure_update++;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -334,7 +334,7 @@ OS::TimeZoneInfo OS_Windows::get_time_zone_info() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bias value returned by GetTimeZoneInformation is inverted of what we expect
|
// Bias value returned by GetTimeZoneInformation is inverted of what we expect
|
||||||
// For example on GMT-3 GetTimeZoneInformation return a Bias of 180, so invert the value to get -180
|
// For example, on GMT-3 GetTimeZoneInformation return a Bias of 180, so invert the value to get -180
|
||||||
ret.bias = -info.Bias;
|
ret.bias = -info.Bias;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -375,7 +375,7 @@ void LineBuilder::build() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (intersection_result != SEGMENT_INTERSECT) {
|
if (intersection_result != SEGMENT_INTERSECT) {
|
||||||
// In this case the joint is too corrputed to be re-used,
|
// In this case the joint is too corrupted to be re-used,
|
||||||
// start again the strip with fallback points
|
// start again the strip with fallback points
|
||||||
strip_begin(pos_up0, pos_down0, color1, uvx1);
|
strip_begin(pos_up0, pos_down0, color1, uvx1);
|
||||||
}
|
}
|
||||||
|
@ -485,7 +485,7 @@ void LineBuilder::strip_add_tri(Vector2 up, Orientation orientation) {
|
||||||
|
|
||||||
if (texture_mode != Line2D::LINE_TEXTURE_NONE) {
|
if (texture_mode != Line2D::LINE_TEXTURE_NONE) {
|
||||||
// UVs are just one slice of the texture all along
|
// UVs are just one slice of the texture all along
|
||||||
// (otherwise we can't share the bottom vertice)
|
// (otherwise we can't share the bottom vertex)
|
||||||
uvs.push_back(uvs[_last_index[opposite_orientation]]);
|
uvs.push_back(uvs[_last_index[opposite_orientation]]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -520,7 +520,7 @@ void LineBuilder::strip_add_arc(Vector2 center, float angle_delta, Orientation o
|
||||||
strip_add_tri(rpos, orientation);
|
strip_add_tri(rpos, orientation);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Last arc vertice
|
// Last arc vertex
|
||||||
rpos = center + Vector2(Math::cos(end_angle), Math::sin(end_angle)) * radius;
|
rpos = center + Vector2(Math::cos(end_angle), Math::sin(end_angle)) * radius;
|
||||||
strip_add_tri(rpos, orientation);
|
strip_add_tri(rpos, orientation);
|
||||||
}
|
}
|
||||||
|
@ -569,7 +569,7 @@ void LineBuilder::new_arc(Vector2 center, Vector2 vbegin, float angle_delta, Col
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Last arc vertice
|
// Last arc vertex
|
||||||
Vector2 sc = Vector2(Math::cos(end_angle), Math::sin(end_angle));
|
Vector2 sc = Vector2(Math::cos(end_angle), Math::sin(end_angle));
|
||||||
rpos = center + sc * radius;
|
rpos = center + sc * radius;
|
||||||
vertices.push_back(rpos);
|
vertices.push_back(rpos);
|
||||||
|
|
|
@ -411,13 +411,13 @@ void RigidBody2D::_direct_state_changed(Object *p_state) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//process remotions
|
//process removals
|
||||||
|
|
||||||
for (int i = 0; i < toremove_count; i++) {
|
for (int i = 0; i < toremove_count; i++) {
|
||||||
_body_inout(0, toremove[i].body_id, toremove[i].pair.body_shape, toremove[i].pair.local_shape);
|
_body_inout(0, toremove[i].body_id, toremove[i].pair.body_shape, toremove[i].pair.local_shape);
|
||||||
}
|
}
|
||||||
|
|
||||||
//process aditions
|
//process additions
|
||||||
|
|
||||||
for (int i = 0; i < toadd_count; i++) {
|
for (int i = 0; i < toadd_count; i++) {
|
||||||
_body_inout(1, toadd[i].id, toadd[i].shape, toadd[i].local_shape);
|
_body_inout(1, toadd[i].id, toadd[i].shape, toadd[i].local_shape);
|
||||||
|
|
|
@ -184,7 +184,7 @@ void Skeleton2D::_update_bone_setup() {
|
||||||
bone_setup_dirty = false;
|
bone_setup_dirty = false;
|
||||||
RS::get_singleton()->skeleton_allocate_data(skeleton, bones.size(), true);
|
RS::get_singleton()->skeleton_allocate_data(skeleton, bones.size(), true);
|
||||||
|
|
||||||
bones.sort(); //sorty so they are always in the same order/index
|
bones.sort(); //sorting so that they are always in the same order/index
|
||||||
|
|
||||||
for (int i = 0; i < bones.size(); i++) {
|
for (int i = 0; i < bones.size(); i++) {
|
||||||
bones.write[i].rest_inverse = bones[i].bone->get_skeleton_rest().affine_inverse(); //bind pose
|
bones.write[i].rest_inverse = bones[i].bone->get_skeleton_rest().affine_inverse(); //bind pose
|
||||||
|
|
|
@ -211,7 +211,7 @@ void Area3D::_clear_monitoring() {
|
||||||
Object *obj = ObjectDB::get_instance(E->key());
|
Object *obj = ObjectDB::get_instance(E->key());
|
||||||
Node *node = Object::cast_to<Node>(obj);
|
Node *node = Object::cast_to<Node>(obj);
|
||||||
|
|
||||||
if (!node) { //node may have been deleted in previous frame or at other legiminate point
|
if (!node) { //node may have been deleted in previous frame or at other legitimate point
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//ERR_CONTINUE(!node);
|
//ERR_CONTINUE(!node);
|
||||||
|
@ -240,7 +240,7 @@ void Area3D::_clear_monitoring() {
|
||||||
Object *obj = ObjectDB::get_instance(E->key());
|
Object *obj = ObjectDB::get_instance(E->key());
|
||||||
Node *node = Object::cast_to<Node>(obj);
|
Node *node = Object::cast_to<Node>(obj);
|
||||||
|
|
||||||
if (!node) { //node may have been deleted in previous frame or at other legiminate point
|
if (!node) { //node may have been deleted in previous frame or at other legitimate point
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//ERR_CONTINUE(!node);
|
//ERR_CONTINUE(!node);
|
||||||
|
|
|
@ -449,7 +449,7 @@ int32_t BakedLightmap::_compute_bsp_tree(const Vector<Vector3> &p_points, const
|
||||||
ERR_FAIL_COND_V(p_simplex_indices.size() <= 1, 0); //should not happen, this is a bug
|
ERR_FAIL_COND_V(p_simplex_indices.size() <= 1, 0); //should not happen, this is a bug
|
||||||
|
|
||||||
// Failed to separate the tetrahedrons using planes
|
// Failed to separate the tetrahedrons using planes
|
||||||
// this means Delaunay borked at some point.
|
// this means Delaunay broke at some point.
|
||||||
// Luckily, because we are using tetrahedrons, we can resort to
|
// Luckily, because we are using tetrahedrons, we can resort to
|
||||||
// less precise but still working ways to generate the separating plane
|
// less precise but still working ways to generate the separating plane
|
||||||
// this will most likely look bad when interpolating, but at least it will not crash.
|
// this will most likely look bad when interpolating, but at least it will not crash.
|
||||||
|
@ -511,7 +511,7 @@ int32_t BakedLightmap::_compute_bsp_tree(const Vector<Vector3> &p_points, const
|
||||||
node.plane = best_plane;
|
node.plane = best_plane;
|
||||||
|
|
||||||
if (indices_under.size() == 0) {
|
if (indices_under.size() == 0) {
|
||||||
//noting to do here
|
//nothing to do here
|
||||||
node.under = BSPNode::EMPTY_LEAF;
|
node.under = BSPNode::EMPTY_LEAF;
|
||||||
} else if (indices_under.size() == 1) {
|
} else if (indices_under.size() == 1) {
|
||||||
node.under = -(indices_under[0] + 1);
|
node.under = -(indices_under[0] + 1);
|
||||||
|
@ -520,7 +520,7 @@ int32_t BakedLightmap::_compute_bsp_tree(const Vector<Vector3> &p_points, const
|
||||||
}
|
}
|
||||||
|
|
||||||
if (indices_over.size() == 0) {
|
if (indices_over.size() == 0) {
|
||||||
//noting to do here
|
//nothing to do here
|
||||||
node.over = BSPNode::EMPTY_LEAF;
|
node.over = BSPNode::EMPTY_LEAF;
|
||||||
} else if (indices_over.size() == 1) {
|
} else if (indices_over.size() == 1) {
|
||||||
node.over = -(indices_over[0] + 1);
|
node.over = -(indices_over[0] + 1);
|
||||||
|
@ -660,7 +660,7 @@ BakedLightmap::BakeError BakedLightmap::bake(Node *p_from_node, String p_image_d
|
||||||
}
|
}
|
||||||
// create mesh data for insert
|
// create mesh data for insert
|
||||||
|
|
||||||
//get the base material textures, help compute altlas size and bounds
|
//get the base material textures, help compute atlas size and bounds
|
||||||
for (int m_i = 0; m_i < meshes_found.size(); m_i++) {
|
for (int m_i = 0; m_i < meshes_found.size(); m_i++) {
|
||||||
if (p_bake_step) {
|
if (p_bake_step) {
|
||||||
float p = (float)(m_i) / meshes_found.size();
|
float p = (float)(m_i) / meshes_found.size();
|
||||||
|
@ -974,7 +974,7 @@ BakedLightmap::BakeError BakedLightmap::bake(Node *p_from_node, String p_image_d
|
||||||
for (int i = 0; i < lightmapper->get_bake_texture_count(); i++) {
|
for (int i = 0; i < lightmapper->get_bake_texture_count(); i++) {
|
||||||
images.push_back(lightmapper->get_bake_texture(i));
|
images.push_back(lightmapper->get_bake_texture(i));
|
||||||
}
|
}
|
||||||
//we assume they are all the same, so lets create a large one for saving
|
//we assume they are all the same, so let's create a large one for saving
|
||||||
Ref<Image> large_image;
|
Ref<Image> large_image;
|
||||||
large_image.instance();
|
large_image.instance();
|
||||||
|
|
||||||
|
|
|
@ -102,7 +102,7 @@ void Camera3D::_update_camera() {
|
||||||
void Camera3D::_notification(int p_what) {
|
void Camera3D::_notification(int p_what) {
|
||||||
switch (p_what) {
|
switch (p_what) {
|
||||||
case NOTIFICATION_ENTER_WORLD: {
|
case NOTIFICATION_ENTER_WORLD: {
|
||||||
// Needs to track the Viewport because it's needed on NOTIFICATION_EXIT_WORLD
|
// Needs to track the Viewport because it's needed on NOTIFICATION_EXIT_WORLD
|
||||||
// and Spatial will handle it first, including clearing its reference to the Viewport,
|
// and Spatial will handle it first, including clearing its reference to the Viewport,
|
||||||
// therefore making it impossible to subclasses to access it
|
// therefore making it impossible to subclasses to access it
|
||||||
viewport = get_viewport();
|
viewport = get_viewport();
|
||||||
|
@ -715,7 +715,7 @@ void ClippedCamera3D::_notification(int p_what) {
|
||||||
|
|
||||||
Vector3 ray_from = parent_plane.project(cam_pos);
|
Vector3 ray_from = parent_plane.project(cam_pos);
|
||||||
|
|
||||||
clip_offset = 0; //reset by defau;t
|
clip_offset = 0; //reset by default
|
||||||
|
|
||||||
{ //check if points changed
|
{ //check if points changed
|
||||||
Vector<Vector3> local_points = get_near_plane_points();
|
Vector<Vector3> local_points = get_near_plane_points();
|
||||||
|
|
|
@ -348,7 +348,7 @@ void GPUParticles3D::_notification(int p_what) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use internal process when emitting and one_shot are on so that when
|
// Use internal process when emitting and one_shot is on so that when
|
||||||
// the shot ends the editor can properly update
|
// the shot ends the editor can properly update
|
||||||
if (p_what == NOTIFICATION_INTERNAL_PROCESS) {
|
if (p_what == NOTIFICATION_INTERNAL_PROCESS) {
|
||||||
if (one_shot && !is_emitting()) {
|
if (one_shot && !is_emitting()) {
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
a) If above is invalid, don't keep invalidating upwards
|
a) If above is invalid, don't keep invalidating upwards
|
||||||
2) If a node sets a GLOBAL, it is converted to LOCAL (and forces validation of everything pending below)
|
2) If a node sets a GLOBAL, it is converted to LOCAL (and forces validation of everything pending below)
|
||||||
|
|
||||||
drawback: setting/reading globals is useful and used very very often, and using affine inverses is slow
|
drawback: setting/reading globals is useful and used very often, and using affine inverses is slow
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -416,13 +416,13 @@ void RigidBody3D::_direct_state_changed(Object *p_state) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//process remotions
|
//process removals
|
||||||
|
|
||||||
for (int i = 0; i < toremove_count; i++) {
|
for (int i = 0; i < toremove_count; i++) {
|
||||||
_body_inout(0, toremove[i].body_id, toremove[i].pair.body_shape, toremove[i].pair.local_shape);
|
_body_inout(0, toremove[i].body_id, toremove[i].pair.body_shape, toremove[i].pair.local_shape);
|
||||||
}
|
}
|
||||||
|
|
||||||
//process aditions
|
//process additions
|
||||||
|
|
||||||
for (int i = 0; i < toadd_count; i++) {
|
for (int i = 0; i < toadd_count; i++) {
|
||||||
_body_inout(1, toadd[i].id, toadd[i].shape, toadd[i].local_shape);
|
_body_inout(1, toadd[i].id, toadd[i].shape, toadd[i].local_shape);
|
||||||
|
|
|
@ -428,10 +428,10 @@ void RayCast3D::_update_debug_shape_material(bool p_check_collision) {
|
||||||
|
|
||||||
if (p_check_collision) {
|
if (p_check_collision) {
|
||||||
if ((color.get_h() < 0.055 || color.get_h() > 0.945) && color.get_s() > 0.5 && color.get_v() > 0.5) {
|
if ((color.get_h() < 0.055 || color.get_h() > 0.945) && color.get_s() > 0.5 && color.get_v() > 0.5) {
|
||||||
// If base color is already quite reddish, hightlight collision with green color
|
// If base color is already quite reddish, highlight collision with green color
|
||||||
color = Color(0.0, 1.0, 0.0, color.a);
|
color = Color(0.0, 1.0, 0.0, color.a);
|
||||||
} else {
|
} else {
|
||||||
// Else, hightlight collision with red color
|
// Else, highlight collision with red color
|
||||||
color = Color(1.0, 0, 0, color.a);
|
color = Color(1.0, 0, 0, color.a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,7 +120,7 @@ bool FabrikInverseKinematic::build_chain(Task *p_task, bool p_force_simple_chain
|
||||||
|
|
||||||
if (p_force_simple_chain) {
|
if (p_force_simple_chain) {
|
||||||
// NOTE:
|
// NOTE:
|
||||||
// This is an "hack" that force to create only one tip per chain since the solver of multi tip (end effector)
|
// This is a "hack" that force to create only one tip per chain since the solver of multi tip (end effector)
|
||||||
// is not yet created.
|
// is not yet created.
|
||||||
// Remove this code when this is done
|
// Remove this code when this is done
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -692,7 +692,7 @@ void AnimatedSprite3D::_draw() {
|
||||||
|
|
||||||
Ref<Texture2D> texture = frames->get_frame(animation, frame);
|
Ref<Texture2D> texture = frames->get_frame(animation, frame);
|
||||||
if (!texture.is_valid()) {
|
if (!texture.is_valid()) {
|
||||||
return; //no texuture no life
|
return; //no texture no life
|
||||||
}
|
}
|
||||||
Vector2 tsize = texture->get_size();
|
Vector2 tsize = texture->get_size();
|
||||||
if (tsize.x == 0 || tsize.y == 0) {
|
if (tsize.x == 0 || tsize.y == 0) {
|
||||||
|
|
|
@ -563,7 +563,7 @@ void VehicleBody3D::_resolve_single_bilateral(PhysicsDirectBodyState3D *s, const
|
||||||
b2invmass);
|
b2invmass);
|
||||||
|
|
||||||
// FIXME: rel_vel assignment here is overwritten by the following assignment.
|
// FIXME: rel_vel assignment here is overwritten by the following assignment.
|
||||||
// What seems to be intended in the next next assignment is: rel_vel = normal.dot(rel_vel);
|
// What seems to be intended in the next assignment is: rel_vel = normal.dot(rel_vel);
|
||||||
// Investigate why.
|
// Investigate why.
|
||||||
real_t rel_vel = jac.getRelativeVelocity(
|
real_t rel_vel = jac.getRelativeVelocity(
|
||||||
s->get_linear_velocity(),
|
s->get_linear_velocity(),
|
||||||
|
|
|
@ -151,7 +151,7 @@ void Voxelizer::_plot_face(int p_idx, int p_level, int p_x, int p_y, int p_z, co
|
||||||
Vector2 uv;
|
Vector2 uv;
|
||||||
Vector3 lnormal;
|
Vector3 lnormal;
|
||||||
get_uv_and_normal(intersection, p_vtx, p_uv, p_normal, uv, lnormal);
|
get_uv_and_normal(intersection, p_vtx, p_uv, p_normal, uv, lnormal);
|
||||||
if (lnormal == Vector3()) { //just in case normal as nor provided
|
if (lnormal == Vector3()) { //just in case normal is not provided
|
||||||
lnormal = normal;
|
lnormal = normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,7 +183,7 @@ void Voxelizer::_plot_face(int p_idx, int p_level, int p_x, int p_y, int p_z, co
|
||||||
Vector3 lnormal;
|
Vector3 lnormal;
|
||||||
Vector2 uv;
|
Vector2 uv;
|
||||||
get_uv_and_normal(inters, p_vtx, p_uv, p_normal, uv, normal);
|
get_uv_and_normal(inters, p_vtx, p_uv, p_normal, uv, normal);
|
||||||
if (lnormal == Vector3()) { //just in case normal as nor provided
|
if (lnormal == Vector3()) { //just in case normal is not provided
|
||||||
lnormal = normal;
|
lnormal = normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -605,7 +605,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, float
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_seeked) {
|
if (p_seeked) {
|
||||||
//find whathever should be playing
|
//find whatever should be playing
|
||||||
int idx = a->track_find_key(i, p_time);
|
int idx = a->track_find_key(i, p_time);
|
||||||
if (idx < 0) {
|
if (idx < 0) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -634,7 +634,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, float
|
||||||
|
|
||||||
nc->audio_playing = true;
|
nc->audio_playing = true;
|
||||||
playing_caches.insert(nc);
|
playing_caches.insert(nc);
|
||||||
if (len && end_ofs > 0) { //force a end at a time
|
if (len && end_ofs > 0) { //force an end at a time
|
||||||
nc->audio_len = len - start_ofs - end_ofs;
|
nc->audio_len = len - start_ofs - end_ofs;
|
||||||
} else {
|
} else {
|
||||||
nc->audio_len = 0;
|
nc->audio_len = 0;
|
||||||
|
@ -665,7 +665,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, float
|
||||||
|
|
||||||
nc->audio_playing = true;
|
nc->audio_playing = true;
|
||||||
playing_caches.insert(nc);
|
playing_caches.insert(nc);
|
||||||
if (len && end_ofs > 0) { //force a end at a time
|
if (len && end_ofs > 0) { //force an end at a time
|
||||||
nc->audio_len = len - start_ofs - end_ofs;
|
nc->audio_len = len - start_ofs - end_ofs;
|
||||||
} else {
|
} else {
|
||||||
nc->audio_len = 0;
|
nc->audio_len = 0;
|
||||||
|
@ -1343,7 +1343,7 @@ void AnimationPlayer::_stop_playing_caches() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnimationPlayer::_node_removed(Node *p_node) {
|
void AnimationPlayer::_node_removed(Node *p_node) {
|
||||||
clear_caches(); // nodes contained here ar being removed, clear the caches
|
clear_caches(); // nodes contained here are being removed, clear the caches
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnimationPlayer::clear_caches() {
|
void AnimationPlayer::clear_caches() {
|
||||||
|
|
|
@ -1009,7 +1009,7 @@ void AnimationTree::_process_graph(float p_delta) {
|
||||||
TrackCacheAudio *t = static_cast<TrackCacheAudio *>(track);
|
TrackCacheAudio *t = static_cast<TrackCacheAudio *>(track);
|
||||||
|
|
||||||
if (seeked) {
|
if (seeked) {
|
||||||
//find whathever should be playing
|
//find whatever should be playing
|
||||||
int idx = a->track_find_key(i, time);
|
int idx = a->track_find_key(i, time);
|
||||||
if (idx < 0) {
|
if (idx < 0) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -1038,7 +1038,7 @@ void AnimationTree::_process_graph(float p_delta) {
|
||||||
|
|
||||||
t->playing = true;
|
t->playing = true;
|
||||||
playing_caches.insert(t);
|
playing_caches.insert(t);
|
||||||
if (len && end_ofs > 0) { //force a end at a time
|
if (len && end_ofs > 0) { //force an end at a time
|
||||||
t->len = len - start_ofs - end_ofs;
|
t->len = len - start_ofs - end_ofs;
|
||||||
} else {
|
} else {
|
||||||
t->len = 0;
|
t->len = 0;
|
||||||
|
@ -1069,7 +1069,7 @@ void AnimationTree::_process_graph(float p_delta) {
|
||||||
|
|
||||||
t->playing = true;
|
t->playing = true;
|
||||||
playing_caches.insert(t);
|
playing_caches.insert(t);
|
||||||
if (len && end_ofs > 0) { //force a end at a time
|
if (len && end_ofs > 0) { //force an end at a time
|
||||||
t->len = len - start_ofs - end_ofs;
|
t->len = len - start_ofs - end_ofs;
|
||||||
} else {
|
} else {
|
||||||
t->len = 0;
|
t->len = 0;
|
||||||
|
|
|
@ -1115,7 +1115,7 @@ real_t Tween::tell() const {
|
||||||
|
|
||||||
// For each interpolation...
|
// For each interpolation...
|
||||||
for (const List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) {
|
for (const List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) {
|
||||||
// Get the data and figure out if it's position is further along than the previous ones
|
// Get the data and figure out if its position is further along than the previous ones
|
||||||
const InterpolateData &data = E->get();
|
const InterpolateData &data = E->get();
|
||||||
if (data.elapsed > pos) {
|
if (data.elapsed > pos) {
|
||||||
// Save it if so
|
// Save it if so
|
||||||
|
|
|
@ -171,7 +171,7 @@ void AudioStreamPlayer::set_stream(Ref<AudioStream> p_stream) {
|
||||||
|
|
||||||
if (active.is_set() && stream_playback.is_valid() && !stream_paused) {
|
if (active.is_set() && stream_playback.is_valid() && !stream_paused) {
|
||||||
//changing streams out of the blue is not a great idea, but at least
|
//changing streams out of the blue is not a great idea, but at least
|
||||||
//lets try to somehow avoid a click
|
//let's try to somehow avoid a click
|
||||||
|
|
||||||
AudioFrame *buffer = fadeout_buffer.ptrw();
|
AudioFrame *buffer = fadeout_buffer.ptrw();
|
||||||
int buffer_size = fadeout_buffer.size();
|
int buffer_size = fadeout_buffer.size();
|
||||||
|
|
|
@ -487,7 +487,7 @@ void LiveEditor::_send_tree() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Array arr;
|
Array arr;
|
||||||
// Encoded as a flat list depth fist.
|
// Encoded as a flat list depth first.
|
||||||
SceneDebuggerTree tree(scene_tree->root);
|
SceneDebuggerTree tree(scene_tree->root);
|
||||||
tree.serialize(arr);
|
tree.serialize(arr);
|
||||||
EngineDebugger::get_singleton()->send_message("scene:scene_tree", arr);
|
EngineDebugger::get_singleton()->send_message("scene:scene_tree", arr);
|
||||||
|
|
|
@ -584,7 +584,7 @@ void Control::_notification(int p_notification) {
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case NOTIFICATION_MOVED_IN_PARENT: {
|
case NOTIFICATION_MOVED_IN_PARENT: {
|
||||||
// some parents need to know the order of the childrens to draw (like TabContainer)
|
// some parents need to know the order of the children to draw (like TabContainer)
|
||||||
// update if necessary
|
// update if necessary
|
||||||
if (data.parent) {
|
if (data.parent) {
|
||||||
data.parent->update();
|
data.parent->update();
|
||||||
|
@ -1782,7 +1782,7 @@ void Control::add_theme_icon_override(const StringName &p_name, const Ref<Textur
|
||||||
data.icon_override[p_name]->disconnect("changed", callable_mp(this, &Control::_override_changed));
|
data.icon_override[p_name]->disconnect("changed", callable_mp(this, &Control::_override_changed));
|
||||||
}
|
}
|
||||||
|
|
||||||
// clear if "null" is passed instead of a icon
|
// clear if "null" is passed instead of an icon
|
||||||
if (p_icon.is_null()) {
|
if (p_icon.is_null()) {
|
||||||
data.icon_override.erase(p_name);
|
data.icon_override.erase(p_name);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -768,7 +768,7 @@ void ItemList::_gui_input(const Ref<InputEvent> &p_event) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (p_event->is_action("ui_accept")) {
|
} else if (p_event->is_action("ui_accept")) {
|
||||||
search_string = ""; //any mousepress cance
|
search_string = ""; //any mousepress cancels
|
||||||
|
|
||||||
if (current >= 0 && current < items.size()) {
|
if (current >= 0 && current < items.size()) {
|
||||||
emit_signal("item_activated", current);
|
emit_signal("item_activated", current);
|
||||||
|
|
|
@ -809,7 +809,7 @@ void LineEdit::_notification(int p_what) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
{
|
{
|
||||||
// IME intermidiet text range.
|
// IME intermediate text range.
|
||||||
Vector<Vector2> sel = TS->shaped_text_get_selection(text_rid, cursor_pos, cursor_pos + ime_text.length());
|
Vector<Vector2> sel = TS->shaped_text_get_selection(text_rid, cursor_pos, cursor_pos + ime_text.length());
|
||||||
for (int i = 0; i < sel.size(); i++) {
|
for (int i = 0; i < sel.size(); i++) {
|
||||||
Rect2 rect = Rect2(sel[i].x + ofs.x, ofs.y, sel[i].y - sel[i].x, text_height);
|
Rect2 rect = Rect2(sel[i].x + ofs.x, ofs.y, sel[i].y - sel[i].x, text_height);
|
||||||
|
@ -1436,7 +1436,7 @@ void LineEdit::set_cursor_position(int p_pos) {
|
||||||
ofs_max -= r_icon->get_width();
|
ofs_max -= r_icon->get_width();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: Use too coordinates to fit IME input range.
|
// Note: Use two coordinates to fit IME input range.
|
||||||
Vector2i primary_catret_offset = get_cursor_pixel_pos();
|
Vector2i primary_catret_offset = get_cursor_pixel_pos();
|
||||||
|
|
||||||
if (MIN(primary_catret_offset.x, primary_catret_offset.y) <= x_ofs) {
|
if (MIN(primary_catret_offset.x, primary_catret_offset.y) <= x_ofs) {
|
||||||
|
|
|
@ -222,7 +222,7 @@ void PopupMenu::_activate_submenu(int p_over) {
|
||||||
|
|
||||||
submenu_popup->set_close_on_parent_focus(false);
|
submenu_popup->set_close_on_parent_focus(false);
|
||||||
submenu_popup->set_position(submenu_pos);
|
submenu_popup->set_position(submenu_pos);
|
||||||
submenu_popup->set_as_minsize(); // Shrink the popup size to it's contents.
|
submenu_popup->set_as_minsize(); // Shrink the popup size to its contents.
|
||||||
submenu_popup->popup();
|
submenu_popup->popup();
|
||||||
|
|
||||||
// Set autohide areas
|
// Set autohide areas
|
||||||
|
|
|
@ -808,7 +808,7 @@ void TextEdit::_notification(int p_what) {
|
||||||
// Get the highlighted words.
|
// Get the highlighted words.
|
||||||
String highlighted_text = get_selection_text();
|
String highlighted_text = get_selection_text();
|
||||||
|
|
||||||
// Check if highlighted words contains only whitespaces (tabs or spaces).
|
// Check if highlighted words contain only whitespaces (tabs or spaces).
|
||||||
bool only_whitespaces_highlighted = highlighted_text.strip_edges() == String();
|
bool only_whitespaces_highlighted = highlighted_text.strip_edges() == String();
|
||||||
|
|
||||||
int cursor_wrap_index = get_cursor_wrap_index();
|
int cursor_wrap_index = get_cursor_wrap_index();
|
||||||
|
@ -1057,7 +1057,7 @@ void TextEdit::_notification(int p_what) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (str.length() == 0) {
|
if (str.length() == 0) {
|
||||||
// Draw line background if empty as we won't loop at at all.
|
// Draw line background if empty as we won't loop at all.
|
||||||
if (line == cursor.line && cursor_wrap_index == line_wrap_index && highlight_current_line) {
|
if (line == cursor.line && cursor_wrap_index == line_wrap_index && highlight_current_line) {
|
||||||
if (rtl) {
|
if (rtl) {
|
||||||
RenderingServer::get_singleton()->canvas_item_add_rect(ci, Rect2(size.width - ofs_x - xmargin_end, ofs_y, xmargin_end, row_height), cache.current_line_color);
|
RenderingServer::get_singleton()->canvas_item_add_rect(ci, Rect2(size.width - ofs_x - xmargin_end, ofs_y, xmargin_end, row_height), cache.current_line_color);
|
||||||
|
@ -1442,7 +1442,7 @@ void TextEdit::_notification(int p_what) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
{
|
{
|
||||||
// IME intermidiet text range.
|
// IME Intermediate text range.
|
||||||
Vector<Vector2> sel = TS->shaped_text_get_selection(rid, cursor.column, cursor.column + ime_text.length());
|
Vector<Vector2> sel = TS->shaped_text_get_selection(rid, cursor.column, cursor.column + ime_text.length());
|
||||||
for (int j = 0; j < sel.size(); j++) {
|
for (int j = 0; j < sel.size(); j++) {
|
||||||
Rect2 rect = Rect2(sel[j].x + char_margin + ofs_x, ofs_y, sel[j].y - sel[j].x, text_height);
|
Rect2 rect = Rect2(sel[j].x + char_margin + ofs_x, ofs_y, sel[j].y - sel[j].x, text_height);
|
||||||
|
@ -2009,7 +2009,7 @@ void TextEdit::indent_selected_lines_right() {
|
||||||
// We don't really care where selection is - we just need to know indentation level at the beginning of the line.
|
// We don't really care where selection is - we just need to know indentation level at the beginning of the line.
|
||||||
int left = _find_first_non_whitespace_column_of_line(line_text);
|
int left = _find_first_non_whitespace_column_of_line(line_text);
|
||||||
int spaces_to_add = _calculate_spaces_till_next_right_indent(left);
|
int spaces_to_add = _calculate_spaces_till_next_right_indent(left);
|
||||||
// Since we will add this much spaces we want move whole selection and cursor by this much.
|
// Since we will add these many spaces, we want to move the whole selection and cursor by this much.
|
||||||
selection_offset = spaces_to_add;
|
selection_offset = spaces_to_add;
|
||||||
for (int j = 0; j < spaces_to_add; j++) {
|
for (int j = 0; j < spaces_to_add; j++) {
|
||||||
line_text = ' ' + line_text;
|
line_text = ' ' + line_text;
|
||||||
|
@ -2034,7 +2034,7 @@ void TextEdit::indent_selected_lines_left() {
|
||||||
int end_line;
|
int end_line;
|
||||||
|
|
||||||
// Moving cursor and selection after unindenting can get tricky because
|
// Moving cursor and selection after unindenting can get tricky because
|
||||||
// changing content of line can move cursor and selection on it's own (if new line ends before previous position of either),
|
// changing content of line can move cursor and selection on its own (if new line ends before previous position of either),
|
||||||
// therefore we just remember initial values and at the end of the operation offset them by number of removed characters.
|
// therefore we just remember initial values and at the end of the operation offset them by number of removed characters.
|
||||||
int removed_characters = 0;
|
int removed_characters = 0;
|
||||||
int initial_selection_end_column = selection.to_column;
|
int initial_selection_end_column = selection.to_column;
|
||||||
|
@ -2454,7 +2454,7 @@ void TextEdit::_move_cursor_to_line_start(bool p_select) {
|
||||||
row_start_col += rows[i].length();
|
row_start_col += rows[i].length();
|
||||||
}
|
}
|
||||||
if (cursor.column == row_start_col || wi == 0) {
|
if (cursor.column == row_start_col || wi == 0) {
|
||||||
// Compute whitespace symbols seq length.
|
// Compute whitespace symbols sequence length.
|
||||||
int current_line_whitespace_len = 0;
|
int current_line_whitespace_len = 0;
|
||||||
while (current_line_whitespace_len < text[cursor.line].length()) {
|
while (current_line_whitespace_len < text[cursor.line].length()) {
|
||||||
char32_t c = text[cursor.line][current_line_whitespace_len];
|
char32_t c = text[cursor.line][current_line_whitespace_len];
|
||||||
|
|
|
@ -335,7 +335,7 @@ bool HTTPRequest::_update_connection() {
|
||||||
|
|
||||||
call_deferred("_request_done", RESULT_CHUNKED_BODY_SIZE_MISMATCH, response_code, response_headers, PackedByteArray());
|
call_deferred("_request_done", RESULT_CHUNKED_BODY_SIZE_MISMATCH, response_code, response_headers, PackedByteArray());
|
||||||
return true;
|
return true;
|
||||||
// Request migh have been done
|
// Request might have been done
|
||||||
} else {
|
} else {
|
||||||
// Did not request yet, do request
|
// Did not request yet, do request
|
||||||
|
|
||||||
|
|
|
@ -428,7 +428,7 @@ void Node::set_process_mode(ProcessMode p_mode) {
|
||||||
_propagate_process_owner(data.process_owner, pause_notification);
|
_propagate_process_owner(data.process_owner, pause_notification);
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
// This is required for the editor to update the visibility of disabled nodes
|
// This is required for the editor to update the visibility of disabled nodes
|
||||||
// Its very expensive during runtime to change, so editor-only
|
// It's very expensive during runtime to change, so editor-only
|
||||||
if (Engine::get_singleton()->is_editor_hint()) {
|
if (Engine::get_singleton()->is_editor_hint()) {
|
||||||
get_tree()->emit_signal("tree_process_mode_changed");
|
get_tree()->emit_signal("tree_process_mode_changed");
|
||||||
}
|
}
|
||||||
|
@ -1130,7 +1130,7 @@ String increase_numeric_string(const String &s) {
|
||||||
|
|
||||||
void Node::_generate_serial_child_name(const Node *p_child, StringName &name) const {
|
void Node::_generate_serial_child_name(const Node *p_child, StringName &name) const {
|
||||||
if (name == StringName()) {
|
if (name == StringName()) {
|
||||||
//no name and a new nade is needed, create one.
|
//no name and a new name is needed, create one.
|
||||||
|
|
||||||
name = p_child->get_class();
|
name = p_child->get_class();
|
||||||
// Adjust casing according to project setting. The current type name is expected to be in PascalCase.
|
// Adjust casing according to project setting. The current type name is expected to be in PascalCase.
|
||||||
|
@ -1156,7 +1156,7 @@ void Node::_generate_serial_child_name(const Node *p_child, StringName &name) co
|
||||||
bool exists = false;
|
bool exists = false;
|
||||||
|
|
||||||
for (int i = 0; i < cc; i++) {
|
for (int i = 0; i < cc; i++) {
|
||||||
if (children_ptr[i] == p_child) { //exclude self in renaming if its already a child
|
if (children_ptr[i] == p_child) { //exclude self in renaming if it's already a child
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (children_ptr[i]->data.name == name) {
|
if (children_ptr[i]->data.name == name) {
|
||||||
|
@ -1945,7 +1945,7 @@ void Node::set_editable_instance(Node *p_node, bool p_editable) {
|
||||||
if (!p_editable) {
|
if (!p_editable) {
|
||||||
p_node->data.editable_instance = false;
|
p_node->data.editable_instance = false;
|
||||||
// Avoid this flag being needlessly saved;
|
// Avoid this flag being needlessly saved;
|
||||||
// also give more visual feedback if editable children is re-enabled
|
// also give more visual feedback if editable children are re-enabled
|
||||||
set_display_folded(false);
|
set_display_folded(false);
|
||||||
} else {
|
} else {
|
||||||
p_node->data.editable_instance = true;
|
p_node->data.editable_instance = true;
|
||||||
|
|
|
@ -2201,7 +2201,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
|
||||||
embedder = this;
|
embedder = this;
|
||||||
viewport_pos = mpos;
|
viewport_pos = mpos;
|
||||||
} else {
|
} else {
|
||||||
//not an embeder, but may be a subwindow of an embedder
|
//not an embedder, but may be a subwindow of an embedder
|
||||||
Window *w = Object::cast_to<Window>(this);
|
Window *w = Object::cast_to<Window>(this);
|
||||||
if (w) {
|
if (w) {
|
||||||
if (w->is_embedded()) {
|
if (w->is_embedded()) {
|
||||||
|
@ -2393,7 +2393,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
|
||||||
//keyboard focus
|
//keyboard focus
|
||||||
//if (from && p_event->is_pressed() && !p_event->get_alt() && !p_event->get_metakey() && !p_event->key->get_command()) {
|
//if (from && p_event->is_pressed() && !p_event->get_alt() && !p_event->get_metakey() && !p_event->key->get_command()) {
|
||||||
Ref<InputEventKey> k = p_event;
|
Ref<InputEventKey> k = p_event;
|
||||||
//need to check for mods, otherwise any combination of alt/ctrl/shift+<up/down/left/righ/etc> is handled here when it shouldn't be.
|
//need to check for mods, otherwise any combination of alt/ctrl/shift+<up/down/left/right/etc> is handled here when it shouldn't be.
|
||||||
bool mods = k.is_valid() && (k->get_control() || k->get_alt() || k->get_shift() || k->get_metakey());
|
bool mods = k.is_valid() && (k->get_control() || k->get_alt() || k->get_shift() || k->get_metakey());
|
||||||
|
|
||||||
if (from && p_event->is_pressed()) {
|
if (from && p_event->is_pressed()) {
|
||||||
|
@ -2672,7 +2672,7 @@ void Viewport::_post_gui_grab_click_focus() {
|
||||||
Ref<InputEventMouseButton> mb;
|
Ref<InputEventMouseButton> mb;
|
||||||
mb.instance();
|
mb.instance();
|
||||||
|
|
||||||
//send unclic
|
//send unclick
|
||||||
|
|
||||||
mb->set_position(click);
|
mb->set_position(click);
|
||||||
mb->set_button_index(i + 1);
|
mb->set_button_index(i + 1);
|
||||||
|
@ -2690,7 +2690,7 @@ void Viewport::_post_gui_grab_click_focus() {
|
||||||
Ref<InputEventMouseButton> mb;
|
Ref<InputEventMouseButton> mb;
|
||||||
mb.instance();
|
mb.instance();
|
||||||
|
|
||||||
//send clic
|
//send click
|
||||||
|
|
||||||
mb->set_position(click);
|
mb->set_position(click);
|
||||||
mb->set_button_index(i + 1);
|
mb->set_button_index(i + 1);
|
||||||
|
|
|
@ -2738,7 +2738,7 @@ bool Animation::_transform_track_optimize_key(const TKey<TransformKey> &t0, cons
|
||||||
real_t d = Geometry3D::get_closest_point_to_segment(v1, s).distance_to(v1);
|
real_t d = Geometry3D::get_closest_point_to_segment(v1, s).distance_to(v1);
|
||||||
|
|
||||||
if (d > pd.length() * p_alowed_linear_err) {
|
if (d > pd.length() * p_alowed_linear_err) {
|
||||||
return false; //beyond allowed error for colinearity
|
return false; //beyond allowed error for collinearity
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_norm != Vector3() && Math::acos(pd.normalized().dot(p_norm)) > p_alowed_angular_err) {
|
if (p_norm != Vector3() && Math::acos(pd.normalized().dot(p_norm)) > p_alowed_angular_err) {
|
||||||
|
@ -2828,7 +2828,7 @@ bool Animation::_transform_track_optimize_key(const TKey<TransformKey> &t0, cons
|
||||||
real_t d = Geometry3D::get_closest_point_to_segment(v1, s).distance_to(v1);
|
real_t d = Geometry3D::get_closest_point_to_segment(v1, s).distance_to(v1);
|
||||||
|
|
||||||
if (d > pd.length() * p_alowed_linear_err) {
|
if (d > pd.length() * p_alowed_linear_err) {
|
||||||
return false; //beyond allowed error for colinearity
|
return false; //beyond allowed error for collinearity
|
||||||
}
|
}
|
||||||
|
|
||||||
t[2] = (d1 - d0) / (d2 - d0);
|
t[2] = (d1 - d0) / (d2 - d0);
|
||||||
|
|
|
@ -285,7 +285,7 @@ Vector<Vector2> BitMap::_march_square(const Rect2i &rect, const Point2i &start)
|
||||||
+---+---+
|
+---+---+
|
||||||
| 4 | |
|
| 4 | |
|
||||||
+---+---+
|
+---+---+
|
||||||
this normally go RIGHT, but if its coming from RIGHT, it should go LEFT
|
this normally go RIGHT, but if it's coming from RIGHT, it should go LEFT
|
||||||
*/
|
*/
|
||||||
if (case6s.has(Point2i(curx, cury))) {
|
if (case6s.has(Point2i(curx, cury))) {
|
||||||
//found, so we go left, and delete from case6s;
|
//found, so we go left, and delete from case6s;
|
||||||
|
|
|
@ -1703,7 +1703,7 @@ void BaseMaterial3D::_validate_property(PropertyInfo &property) const {
|
||||||
property.usage = PROPERTY_USAGE_NOEDITOR;
|
property.usage = PROPERTY_USAGE_NOEDITOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
// you can only enable anti-aliasing (in mataerials) on alpha scissor and alpha hash
|
// you can only enable anti-aliasing (in materials) on alpha scissor and alpha hash
|
||||||
const bool can_select_aa = (transparency == TRANSPARENCY_ALPHA_SCISSOR || transparency == TRANSPARENCY_ALPHA_HASH);
|
const bool can_select_aa = (transparency == TRANSPARENCY_ALPHA_SCISSOR || transparency == TRANSPARENCY_ALPHA_HASH);
|
||||||
// alpha anti aliasiasing is only enabled when you can select aa
|
// alpha anti aliasiasing is only enabled when you can select aa
|
||||||
const bool alpha_aa_enabled = (alpha_antialiasing_mode != ALPHA_ANTIALIASING_OFF) && can_select_aa;
|
const bool alpha_aa_enabled = (alpha_antialiasing_mode != ALPHA_ANTIALIASING_OFF) && can_select_aa;
|
||||||
|
@ -1722,7 +1722,7 @@ void BaseMaterial3D::_validate_property(PropertyInfo &property) const {
|
||||||
property.usage = 0;
|
property.usage = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// we cant choose an antialiasing mode if alpha isnt possible
|
// we can't choose an antialiasing mode if alpha isn't possible
|
||||||
if (property.name == "alpha_antialiasing_edge" && !alpha_aa_enabled) {
|
if (property.name == "alpha_antialiasing_edge" && !alpha_aa_enabled) {
|
||||||
property.usage = 0;
|
property.usage = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1075,7 +1075,7 @@ ParticlesMaterial::SubEmitterMode ParticlesMaterial::get_sub_emitter_mode() cons
|
||||||
|
|
||||||
void ParticlesMaterial::set_sub_emitter_frequency(float p_frequency) {
|
void ParticlesMaterial::set_sub_emitter_frequency(float p_frequency) {
|
||||||
sub_emitter_frequency = p_frequency;
|
sub_emitter_frequency = p_frequency;
|
||||||
RenderingServer::get_singleton()->material_set_param(_get_material(), shader_names->sub_emitter_frequency, 1.0 / p_frequency); //pas delta instead of frequency, since its easier to compute
|
RenderingServer::get_singleton()->material_set_param(_get_material(), shader_names->sub_emitter_frequency, 1.0 / p_frequency); //pass delta instead of frequency, since its easier to compute
|
||||||
}
|
}
|
||||||
float ParticlesMaterial::get_sub_emitter_frequency() const {
|
float ParticlesMaterial::get_sub_emitter_frequency() const {
|
||||||
return sub_emitter_frequency;
|
return sub_emitter_frequency;
|
||||||
|
|
|
@ -77,7 +77,7 @@ void PolygonPathFinder::setup(const Vector<Vector2> &p_points, const Vector<int>
|
||||||
outside_point.x += 20.451 + Math::randf() * 10.2039;
|
outside_point.x += 20.451 + Math::randf() * 10.2039;
|
||||||
outside_point.y += 21.193 + Math::randf() * 12.5412;
|
outside_point.y += 21.193 + Math::randf() * 12.5412;
|
||||||
|
|
||||||
//insert edges (which are also connetions)
|
//insert edges (which are also connections)
|
||||||
|
|
||||||
for (int i = 0; i < p_connections.size(); i += 2) {
|
for (int i = 0; i < p_connections.size(); i += 2) {
|
||||||
Edge e(p_connections[i], p_connections[i + 1]);
|
Edge e(p_connections[i], p_connections[i + 1]);
|
||||||
|
@ -335,7 +335,7 @@ Vector<Vector2> PolygonPathFinder::find_path(const Vector2 &p_from, const Vector
|
||||||
//oh this was visited already, can we win the cost?
|
//oh this was visited already, can we win the cost?
|
||||||
|
|
||||||
if (p.distance > distance) {
|
if (p.distance > distance) {
|
||||||
p.prev = least_cost_point; //reasign previous
|
p.prev = least_cost_point; //reassign previous
|
||||||
p.distance = distance;
|
p.distance = distance;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1321,7 +1321,7 @@ String ResourceFormatLoaderText::get_resource_type(const String &p_path) const {
|
||||||
|
|
||||||
FileAccess *f = FileAccess::open(p_path, FileAccess::READ);
|
FileAccess *f = FileAccess::open(p_path, FileAccess::READ);
|
||||||
if (!f) {
|
if (!f) {
|
||||||
return ""; //could not rwead
|
return ""; //could not read
|
||||||
}
|
}
|
||||||
|
|
||||||
ResourceLoaderText loader;
|
ResourceLoaderText loader;
|
||||||
|
|
Loading…
Reference in New Issue