Expose shape property for shape query parameters classes
Co-authored-by: PouleyKetchoupp <pouleyketchoup@gmail.com>
This commit is contained in:
parent
b92477d77e
commit
da3fbc0296
|
@ -9,15 +9,6 @@
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<methods>
|
<methods>
|
||||||
<method name="set_shape">
|
|
||||||
<return type="void">
|
|
||||||
</return>
|
|
||||||
<argument index="0" name="shape" type="Resource">
|
|
||||||
</argument>
|
|
||||||
<description>
|
|
||||||
Sets the [Shape2D] that will be used for collision/intersection queries.
|
|
||||||
</description>
|
|
||||||
</method>
|
|
||||||
</methods>
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
<member name="collide_with_areas" type="bool" setter="set_collide_with_areas" getter="is_collide_with_areas_enabled" default="false">
|
<member name="collide_with_areas" type="bool" setter="set_collide_with_areas" getter="is_collide_with_areas_enabled" default="false">
|
||||||
|
@ -38,8 +29,24 @@
|
||||||
<member name="motion" type="Vector2" setter="set_motion" getter="get_motion" default="Vector2( 0, 0 )">
|
<member name="motion" type="Vector2" setter="set_motion" getter="get_motion" default="Vector2( 0, 0 )">
|
||||||
The motion of the shape being queried for.
|
The motion of the shape being queried for.
|
||||||
</member>
|
</member>
|
||||||
|
<member name="shape" type="Resource" setter="set_shape" getter="get_shape">
|
||||||
|
The [Shape2D] that will be used for collision/intersection queries. This stores the actual reference which avoids the shape to be released while being used for queries, so always prefer using this over [member shape_rid].
|
||||||
|
</member>
|
||||||
<member name="shape_rid" type="RID" setter="set_shape_rid" getter="get_shape_rid">
|
<member name="shape_rid" type="RID" setter="set_shape_rid" getter="get_shape_rid">
|
||||||
The queried shape's [RID]. See also [method set_shape].
|
The queried shape's [RID] that will be used for collision/intersection queries. Use this over [member shape] if you want to optimize for performance using the Servers API:
|
||||||
|
[codeblock]
|
||||||
|
var shape_rid = PhysicsServer2D.circle_shape_create()
|
||||||
|
var radius = 64
|
||||||
|
PhysicsServer2D.shape_set_data(shape_rid, radius)
|
||||||
|
|
||||||
|
var params = PhysicsShapeQueryParameters2D.new()
|
||||||
|
params.shape_rid = shape_rid
|
||||||
|
|
||||||
|
# Execute physics queries here...
|
||||||
|
|
||||||
|
# Release the shape when done with physics queries.
|
||||||
|
PhysicsServer2D.free_rid(shape_rid)
|
||||||
|
[/codeblock]
|
||||||
</member>
|
</member>
|
||||||
<member name="transform" type="Transform2D" setter="set_transform" getter="get_transform" default="Transform2D( 1, 0, 0, 1, 0, 0 )">
|
<member name="transform" type="Transform2D" setter="set_transform" getter="get_transform" default="Transform2D( 1, 0, 0, 1, 0, 0 )">
|
||||||
The queried shape's transform matrix.
|
The queried shape's transform matrix.
|
||||||
|
|
|
@ -9,15 +9,6 @@
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<methods>
|
<methods>
|
||||||
<method name="set_shape">
|
|
||||||
<return type="void">
|
|
||||||
</return>
|
|
||||||
<argument index="0" name="shape" type="Resource">
|
|
||||||
</argument>
|
|
||||||
<description>
|
|
||||||
Sets the [Shape3D] that will be used for collision/intersection queries.
|
|
||||||
</description>
|
|
||||||
</method>
|
|
||||||
</methods>
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
<member name="collide_with_areas" type="bool" setter="set_collide_with_areas" getter="is_collide_with_areas_enabled" default="false">
|
<member name="collide_with_areas" type="bool" setter="set_collide_with_areas" getter="is_collide_with_areas_enabled" default="false">
|
||||||
|
@ -35,8 +26,24 @@
|
||||||
<member name="margin" type="float" setter="set_margin" getter="get_margin" default="0.0">
|
<member name="margin" type="float" setter="set_margin" getter="get_margin" default="0.0">
|
||||||
The collision margin for the shape.
|
The collision margin for the shape.
|
||||||
</member>
|
</member>
|
||||||
|
<member name="shape" type="Resource" setter="set_shape" getter="get_shape">
|
||||||
|
The [Shape3D] that will be used for collision/intersection queries. This stores the actual reference which avoids the shape to be released while being used for queries, so always prefer using this over [member shape_rid].
|
||||||
|
</member>
|
||||||
<member name="shape_rid" type="RID" setter="set_shape_rid" getter="get_shape_rid">
|
<member name="shape_rid" type="RID" setter="set_shape_rid" getter="get_shape_rid">
|
||||||
The queried shape's [RID]. See also [method set_shape].
|
The queried shape's [RID] that will be used for collision/intersection queries. Use this over [member shape] if you want to optimize for performance using the Servers API:
|
||||||
|
[codeblock]
|
||||||
|
var shape_rid = PhysicsServer3D.shape_create(PhysicsServer3D.SHAPE_SPHERE)
|
||||||
|
var radius = 2.0
|
||||||
|
PhysicsServer3D.shape_set_data(shape_rid, radius)
|
||||||
|
|
||||||
|
var params = PhysicsShapeQueryParameters3D.new()
|
||||||
|
params.shape_rid = shape_rid
|
||||||
|
|
||||||
|
# Execute physics queries here...
|
||||||
|
|
||||||
|
# Release the shape when done with physics queries.
|
||||||
|
PhysicsServer3D.free_rid(shape_rid)
|
||||||
|
[/codeblock]
|
||||||
</member>
|
</member>
|
||||||
<member name="transform" type="Transform" setter="set_transform" getter="get_transform" default="Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )">
|
<member name="transform" type="Transform" setter="set_transform" getter="get_transform" default="Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )">
|
||||||
The queried shape's transform matrix.
|
The queried shape's transform matrix.
|
||||||
|
|
|
@ -132,13 +132,21 @@ PhysicsDirectBodyState2D::PhysicsDirectBodyState2D() {}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////
|
||||||
|
|
||||||
void PhysicsShapeQueryParameters2D::set_shape(const RES &p_shape) {
|
void PhysicsShapeQueryParameters2D::set_shape(const RES &p_shape_ref) {
|
||||||
ERR_FAIL_COND(p_shape.is_null());
|
ERR_FAIL_COND(p_shape_ref.is_null());
|
||||||
shape = p_shape->get_rid();
|
shape_ref = p_shape_ref;
|
||||||
|
shape = p_shape_ref->get_rid();
|
||||||
|
}
|
||||||
|
|
||||||
|
RES PhysicsShapeQueryParameters2D::get_shape() const {
|
||||||
|
return shape_ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicsShapeQueryParameters2D::set_shape_rid(const RID &p_shape) {
|
void PhysicsShapeQueryParameters2D::set_shape_rid(const RID &p_shape) {
|
||||||
shape = p_shape;
|
if (shape != p_shape) {
|
||||||
|
shape_ref = RES();
|
||||||
|
shape = p_shape;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RID PhysicsShapeQueryParameters2D::get_shape_rid() const {
|
RID PhysicsShapeQueryParameters2D::get_shape_rid() const {
|
||||||
|
@ -212,6 +220,7 @@ bool PhysicsShapeQueryParameters2D::is_collide_with_areas_enabled() const {
|
||||||
|
|
||||||
void PhysicsShapeQueryParameters2D::_bind_methods() {
|
void PhysicsShapeQueryParameters2D::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_shape", "shape"), &PhysicsShapeQueryParameters2D::set_shape);
|
ClassDB::bind_method(D_METHOD("set_shape", "shape"), &PhysicsShapeQueryParameters2D::set_shape);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_shape"), &PhysicsShapeQueryParameters2D::get_shape);
|
||||||
ClassDB::bind_method(D_METHOD("set_shape_rid", "shape"), &PhysicsShapeQueryParameters2D::set_shape_rid);
|
ClassDB::bind_method(D_METHOD("set_shape_rid", "shape"), &PhysicsShapeQueryParameters2D::set_shape_rid);
|
||||||
ClassDB::bind_method(D_METHOD("get_shape_rid"), &PhysicsShapeQueryParameters2D::get_shape_rid);
|
ClassDB::bind_method(D_METHOD("get_shape_rid"), &PhysicsShapeQueryParameters2D::get_shape_rid);
|
||||||
|
|
||||||
|
@ -240,7 +249,7 @@ void PhysicsShapeQueryParameters2D::_bind_methods() {
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude", PROPERTY_HINT_NONE, itos(Variant::_RID) + ":"), "set_exclude", "get_exclude");
|
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude", PROPERTY_HINT_NONE, itos(Variant::_RID) + ":"), "set_exclude", "get_exclude");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "margin", PROPERTY_HINT_RANGE, "0,100,0.01"), "set_margin", "get_margin");
|
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "margin", PROPERTY_HINT_RANGE, "0,100,0.01"), "set_margin", "get_margin");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "motion"), "set_motion", "get_motion");
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "motion"), "set_motion", "get_motion");
|
||||||
//ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "shape", PROPERTY_HINT_RESOURCE_TYPE, "Shape2D"), "set_shape", ""); // FIXME: Lacks a getter
|
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "shape", PROPERTY_HINT_RESOURCE_TYPE, "Shape2D"), "set_shape", "get_shape");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::_RID, "shape_rid"), "set_shape_rid", "get_shape_rid");
|
ADD_PROPERTY(PropertyInfo(Variant::_RID, "shape_rid"), "set_shape_rid", "get_shape_rid");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "transform"), "set_transform", "get_transform");
|
ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "transform"), "set_transform", "get_transform");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_bodies"), "set_collide_with_bodies", "is_collide_with_bodies_enabled");
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_bodies"), "set_collide_with_bodies", "is_collide_with_bodies_enabled");
|
||||||
|
|
|
@ -98,6 +98,8 @@ class PhysicsShapeQueryResult2D;
|
||||||
class PhysicsShapeQueryParameters2D : public Reference {
|
class PhysicsShapeQueryParameters2D : public Reference {
|
||||||
GDCLASS(PhysicsShapeQueryParameters2D, Reference);
|
GDCLASS(PhysicsShapeQueryParameters2D, Reference);
|
||||||
friend class PhysicsDirectSpaceState2D;
|
friend class PhysicsDirectSpaceState2D;
|
||||||
|
|
||||||
|
RES shape_ref;
|
||||||
RID shape;
|
RID shape;
|
||||||
Transform2D transform;
|
Transform2D transform;
|
||||||
Vector2 motion;
|
Vector2 motion;
|
||||||
|
@ -112,7 +114,8 @@ protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void set_shape(const RES &p_shape);
|
void set_shape(const RES &p_shape_ref);
|
||||||
|
RES get_shape() const;
|
||||||
void set_shape_rid(const RID &p_shape);
|
void set_shape_rid(const RID &p_shape);
|
||||||
RID get_shape_rid() const;
|
RID get_shape_rid() const;
|
||||||
|
|
||||||
|
|
|
@ -136,13 +136,21 @@ PhysicsDirectBodyState3D::PhysicsDirectBodyState3D() {}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////
|
||||||
|
|
||||||
void PhysicsShapeQueryParameters3D::set_shape(const RES &p_shape) {
|
void PhysicsShapeQueryParameters3D::set_shape(const RES &p_shape_ref) {
|
||||||
ERR_FAIL_COND(p_shape.is_null());
|
ERR_FAIL_COND(p_shape_ref.is_null());
|
||||||
shape = p_shape->get_rid();
|
shape_ref = p_shape_ref;
|
||||||
|
shape = p_shape_ref->get_rid();
|
||||||
|
}
|
||||||
|
|
||||||
|
RES PhysicsShapeQueryParameters3D::get_shape() const {
|
||||||
|
return shape_ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicsShapeQueryParameters3D::set_shape_rid(const RID &p_shape) {
|
void PhysicsShapeQueryParameters3D::set_shape_rid(const RID &p_shape) {
|
||||||
shape = p_shape;
|
if (shape != p_shape) {
|
||||||
|
shape_ref = RES();
|
||||||
|
shape = p_shape;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RID PhysicsShapeQueryParameters3D::get_shape_rid() const {
|
RID PhysicsShapeQueryParameters3D::get_shape_rid() const {
|
||||||
|
@ -208,6 +216,7 @@ bool PhysicsShapeQueryParameters3D::is_collide_with_areas_enabled() const {
|
||||||
|
|
||||||
void PhysicsShapeQueryParameters3D::_bind_methods() {
|
void PhysicsShapeQueryParameters3D::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_shape", "shape"), &PhysicsShapeQueryParameters3D::set_shape);
|
ClassDB::bind_method(D_METHOD("set_shape", "shape"), &PhysicsShapeQueryParameters3D::set_shape);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_shape"), &PhysicsShapeQueryParameters3D::get_shape);
|
||||||
ClassDB::bind_method(D_METHOD("set_shape_rid", "shape"), &PhysicsShapeQueryParameters3D::set_shape_rid);
|
ClassDB::bind_method(D_METHOD("set_shape_rid", "shape"), &PhysicsShapeQueryParameters3D::set_shape_rid);
|
||||||
ClassDB::bind_method(D_METHOD("get_shape_rid"), &PhysicsShapeQueryParameters3D::get_shape_rid);
|
ClassDB::bind_method(D_METHOD("get_shape_rid"), &PhysicsShapeQueryParameters3D::get_shape_rid);
|
||||||
|
|
||||||
|
@ -232,7 +241,7 @@ void PhysicsShapeQueryParameters3D::_bind_methods() {
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask");
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude", PROPERTY_HINT_NONE, itos(Variant::_RID) + ":"), "set_exclude", "get_exclude");
|
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude", PROPERTY_HINT_NONE, itos(Variant::_RID) + ":"), "set_exclude", "get_exclude");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "margin", PROPERTY_HINT_RANGE, "0,100,0.01"), "set_margin", "get_margin");
|
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "margin", PROPERTY_HINT_RANGE, "0,100,0.01"), "set_margin", "get_margin");
|
||||||
//ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "shape", PROPERTY_HINT_RESOURCE_TYPE, "Shape2D"), "set_shape", ""); // FIXME: Lacks a getter
|
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "shape", PROPERTY_HINT_RESOURCE_TYPE, "Shape3D"), "set_shape", "get_shape");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::_RID, "shape_rid"), "set_shape_rid", "get_shape_rid");
|
ADD_PROPERTY(PropertyInfo(Variant::_RID, "shape_rid"), "set_shape_rid", "get_shape_rid");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM, "transform"), "set_transform", "get_transform");
|
ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM, "transform"), "set_transform", "get_transform");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_bodies"), "set_collide_with_bodies", "is_collide_with_bodies_enabled");
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with_bodies"), "set_collide_with_bodies", "is_collide_with_bodies_enabled");
|
||||||
|
|
|
@ -100,6 +100,7 @@ class PhysicsShapeQueryParameters3D : public Reference {
|
||||||
GDCLASS(PhysicsShapeQueryParameters3D, Reference);
|
GDCLASS(PhysicsShapeQueryParameters3D, Reference);
|
||||||
friend class PhysicsDirectSpaceState3D;
|
friend class PhysicsDirectSpaceState3D;
|
||||||
|
|
||||||
|
RES shape_ref;
|
||||||
RID shape;
|
RID shape;
|
||||||
Transform transform;
|
Transform transform;
|
||||||
float margin;
|
float margin;
|
||||||
|
@ -113,7 +114,8 @@ protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void set_shape(const RES &p_shape);
|
void set_shape(const RES &p_shape_ref);
|
||||||
|
RES get_shape() const;
|
||||||
void set_shape_rid(const RID &p_shape);
|
void set_shape_rid(const RID &p_shape);
|
||||||
RID get_shape_rid() const;
|
RID get_shape_rid() const;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue