diff options
24 files changed, 268 insertions, 13 deletions
diff --git a/core/io/http_client.cpp b/core/io/http_client.cpp index 46e45500bf..a25413b21b 100644 --- a/core/io/http_client.cpp +++ b/core/io/http_client.cpp @@ -96,6 +96,10 @@ Error HTTPClient::connect_to_host(const String &p_host, int p_port, bool p_ssl, void HTTPClient::set_connection(const Ref<StreamPeer> &p_connection) { ERR_FAIL_COND_MSG(p_connection.is_null(), "Connection is not a reference to a valid StreamPeer object."); + if (connection == p_connection) { + return; + } + close(); connection = p_connection; status = STATUS_CONNECTED; diff --git a/doc/classes/Callable.xml b/doc/classes/Callable.xml index 3bbee993ac..ad5c549fee 100644 --- a/doc/classes/Callable.xml +++ b/doc/classes/Callable.xml @@ -47,6 +47,12 @@ Creates a new [Callable] for the method called [code]method_name[/code] in the specified [code]object[/code]. </description> </method> + <method name="bind" qualifiers="vararg"> + <return type="void"> + </return> + <description> + </description> + </method> <method name="call" qualifiers="vararg"> <return type="Variant"> </return> @@ -106,6 +112,14 @@ <description> </description> </method> + <method name="unbind"> + <return type="Callable"> + </return> + <argument index="0" name="argcount" type="int"> + </argument> + <description> + </description> + </method> </methods> <constants> </constants> diff --git a/doc/classes/GPUParticles3D.xml b/doc/classes/GPUParticles3D.xml index e840e457bf..d1296c3418 100644 --- a/doc/classes/GPUParticles3D.xml +++ b/doc/classes/GPUParticles3D.xml @@ -67,6 +67,8 @@ <member name="amount" type="int" setter="set_amount" getter="get_amount" default="8"> Number of particles to emit. </member> + <member name="collision_base_size" type="float" setter="set_collision_base_size" getter="get_collision_base_size" default="0.01"> + </member> <member name="draw_order" type="int" setter="set_draw_order" getter="get_draw_order" enum="GPUParticles3D.DrawOrder" default="0"> Particle draw order. Uses [enum DrawOrder] values. </member> diff --git a/doc/classes/GPUParticlesAttractor3D.xml b/doc/classes/GPUParticlesAttractor3D.xml new file mode 100644 index 0000000000..111827d294 --- /dev/null +++ b/doc/classes/GPUParticlesAttractor3D.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="GPUParticlesAttractor3D" inherits="VisualInstance3D" version="4.0"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + </methods> + <members> + <member name="attenuation" type="float" setter="set_attenuation" getter="get_attenuation" default="1.0"> + </member> + <member name="cull_mask" type="int" setter="set_cull_mask" getter="get_cull_mask" default="4294967295"> + </member> + <member name="directionality" type="float" setter="set_directionality" getter="get_directionality" default="0.0"> + </member> + <member name="strength" type="float" setter="set_strength" getter="get_strength" default="1.0"> + </member> + </members> + <constants> + </constants> +</class> diff --git a/doc/classes/GPUParticlesAttractorBox.xml b/doc/classes/GPUParticlesAttractorBox.xml new file mode 100644 index 0000000000..68616f9bbd --- /dev/null +++ b/doc/classes/GPUParticlesAttractorBox.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="GPUParticlesAttractorBox" inherits="GPUParticlesAttractor3D" version="4.0"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + </methods> + <members> + <member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3( 1, 1, 1 )"> + </member> + </members> + <constants> + </constants> +</class> diff --git a/doc/classes/GPUParticlesAttractorSphere.xml b/doc/classes/GPUParticlesAttractorSphere.xml new file mode 100644 index 0000000000..6984427a96 --- /dev/null +++ b/doc/classes/GPUParticlesAttractorSphere.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="GPUParticlesAttractorSphere" inherits="GPUParticlesAttractor3D" version="4.0"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + </methods> + <members> + <member name="radius" type="float" setter="set_radius" getter="get_radius" default="1.0"> + </member> + </members> + <constants> + </constants> +</class> diff --git a/doc/classes/GPUParticlesAttractorVectorField.xml b/doc/classes/GPUParticlesAttractorVectorField.xml new file mode 100644 index 0000000000..cf5e375ea3 --- /dev/null +++ b/doc/classes/GPUParticlesAttractorVectorField.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="GPUParticlesAttractorVectorField" inherits="GPUParticlesAttractor3D" version="4.0"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + </methods> + <members> + <member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3( 1, 1, 1 )"> + </member> + <member name="texture" type="Texture3D" setter="set_texture" getter="get_texture"> + </member> + </members> + <constants> + </constants> +</class> diff --git a/doc/classes/GPUParticlesCollision3D.xml b/doc/classes/GPUParticlesCollision3D.xml new file mode 100644 index 0000000000..dce9a32fc4 --- /dev/null +++ b/doc/classes/GPUParticlesCollision3D.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="GPUParticlesCollision3D" inherits="VisualInstance3D" version="4.0"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + </methods> + <members> + <member name="cull_mask" type="int" setter="set_cull_mask" getter="get_cull_mask" default="4294967295"> + </member> + </members> + <constants> + </constants> +</class> diff --git a/doc/classes/GPUParticlesCollisionBox.xml b/doc/classes/GPUParticlesCollisionBox.xml new file mode 100644 index 0000000000..17fc124c41 --- /dev/null +++ b/doc/classes/GPUParticlesCollisionBox.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="GPUParticlesCollisionBox" inherits="GPUParticlesCollision3D" version="4.0"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + </methods> + <members> + <member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3( 1, 1, 1 )"> + </member> + </members> + <constants> + </constants> +</class> diff --git a/doc/classes/GPUParticlesCollisionHeightField.xml b/doc/classes/GPUParticlesCollisionHeightField.xml new file mode 100644 index 0000000000..c6987515a9 --- /dev/null +++ b/doc/classes/GPUParticlesCollisionHeightField.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="GPUParticlesCollisionHeightField" inherits="GPUParticlesCollision3D" version="4.0"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + </methods> + <members> + <member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3( 1, 1, 1 )"> + </member> + <member name="follow_camera_enabled" type="bool" setter="set_follow_camera_mode" getter="is_follow_camera_mode_enabled" default="false"> + </member> + <member name="follow_camera_push_ratio" type="float" setter="set_follow_camera_push_ratio" getter="get_follow_camera_push_ratio" default="0.1"> + </member> + <member name="resolution" type="int" setter="set_resolution" getter="get_resolution" enum="GPUParticlesCollisionHeightField.Resolution" default="2"> + </member> + <member name="update_mode" type="int" setter="set_update_mode" getter="get_update_mode" enum="GPUParticlesCollisionHeightField.UpdateMode" default="0"> + </member> + </members> + <constants> + <constant name="RESOLUTION_256" value="0" enum="Resolution"> + </constant> + <constant name="RESOLUTION_512" value="1" enum="Resolution"> + </constant> + <constant name="RESOLUTION_1024" value="2" enum="Resolution"> + </constant> + <constant name="RESOLUTION_2048" value="3" enum="Resolution"> + </constant> + <constant name="RESOLUTION_4096" value="4" enum="Resolution"> + </constant> + <constant name="RESOLUTION_8192" value="5" enum="Resolution"> + </constant> + <constant name="RESOLUTION_MAX" value="6" enum="Resolution"> + </constant> + <constant name="UPDATE_MODE_WHEN_MOVED" value="0" enum="UpdateMode"> + </constant> + <constant name="UPDATE_MODE_ALWAYS" value="1" enum="UpdateMode"> + </constant> + </constants> +</class> diff --git a/doc/classes/GPUParticlesCollisionSDF.xml b/doc/classes/GPUParticlesCollisionSDF.xml new file mode 100644 index 0000000000..c3cbe4b1c6 --- /dev/null +++ b/doc/classes/GPUParticlesCollisionSDF.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="GPUParticlesCollisionSDF" inherits="GPUParticlesCollision3D" version="4.0"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + </methods> + <members> + <member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3( 1, 1, 1 )"> + </member> + <member name="resolution" type="int" setter="set_resolution" getter="get_resolution" enum="GPUParticlesCollisionSDF.Resolution" default="2"> + </member> + <member name="texture" type="Texture3D" setter="set_texture" getter="get_texture"> + </member> + <member name="thickness" type="float" setter="set_thickness" getter="get_thickness" default="1.0"> + </member> + </members> + <constants> + <constant name="RESOLUTION_16" value="0" enum="Resolution"> + </constant> + <constant name="RESOLUTION_32" value="1" enum="Resolution"> + </constant> + <constant name="RESOLUTION_64" value="2" enum="Resolution"> + </constant> + <constant name="RESOLUTION_128" value="3" enum="Resolution"> + </constant> + <constant name="RESOLUTION_256" value="4" enum="Resolution"> + </constant> + <constant name="RESOLUTION_512" value="5" enum="Resolution"> + </constant> + <constant name="RESOLUTION_MAX" value="6" enum="Resolution"> + </constant> + </constants> +</class> diff --git a/doc/classes/GPUParticlesCollisionSphere.xml b/doc/classes/GPUParticlesCollisionSphere.xml new file mode 100644 index 0000000000..41150960d2 --- /dev/null +++ b/doc/classes/GPUParticlesCollisionSphere.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="GPUParticlesCollisionSphere" inherits="GPUParticlesCollision3D" version="4.0"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + </methods> + <members> + <member name="radius" type="float" setter="set_radius" getter="get_radius" default="1.0"> + </member> + </members> + <constants> + </constants> +</class> diff --git a/doc/classes/KinematicBody2D.xml b/doc/classes/KinematicBody2D.xml index 17c4b85346..425df00b6f 100644 --- a/doc/classes/KinematicBody2D.xml +++ b/doc/classes/KinematicBody2D.xml @@ -55,21 +55,21 @@ <return type="bool"> </return> <description> - Returns [code]true[/code] if the body is on the ceiling. Only updates when calling [method move_and_slide] or [method move_and_slide_with_snap]. + Returns [code]true[/code] if the body collided with the ceiling on the last call of [method move_and_slide] or [method move_and_slide_with_snap]. Otherwise, returns [code]false[/code]. </description> </method> <method name="is_on_floor" qualifiers="const"> <return type="bool"> </return> <description> - Returns [code]true[/code] if the body is on the floor. Only updates when calling [method move_and_slide] or [method move_and_slide_with_snap]. + Returns [code]true[/code] if the body collided with the floor on the last call of [method move_and_slide] or [method move_and_slide_with_snap]. Otherwise, returns [code]false[/code]. </description> </method> <method name="is_on_wall" qualifiers="const"> <return type="bool"> </return> <description> - Returns [code]true[/code] if the body is on a wall. Only updates when calling [method move_and_slide] or [method move_and_slide_with_snap]. + Returns [code]true[/code] if the body collided with a wall on the last call of [method move_and_slide] or [method move_and_slide_with_snap]. Otherwise, returns [code]false[/code]. </description> </method> <method name="move_and_collide"> diff --git a/doc/classes/KinematicBody3D.xml b/doc/classes/KinematicBody3D.xml index 17a6034e9a..a21496de54 100644 --- a/doc/classes/KinematicBody3D.xml +++ b/doc/classes/KinematicBody3D.xml @@ -59,21 +59,21 @@ <return type="bool"> </return> <description> - Returns [code]true[/code] if the body is on the ceiling. Only updates when calling [method move_and_slide] or [method move_and_slide_with_snap]. + Returns [code]true[/code] if the body collided with the ceiling on the last call of [method move_and_slide] or [method move_and_slide_with_snap]. Otherwise, returns [code]false[/code]. </description> </method> <method name="is_on_floor" qualifiers="const"> <return type="bool"> </return> <description> - Returns [code]true[/code] if the body is on the floor. Only updates when calling [method move_and_slide] or [method move_and_slide_with_snap]. + Returns [code]true[/code] if the body collided with the floor on the last call of [method move_and_slide] or [method move_and_slide_with_snap]. Otherwise, returns [code]false[/code]. </description> </method> <method name="is_on_wall" qualifiers="const"> <return type="bool"> </return> <description> - Returns [code]true[/code] if the body is on a wall. Only updates when calling [method move_and_slide] or [method move_and_slide_with_snap]. + Returns [code]true[/code] if the body collided with a wall on the last call of [method move_and_slide] or [method move_and_slide_with_snap]. Otherwise, returns [code]false[/code]. </description> </method> <method name="move_and_collide"> diff --git a/doc/classes/ParticlesMaterial.xml b/doc/classes/ParticlesMaterial.xml index f6fa3cf38b..77df6245e9 100644 --- a/doc/classes/ParticlesMaterial.xml +++ b/doc/classes/ParticlesMaterial.xml @@ -131,6 +131,16 @@ <member name="anim_speed_random" type="float" setter="set_param_randomness" getter="get_param_randomness" default="0.0"> Animation speed randomness ratio. </member> + <member name="attractor_interaction_enabled" type="bool" setter="set_attractor_interaction_enabled" getter="is_attractor_interaction_enabled" default="true"> + </member> + <member name="collision_bounce" type="float" setter="set_collision_bounce" getter="get_collision_bounce" default="0.0"> + </member> + <member name="collision_enabled" type="bool" setter="set_collision_enabled" getter="is_collision_enabled" default="true"> + </member> + <member name="collision_friction" type="float" setter="set_collision_friction" getter="get_collision_friction" default="0.0"> + </member> + <member name="collision_use_scale" type="bool" setter="set_collision_use_scale" getter="is_collision_using_scale" default="false"> + </member> <member name="color" type="Color" setter="set_color" getter="get_color" default="Color( 1, 1, 1, 1 )"> Each particle's initial color. If the [GPUParticles2D]'s [code]texture[/code] is defined, it will be multiplied by this color. To have particle display color in a [BaseMaterial3D] make sure to set [member BaseMaterial3D.vertex_color_use_as_albedo] to [code]true[/code]. </member> diff --git a/doc/classes/RenderingServer.xml b/doc/classes/RenderingServer.xml index 9ca699501f..456022a626 100644 --- a/doc/classes/RenderingServer.xml +++ b/doc/classes/RenderingServer.xml @@ -3579,22 +3579,24 @@ <constant name="INSTANCE_PARTICLES" value="4" enum="InstanceType"> The instance is a particle emitter. </constant> - <constant name="INSTANCE_LIGHT" value="5" enum="InstanceType"> + <constant name="INSTANCE_PARTICLES_COLLISION" value="5" enum="InstanceType"> + </constant> + <constant name="INSTANCE_LIGHT" value="6" enum="InstanceType"> The instance is a light. </constant> - <constant name="INSTANCE_REFLECTION_PROBE" value="6" enum="InstanceType"> + <constant name="INSTANCE_REFLECTION_PROBE" value="7" enum="InstanceType"> The instance is a reflection probe. </constant> - <constant name="INSTANCE_DECAL" value="7" enum="InstanceType"> + <constant name="INSTANCE_DECAL" value="8" enum="InstanceType"> The instance is a decal. </constant> - <constant name="INSTANCE_GI_PROBE" value="8" enum="InstanceType"> + <constant name="INSTANCE_GI_PROBE" value="9" enum="InstanceType"> The instance is a GI probe. </constant> - <constant name="INSTANCE_LIGHTMAP" value="9" enum="InstanceType"> + <constant name="INSTANCE_LIGHTMAP" value="10" enum="InstanceType"> The instance is a lightmap. </constant> - <constant name="INSTANCE_MAX" value="10" enum="InstanceType"> + <constant name="INSTANCE_MAX" value="11" enum="InstanceType"> Represents the size of the [enum InstanceType] enum. </constant> <constant name="INSTANCE_GEOMETRY_MASK" value="30" enum="InstanceType"> diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 4c8af615b4..9e68ef2f35 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -614,7 +614,7 @@ public: const Ref<InputEventMouseButton> mb = p_ev; - if (mb.is_valid() && mb->get_button_index() == BUTTON_LEFT && mb->is_pressed()) { + if (mb.is_valid() && mb->get_button_index() == BUTTON_LEFT && mb->is_pressed() && hovered_index > 0) { // Toggle the flag. // We base our choice on the hovered flag, so that it always matches the hovered flag. if (value & (1 << hovered_index)) { diff --git a/modules/bullet/rigid_body_bullet.cpp b/modules/bullet/rigid_body_bullet.cpp index 76c0e0e607..eb599df74c 100644 --- a/modules/bullet/rigid_body_bullet.cpp +++ b/modules/bullet/rigid_body_bullet.cpp @@ -264,6 +264,7 @@ RigidBodyBullet::RigidBodyBullet() : btRigidBody::btRigidBodyConstructionInfo cInfo(mass, godotMotionState, nullptr, localInertia); btBody = bulletnew(btRigidBody(cInfo)); + btBody->setFriction(1.0); reload_shapes(); setupBulletCollisionObject(btBody); diff --git a/modules/visual_script/visual_script_func_nodes.cpp b/modules/visual_script/visual_script_func_nodes.cpp index f13377f3c8..68de686272 100644 --- a/modules/visual_script/visual_script_func_nodes.cpp +++ b/modules/visual_script/visual_script_func_nodes.cpp @@ -2088,6 +2088,7 @@ void VisualScriptPropertyGet::_bind_methods() { BIND_ENUM_CONSTANT(CALL_MODE_SELF); BIND_ENUM_CONSTANT(CALL_MODE_NODE_PATH); BIND_ENUM_CONSTANT(CALL_MODE_INSTANCE); + BIND_ENUM_CONSTANT(CALL_MODE_BASIC_TYPE); } class VisualScriptNodeInstancePropertyGet : public VisualScriptNodeInstance { diff --git a/scene/3d/gpu_particles_collision_3d.cpp b/scene/3d/gpu_particles_collision_3d.cpp index af737b058c..baaaa23185 100644 --- a/scene/3d/gpu_particles_collision_3d.cpp +++ b/scene/3d/gpu_particles_collision_3d.cpp @@ -29,6 +29,7 @@ /*************************************************************************/ #include "gpu_particles_collision_3d.h" + #include "core/thread_work_pool.h" #include "mesh_instance_3d.h" #include "scene/3d/camera_3d.h" @@ -663,6 +664,9 @@ void GPUParticlesCollisionHeightField::_bind_methods() { BIND_ENUM_CONSTANT(RESOLUTION_4096); BIND_ENUM_CONSTANT(RESOLUTION_8192); BIND_ENUM_CONSTANT(RESOLUTION_MAX); + + BIND_ENUM_CONSTANT(UPDATE_MODE_WHEN_MOVED); + BIND_ENUM_CONSTANT(UPDATE_MODE_ALWAYS); } void GPUParticlesCollisionHeightField::set_follow_camera_push_ratio(float p_follow_camera_push_ratio) { diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 2f5ee20373..318496df70 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -1173,6 +1173,9 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2 if (p_item->cells[i].text.size() > 0) { float icon_width = p_item->cells[i].get_icon_size().width; + if (p_item->get_icon_max_width(i) > 0) { + icon_width = p_item->get_icon_max_width(i); + } r.position.x += icon_width; r.size.x -= icon_width; } diff --git a/servers/rendering/rasterizer_rd/rasterizer_effects_rd.cpp b/servers/rendering/rasterizer_rd/rasterizer_effects_rd.cpp index 527ed09584..71acd4ceb6 100644 --- a/servers/rendering/rasterizer_rd/rasterizer_effects_rd.cpp +++ b/servers/rendering/rasterizer_rd/rasterizer_effects_rd.cpp @@ -1758,6 +1758,7 @@ RasterizerEffectsRD::~RasterizerEffectsRD() { resolve.shader.version_free(resolve.shader_version); roughness.shader.version_free(roughness.shader_version); roughness_limiter.shader.version_free(roughness_limiter.shader_version); + sort.shader.version_free(sort.shader_version); specular_merge.shader.version_free(specular_merge.shader_version); ssao.blur_shader.version_free(ssao.blur_shader_version); ssao.gather_shader.version_free(ssao.gather_shader_version); diff --git a/servers/rendering/rasterizer_rd/rasterizer_storage_rd.cpp b/servers/rendering/rasterizer_rd/rasterizer_storage_rd.cpp index 6448872610..90dd6af319 100644 --- a/servers/rendering/rasterizer_rd/rasterizer_storage_rd.cpp +++ b/servers/rendering/rasterizer_rd/rasterizer_storage_rd.cpp @@ -7884,7 +7884,12 @@ RasterizerStorageRD::~RasterizerStorageRD() { for (int i = 0; i < DEFAULT_RD_BUFFER_MAX; i++) { RD::get_singleton()->free(mesh_default_rd_buffers[i]); } + giprobe_sdf_shader.version_free(giprobe_sdf_shader_version); + particles_shader.copy_shader.version_free(particles_shader.copy_shader_version); + + RenderingServer::get_singleton()->free(particles_shader.default_material); + RenderingServer::get_singleton()->free(particles_shader.default_shader); RD::get_singleton()->free(default_rd_storage_buffer); diff --git a/servers/rendering_server.cpp b/servers/rendering_server.cpp index 9ad19e4b38..f4b3634d99 100644 --- a/servers/rendering_server.cpp +++ b/servers/rendering_server.cpp @@ -2152,6 +2152,7 @@ void RenderingServer::_bind_methods() { BIND_ENUM_CONSTANT(INSTANCE_MULTIMESH); BIND_ENUM_CONSTANT(INSTANCE_IMMEDIATE); BIND_ENUM_CONSTANT(INSTANCE_PARTICLES); + BIND_ENUM_CONSTANT(INSTANCE_PARTICLES_COLLISION); BIND_ENUM_CONSTANT(INSTANCE_LIGHT); BIND_ENUM_CONSTANT(INSTANCE_REFLECTION_PROBE); BIND_ENUM_CONSTANT(INSTANCE_DECAL); |