mirror of
https://github.com/godotengine/godot.git
synced 2024-11-27 09:16:35 +08:00
Merge pull request #55723 from rydergaming/get-colliding-body-vehiclewheel
VehicleWheel can now return the surface it's colliding with.
This commit is contained in:
commit
f675b6b623
@ -11,6 +11,13 @@
|
||||
<link title="3D Truck Town Demo">https://godotengine.org/asset-library/asset/524</link>
|
||||
</tutorials>
|
||||
<methods>
|
||||
<method name="get_contact_body" qualifiers="const">
|
||||
<return type="Node3D" />
|
||||
<description>
|
||||
Returns the contacting body node if valid in the tree, as [Node3D]. At the moment, [GridMap] is not supported so the node will be always of type [PhysicsBody3D].
|
||||
Returns [code]null[/code] if the wheel is not in contact with a surface, or the contact body is not a [PhysicsBody3D].
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_rpm" qualifiers="const">
|
||||
<return type="float" />
|
||||
<description>
|
||||
|
@ -225,6 +225,10 @@ bool VehicleWheel3D::is_in_contact() const {
|
||||
return m_raycastInfo.m_isInContact;
|
||||
}
|
||||
|
||||
Node3D *VehicleWheel3D::get_contact_body() const {
|
||||
return m_raycastInfo.m_groundObject;
|
||||
}
|
||||
|
||||
void VehicleWheel3D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_radius", "length"), &VehicleWheel3D::set_radius);
|
||||
ClassDB::bind_method(D_METHOD("get_radius"), &VehicleWheel3D::get_radius);
|
||||
@ -257,6 +261,7 @@ void VehicleWheel3D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_friction_slip"), &VehicleWheel3D::get_friction_slip);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("is_in_contact"), &VehicleWheel3D::is_in_contact);
|
||||
ClassDB::bind_method(D_METHOD("get_contact_body"), &VehicleWheel3D::get_contact_body);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_roll_influence", "roll_influence"), &VehicleWheel3D::set_roll_influence);
|
||||
ClassDB::bind_method(D_METHOD("get_roll_influence"), &VehicleWheel3D::get_roll_influence);
|
||||
@ -413,9 +418,8 @@ real_t VehicleBody3D::_ray_cast(int p_idx, PhysicsDirectBodyState3D *s) {
|
||||
ray_params.exclude = exclude;
|
||||
ray_params.collision_mask = get_collision_mask();
|
||||
|
||||
bool col = ss->intersect_ray(ray_params, rr);
|
||||
|
||||
wheel.m_raycastInfo.m_groundObject = nullptr;
|
||||
bool col = ss->intersect_ray(ray_params, rr);
|
||||
|
||||
if (col) {
|
||||
param = source.distance_to(rr.position) / source.distance_to(target);
|
||||
|
@ -129,6 +129,8 @@ public:
|
||||
|
||||
bool is_in_contact() const;
|
||||
|
||||
Node3D *get_contact_body() const;
|
||||
|
||||
void set_roll_influence(real_t p_value);
|
||||
real_t get_roll_influence() const;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user