Help? - All Four Tires Turn Left or Right
by J L · in Torque Game Engine · 12/12/2009 (9:09 pm) · 7 replies
Ok, i put a vehicle model in game, set up all my nodes according to 3D Game Programming All In One. hub0, hub1, hub2, hub3, eye, cam, mount0, and mount1. My problem is that all four tires are wanting to turn left or right. the car moves and such but as you stated all four tires want to steer. I did nothing except change the model name to buggy.dts
car.cs
car.cs
//-----------------------------------------------------------------------------
// Torque Game Engine
// Copyright (C) GarageGames.com, Inc.
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Information extacted from the shape.
//
// Wheel Sequences
// spring# Wheel spring motion: time 0 = wheel fully extended,
// the hub must be displaced, but not directly animated
// as it will be rotated in code.
// Other Sequences
// steering Wheel steering: time 0 = full right, 0.5 = center
// breakLight Break light, time 0 = off, 1 = breaking
//
// Wheel Nodes
// hub# Wheel hub, the hub must be in it's upper position
// from which the springs are mounted.
//
// The steering and animation sequences are optional.
// The center of the shape acts as the center of mass for the car.
//-----------------------------------------------------------------------------
datablock AudioProfile(buggyEngineSound)
{
filename = "~/data/sound/vehicles/buggy/engine_idle.wav";
description = AudioClosestLooping3d;
preload = true;
};
datablock ParticleData(TireParticle)
{
textureName = "~/data/shapes/buggy/dustParticle";
dragCoefficient = 2.0;
gravityCoefficient = -0.1;
inheritedVelFactor = 0.1;
constantAcceleration = 0.0;
lifetimeMS = 1000;
lifetimeVarianceMS = 400;
colors[0] = "0.46 0.36 0.26 1.0";
colors[1] = "0.46 0.46 0.36 0.0";
sizes[0] = 1.0;
sizes[1] = 4.0;
};
datablock ParticleEmitterData(TireEmitter)
{
ejectionPeriodMS = 20;
periodVarianceMS = 10;
ejectionVelocity = 1;
velocityVariance = 1.0;
ejectionOffset = 0.0;
thetaMin = 0;
thetaMax = 60;
phiReferenceVel = 0;
phiVariance = 360;
overrideAdvance = false;
particles = "TireParticle";
};
//----------------------------------------------------------------------------
datablock WheeledVehicleTire(DefaultCarTire)
{
// Tires act as springs and generate lateral and longitudinal
// forces to move the vehicle. These distortion/spring forces
// are what convert wheel angular velocity into forces that
// act on the rigid body.
shapeFile = "~/data/shapes/buggy/wheel.dts";
staticFriction = 4.2;
kineticFriction = 3.15;
// Spring that generates lateral tire forces
lateralForce = 18000;
lateralDamping = 6000;
lateralRelaxation = 1;
// Spring that generates longitudinal tire forces
longitudinalForce = 18000;
longitudinalDamping = 4000;
longitudinalRelaxation = 1;
};
datablock WheeledVehicleSpring(DefaultCarSpring)
{
// Wheel suspension properties
length = 0.85; // Suspension travel
force = 2800; // Spring force
damping = 3600; // Spring damping
antiSwayForce = 3; // Lateral anti-sway force
};
datablock WheeledVehicleData(DefaultCar)
{
category = "Vehicles";
shapeFile = "~/data/shapes/buggy/buggy.dts";
emap = true;
maxDamage = 1.0;
destroyedLevel = 0.5;
maxSteeringAngle = 0.385; // Maximum steering angle, should match animation
tireEmitter = TireEmitter; // All the tires use the same dust emitter
// 3rd person camera settings
cameraRoll = true; // Roll the camera with the vehicle
cameraMaxDist = 4.8; // Far distance from vehicle
cameraOffset = 1.5; // Vertical offset from camera mount point
cameraLag = 0.26; // Velocity lag of camera
cameraDecay = 1.25; // Decay per sec. rate of velocity lag
// Rigid Body
mass = 380;
massCenter = "0 -0.2 0"; // Center of mass for rigid body
massBox = "0 0 0"; // Size of box used for moment of inertia,
// if zero it defaults to object bounding box
drag = 0.6; // Drag coefficient
bodyFriction = 0.6;
bodyRestitution = 0.4;
minImpactSpeed = 5; // Impacts over this invoke the script callback
softImpactSpeed = 5; // Play SoftImpact Sound
hardImpactSpeed = 15; // Play HardImpact Sound
integration = 8; // Physics integration: TickSec/Rate
collisionTol = 0.1; // Collision distance tolerance
contactTol = 0.1; // Contact velocity tolerance
// Engine
engineTorque = 3300; // Engine power
engineBrake = 600; // Braking when throttle is 0
brakeTorque = 8000; // When brakes are applied
maxWheelSpeed = 50; // Engine scale by current speed / max speed
// Energy
maxEnergy = 100;
jetForce = 3000;
minJetEnergy = 30;
jetEnergyDrain = 2;
// Sounds
// jetSound = ScoutThrustSound;
// engineSound = BuggyEngineSound;
// squealSound = ScoutSquealSound;
// softImpactSound = SoftImpactSound;
// hardImpactSound = HardImpactSound;
// wheelImpactSound = WheelImpactSound;
// explosion = VehicleExplosion;
};
//-----------------------------------------------------------------------------
function WheeledVehicleData::create(%block)
{
%obj = new WheeledVehicle() {
dataBlock = %block;
};
return(%obj);
}
//-----------------------------------------------------------------------------
function WheeledVehicleData::onAdd(%this,%obj)
{
// Setup the car with some defaults tires & springs
for (%i = %obj.getWheelCount() - 1; %i >= 0; %i--) {
%obj.setWheelTire(%i,DefaultCarTire);
%obj.setWheelSpring(%i,DefaultCarSpring);
%obj.setWheelPowered(%i,false);
}
// Steer front tires
%obj.setWheelSteering(0,1);
%obj.setWheelSteering(1,1);
// Only power the two rear wheels...
%obj.setWheelPowered(2,true);
%obj.setWheelPowered(3,true);
}
function WheeledVehicleData::onCollision(%this,%obj,%col,%vec,%speed)
{
// Collision with other objects, including items
}About the author
#2
12/13/2009 (11:46 pm)
For future people. It appears that i had my hubs setup in the wrong places on my model.
#3
12/14/2009 (8:33 am)
I'm glad you got this working. I had never heard of this problem before so couldn't help you. (seems most others haven't eather)
#4
12/16/2009 (6:15 pm)
Can you give more details? What do you mean exactly by "...hubs setup in the wrong places..."?
#5
12/16/2009 (7:59 pm)
You can adjust the wheels via script like so:// Tire Steering ////REF: 4WD Steering. Rear Wheels set to countersteer using "-1" %obj.setWheelSteering(0,1); //Front Left Tire %obj.setWheelSteering(1,1); //Front Right Tire %obj.setWheelSteering(2,-1); //Rear Left Tire %obj.setWheelSteering(3,-1); //Rear Right Tire // Drivetrain ////REF: 4WD drivetrain %obj.setWheelPowered(0,true); //Front Left Tire %obj.setWheelPowered(1,true); //Front Right Tire %obj.setWheelPowered(2,true); //Rear Left Tire %obj.setWheelPowered(3,true); //Rear Right Tire
#6
12/16/2009 (8:01 pm)
hub0 should be driver side front, then working clockwise name all the way through 3 hub0=driver front, hub1=passenger front, hub2=passenger rear, hub3=driver rear
#7
To expand on this (as some people drive from the wrong side of the car...hehe, kidding) The drivers side is the Left side.
12/17/2009 (5:30 pm)
Quote:hub0 should be driver side front, then working clockwise name all the way through 3 hub0=driver front, hub1=passenger front, hub2=passenger rear, hub3=driver rear
To expand on this (as some people drive from the wrong side of the car...hehe, kidding) The drivers side is the Left side.
Torque Owner J L
Psycho Hamster Games