VehicleWheel can now return the surface it's colliding with.
Fixed PR issues.
Update vehicle_body_3d.cpp
Apply suggestions from code review
Co-authored-by: Camille Mohr-Daurat <pouleyKetchoup@gmail.com>
(cherry picked from commit 0c352407d8
)
This commit is contained in:
parent
3e41e8dfa0
commit
285b816f1f
3 changed files with 16 additions and 2 deletions
|
@ -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="Spatial" />
|
||||
<description>
|
||||
Returns the contacting body node if valid in the tree, as [Spatial]. At the moment, [GridMap] is not supported so the node will be always of type [PhysicsBody].
|
||||
Returns [code]null[/code] if the wheel is not in contact with a surface, or the contact body is not a [PhysicsBody].
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_rpm" qualifiers="const">
|
||||
<return type="float" />
|
||||
<description>
|
||||
|
|
|
@ -217,6 +217,10 @@ bool VehicleWheel::is_in_contact() const {
|
|||
return m_raycastInfo.m_isInContact;
|
||||
}
|
||||
|
||||
Spatial *VehicleWheel::get_contact_body() const {
|
||||
return m_raycastInfo.m_groundObject;
|
||||
}
|
||||
|
||||
void VehicleWheel::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_radius", "length"), &VehicleWheel::set_radius);
|
||||
ClassDB::bind_method(D_METHOD("get_radius"), &VehicleWheel::get_radius);
|
||||
|
@ -249,6 +253,7 @@ void VehicleWheel::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("get_friction_slip"), &VehicleWheel::get_friction_slip);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("is_in_contact"), &VehicleWheel::is_in_contact);
|
||||
ClassDB::bind_method(D_METHOD("get_contact_body"), &VehicleWheel::get_contact_body);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_roll_influence", "roll_influence"), &VehicleWheel::set_roll_influence);
|
||||
ClassDB::bind_method(D_METHOD("get_roll_influence"), &VehicleWheel::get_roll_influence);
|
||||
|
@ -357,6 +362,7 @@ VehicleWheel::VehicleWheel() {
|
|||
m_suspensionRelativeVelocity = 0;
|
||||
m_clippedInvContactDotSuspension = 1.0;
|
||||
m_raycastInfo.m_isInContact = false;
|
||||
m_raycastInfo.m_groundObject = nullptr;
|
||||
m_raycastInfo.m_suspensionLength = 0.0;
|
||||
|
||||
body = nullptr;
|
||||
|
@ -423,9 +429,8 @@ real_t VehicleBody::_ray_cast(int p_idx, PhysicsDirectBodyState *s) {
|
|||
|
||||
PhysicsDirectSpaceState *ss = s->get_space_state();
|
||||
|
||||
bool col = ss->intersect_ray(source, target, rr, exclude, get_collision_mask());
|
||||
|
||||
wheel.m_raycastInfo.m_groundObject = nullptr;
|
||||
bool col = ss->intersect_ray(source, target, rr, exclude, get_collision_mask());
|
||||
|
||||
if (col) {
|
||||
param = source.distance_to(rr.position) / source.distance_to(target);
|
||||
|
|
|
@ -129,6 +129,8 @@ public:
|
|||
|
||||
bool is_in_contact() const;
|
||||
|
||||
Spatial *get_contact_body() const;
|
||||
|
||||
void set_roll_influence(float p_value);
|
||||
float get_roll_influence() const;
|
||||
|
||||
|
|
Loading…
Reference in a new issue