// Methods public void Run(float deltaTime) { if (this.vehicleIndex < 0) { return; } if (AIRegionsDS == null) { if (AIRegions == null) { return; } AIRegionsDS = AIRegions.GetDrawingSurface(); } float angleSum = 0f; int agscolor = AIRegionsDS.GetPixel(FloatToInt(Cars[this.vehicleIndex].position.x, eRoundNearest), FloatToInt(Cars[this.vehicleIndex].position.y, eRoundNearest)); int i = 0; for (i = 0; i < 16; i += 1) { if (RegionAngles[i].color == agscolor) { angleSum = RegionAngles[i].angle; break; } } this.targetAngle = angleSum; float dirAngle = Cars[this.vehicleIndex].direction.angle(); float angleBetween = Maths.AnglePiFast(this.targetAngle - Maths.Angle2Pi(dirAngle)); float steeringDT = UISteeringAngle * deltaTime * 1.1f; if (Maths.AbsF(angleBetween) <= Maths.AbsF(steeringDT)) { Cars[this.vehicleIndex].steeringWheelAngle = 0.0f; Cars[this.vehicleIndex].direction.set2(1.0f, 0.0f); Cars[this.vehicleIndex].direction.rotate(this.targetAngle); } else if (angleBetween > 0.0f) { Cars[this.vehicleIndex].steeringWheelAngle = UISteeringAngle; } else if (angleBetween < 0.0f) { Cars[this.vehicleIndex].steeringWheelAngle = -UISteeringAngle; } else { Cars[this.vehicleIndex].steeringWheelAngle = 0.0f; } Cars[this.vehicleIndex].Accelerator = 1.0f; Cars[this.vehicleIndex].Brakes = 0.0f; }
public void run(float deltaTime) { this.position.addScaled(this.velocity, deltaTime); float rot_angle = 0f; if (this.driveVelocityValue >= 0.0f) { rot_angle = this.steering * deltaTime; } else { rot_angle = -this.steering * deltaTime; } this.directionAngle = Maths.Angle2Pi(this.directionAngle + rot_angle); this.direction.rotate(rot_angle); this.processInteraction(deltaTime); float absVelocity = Maths.AbsF(this.driveVelocityValue); float thrustResistance = this.friction * absVelocity + this.brakes; float thrustForce = this.engine * deltaTime; float brakeForce = Maths.MinF(thrustResistance * deltaTime, absVelocity); if (this.driveVelocityValue < 0.0f) { brakeForce = -brakeForce; } this.driveVelocityValue += thrustForce - brakeForce; this.driveVelocity.set(this.direction); this.driveVelocity.scale(this.driveVelocityValue); this.thrustForceValue = thrustForce; this.brakeForceValue = brakeForce; float impactValue = this.impactVelocity.length(); if (impactValue > 0.0f) { impactValue = Maths.MaxF(0.0f, impactValue - (this.friction * impactValue * 10.0f + this.brakes) * deltaTime); this.impactVelocity.truncate(impactValue); } this.velocity.set(this.driveVelocity); this.velocity.add(this.impactVelocity); this.syncCharacter(); }