Skip to content

Commit c6fdd1e

Browse files
committed
Add 'Bike' vehicle physics type
1 parent b646875 commit c6fdd1e

21 files changed

Lines changed: 1435 additions & 240 deletions

data/Prefabs/Cars/Compact.prefab

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@
229229
</Property>
230230
</Object>
231231
</Property>
232-
<Property type="EnumU8" name="m_vehicleType" value="FourWheels"/>
232+
<Property type="EnumU8" name="m_vehicleType" value="Car"/>
233233
<Property type="ObjectPtr" name="m_vehicleConstraintDesc">
234234
<Object class="CarConstraintDesc">
235235
<Property type="String" name="m_name" value="CarConstraintDesc #4"/>
@@ -240,7 +240,7 @@
240240
<Property type="Float" name="m_maxRPM" value="6000"/>
241241
<Property type="Float" name="m_clutchStrength" value="10"/>
242242
<Property type="Object" name="m_front">
243-
<Object class="VehicleAxleDesc">
243+
<Object class="TwoWheeledAxleDesc">
244244
<Property type="String" name="m_name" value=""/>
245245
<Property type="Uint32" name="m_uid" value="2853335957"/>
246246
<Property type="EnumFlagsU16" name="m_objectFlags" value=""/>
@@ -262,7 +262,7 @@
262262
</Object>
263263
</Property>
264264
<Property type="Object" name="m_rear">
265-
<Object class="VehicleAxleDesc">
265+
<Object class="TwoWheeledAxleDesc">
266266
<Property type="String" name="m_name" value=""/>
267267
<Property type="Uint32" name="m_uid" value="892460903"/>
268268
<Property type="EnumFlagsU16" name="m_objectFlags" value=""/>

data/Prefabs/Cars/SUV.prefab

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@
276276
</Property>
277277
</Object>
278278
</Property>
279-
<Property type="EnumU8" name="m_vehicleType" value="FourWheels"/>
279+
<Property type="EnumU8" name="m_vehicleType" value="Car"/>
280280
<Property type="ObjectPtr" name="m_vehicleConstraintDesc">
281281
<Object class="CarConstraintDesc">
282282
<Property type="String" name="m_name" value="CarConstraintDesc #8"/>
@@ -288,7 +288,7 @@
288288
<Property type="Float" name="m_maxRPM" value="8000"/>
289289
<Property type="Float" name="m_clutchStrength" value="13.5"/>
290290
<Property type="Object" name="m_front">
291-
<Object class="VehicleAxleDesc">
291+
<Object class="TwoWheeledAxleDesc">
292292
<Property type="String" name="m_name" value=""/>
293293
<Property type="Uint32" name="m_uid" value="1387965968"/>
294294
<Property type="Uint32" name="m_originalUID" value="0"/>
@@ -311,7 +311,7 @@
311311
</Object>
312312
</Property>
313313
<Property type="Object" name="m_rear">
314-
<Object class="VehicleAxleDesc">
314+
<Object class="TwoWheeledAxleDesc">
315315
<Property type="String" name="m_name" value=""/>
316316
<Property type="Uint32" name="m_uid" value="50493731"/>
317317
<Property type="Uint32" name="m_originalUID" value="0"/>

data/Prefabs/Cars/Scooter.prefab

Lines changed: 865 additions & 0 deletions
Large diffs are not rendered by default.

data/Prefabs/Cars/Sport.prefab

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@
211211
</Property>
212212
</Object>
213213
</Property>
214-
<Property type="EnumU8" name="m_vehicleType" value="FourWheels"/>
214+
<Property type="EnumU8" name="m_vehicleType" value="Car"/>
215215
<Property type="ObjectPtr" name="m_vehicleConstraintDesc">
216216
<Object class="CarConstraintDesc">
217217
<Property type="String" name="m_name" value="CarConstraintDesc #4"/>
@@ -222,7 +222,7 @@
222222
<Property type="Float" name="m_maxRPM" value="10000"/>
223223
<Property type="Float" name="m_clutchStrength" value="50"/>
224224
<Property type="Object" name="m_front">
225-
<Object class="VehicleAxleDesc">
225+
<Object class="TwoWheeledAxleDesc">
226226
<Property type="String" name="m_name" value=""/>
227227
<Property type="Uint32" name="m_uid" value="619880216"/>
228228
<Property type="EnumFlagsU16" name="m_objectFlags" value=""/>
@@ -244,7 +244,7 @@
244244
</Object>
245245
</Property>
246246
<Property type="Object" name="m_rear">
247-
<Object class="VehicleAxleDesc">
247+
<Object class="TwoWheeledAxleDesc">
248248
<Property type="String" name="m_name" value=""/>
249249
<Property type="Uint32" name="m_uid" value="3830806768"/>
250250
<Property type="EnumFlagsU16" name="m_objectFlags" value=""/>
Binary file not shown.
Binary file not shown.
29.8 KB
Binary file not shown.
Binary file not shown.

src/core/Object/Factory.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1648,7 +1648,7 @@ namespace vg::core
16481648
const IClassDesc * Factory::GetClassDescriptor(const char * _className, bool _mustExist) const
16491649
{
16501650
const ClassCRC classCRC = computeCRC64(_className);
1651-
if (const IClassDesc * classDesc = GetClassDescriptorFromCRC(classCRC, _mustExist))
1651+
if (const IClassDesc * classDesc = GetClassDescriptorFromCRC(classCRC, false))
16521652
return classDesc;
16531653

16541654
VG_ASSERT(!_mustExist, "Class \"%s\" has no class descriptor", _className);

src/engine/Component/Physics/Constraint/Vehicle/VehicleComponent.hpp

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -67,38 +67,38 @@ namespace vg::engine
6767
{
6868
super::registerProperties(_desc);
6969

70-
registerPropertyEx(VehicleComponent, m_driveState.m_forward, "Forward", PropertyFlags::Transient);
71-
setPropertyDescription(VehicleComponent, m_driveState.m_forward, "Value between -1 and 1 indicating desired driving direction and amount the gas pedal is pressed");
72-
setPropertyRange(VehicleComponent, m_driveState.m_forward, float2(-1, +1));
70+
registerPropertyEnum(VehicleComponent, physics::VehicleType, m_vehicleType, "Type");
71+
registerPropertyObjectPtrEx(VehicleComponent, m_vehicleConstraintDesc, "Constraints", PropertyFlags::Flatten);
7372

74-
registerPropertyEx(VehicleComponent, m_driveState.m_right, "Steering", PropertyFlags::Transient);
75-
setPropertyDescription(VehicleComponent, m_driveState.m_right, "Value between -1 and 1 indicating desired steering angle (-1= left, 0 = center, 1 = right)");
76-
setPropertyRange(VehicleComponent, m_driveState.m_right, float2(-1, +1));
73+
registerPropertyObject(VehicleComponent, m_slots, "Slots");
7774

78-
registerPropertyEx(VehicleComponent, m_driveState.m_brake, "Brake", PropertyFlags::Transient);
79-
setPropertyDescription(VehicleComponent, m_driveState.m_brake, "Value between 0 and 1 indicating how strong the brake pedal is pressed");
80-
setPropertyRange(VehicleComponent, m_driveState.m_brake, float2(0, +1));
75+
registerPropertyGroupBegin(VehicleComponent, "Debug");
76+
{
77+
registerPropertyEx(VehicleComponent, m_driveState.m_forward, "Forward", PropertyFlags::Transient);
78+
setPropertyDescription(VehicleComponent, m_driveState.m_forward, "Value between -1 and 1 indicating desired driving direction and amount the gas pedal is pressed");
79+
setPropertyRange(VehicleComponent, m_driveState.m_forward, float2(-1, +1));
8180

82-
registerPropertyEx(VehicleComponent, m_driveState.m_handBrake, "Handbrake", PropertyFlags::Transient);
83-
setPropertyDescription(VehicleComponent, m_driveState.m_handBrake, "Value between 0 and 1 indicating how strong the hand brake is pulled");
84-
setPropertyRange(VehicleComponent, m_driveState.m_handBrake, float2(0, +1));
81+
registerPropertyEx(VehicleComponent, m_driveState.m_right, "Steering", PropertyFlags::Transient);
82+
setPropertyDescription(VehicleComponent, m_driveState.m_right, "Value between -1 and 1 indicating desired steering angle (-1= left, 0 = center, 1 = right)");
83+
setPropertyRange(VehicleComponent, m_driveState.m_right, float2(-1, +1));
8584

86-
registerPropertyEx(VehicleComponent, m_speedInKmPerHour, "Velocity", PropertyFlags::Transient | PropertyFlags::ReadOnly);
87-
setPropertyDescription(VehicleComponent, m_speedInKmPerHour, "Current speed in km/h");
85+
registerPropertyEx(VehicleComponent, m_driveState.m_brake, "Brake", PropertyFlags::Transient);
86+
setPropertyDescription(VehicleComponent, m_driveState.m_brake, "Value between 0 and 1 indicating how strong the brake pedal is pressed");
87+
setPropertyRange(VehicleComponent, m_driveState.m_brake, float2(0, +1));
8888

89-
registerPropertyEx(VehicleComponent, m_localVelocity, "Local Velocity", PropertyFlags::Transient | PropertyFlags::ReadOnly);
89+
registerPropertyEx(VehicleComponent, m_driveState.m_handBrake, "Handbrake", PropertyFlags::Transient);
90+
setPropertyDescription(VehicleComponent, m_driveState.m_handBrake, "Value between 0 and 1 indicating how strong the hand brake is pulled");
91+
setPropertyRange(VehicleComponent, m_driveState.m_handBrake, float2(0, +1));
9092

91-
registerPropertyEx(VehicleComponent, m_engineRPM, "RPM", PropertyFlags::Transient | PropertyFlags::ReadOnly);
92-
setPropertyDescription(VehicleComponent, m_engineRPM, "Current engine Rotation Per Minute");
93+
registerPropertyEx(VehicleComponent, m_speedInKmPerHour, "Velocity", PropertyFlags::Transient | PropertyFlags::ReadOnly);
94+
setPropertyDescription(VehicleComponent, m_speedInKmPerHour, "Current speed in km/h");
9395

94-
registerPropertyEx(VehicleComponent, m_currentGear, "Gear", PropertyFlags::Transient | PropertyFlags::ReadOnly);
96+
registerPropertyEx(VehicleComponent, m_localVelocity, "Local Velocity", PropertyFlags::Transient | PropertyFlags::ReadOnly);
9597

96-
registerPropertyObject(VehicleComponent, m_slots, "Slots");
98+
registerPropertyEx(VehicleComponent, m_engineRPM, "RPM", PropertyFlags::Transient | PropertyFlags::ReadOnly);
99+
setPropertyDescription(VehicleComponent, m_engineRPM, "Current engine Rotation Per Minute");
97100

98-
registerPropertyGroupBegin(VehicleComponent, "Contraints");
99-
{
100-
registerPropertyEnum(VehicleComponent, physics::VehicleType, m_vehicleType, "Type");
101-
registerPropertyObjectPtrEx(VehicleComponent, m_vehicleConstraintDesc, "Constraints", PropertyFlags::Flatten);
101+
registerPropertyEx(VehicleComponent, m_currentGear, "Gear", PropertyFlags::Transient | PropertyFlags::ReadOnly);
102102
}
103103
registerPropertyGroupEnd(VehicleComponent);
104104

@@ -158,8 +158,10 @@ namespace vg::engine
158158
//--------------------------------------------------------------------------------------
159159
bool VehicleComponent::createVehicleConstraintDesc()
160160
{
161-
if (nullptr == m_vehicleConstraintDesc)
161+
if (nullptr == m_vehicleConstraintDesc || m_vehicleConstraintDesc->GetVehicleType() != m_vehicleType)
162162
{
163+
VG_SAFE_RELEASE(m_vehicleConstraintDesc);
164+
163165
IFactory * factory = Kernel::getFactory();
164166

165167
switch (m_vehicleType)
@@ -171,6 +173,10 @@ namespace vg::engine
171173
case physics::VehicleType::Car:
172174
m_vehicleConstraintDesc = (physics::IVehicleConstraintDesc *)factory->CreateObject("CarConstraintDesc", "", this);
173175
break;
176+
177+
case physics::VehicleType::Bike:
178+
m_vehicleConstraintDesc = (physics::IVehicleConstraintDesc *)factory->CreateObject("BikeConstraintDesc", "", this);
179+
break;
174180
}
175181

176182
if (m_vehicleConstraintDesc)
@@ -274,15 +280,14 @@ namespace vg::engine
274280
void VehicleComponent::FixedUpdate(const Context & _context)
275281
{
276282
if (m_vehicleConstraint)
277-
m_vehicleConstraint->FixedUpdate(m_driveState);// SetDriverInput
283+
m_vehicleConstraint->FixedUpdate(m_driveState);
278284
}
279285

280286
//--------------------------------------------------------------------------------------
281287
void VehicleComponent::Update(const Context & _context)
282288
{
283289
if (m_vehicleConstraint)
284290
{
285-
m_vehicleConstraint->Update(m_driveState);
286291
IGameObject * go = GetGameObject();
287292

288293
// Update local velocity

0 commit comments

Comments
 (0)