Skip to content

Physics Based Controller

Core vehicle physics controller handling movement, forces, collisions, and visual representation for game entities with realistic driving dynamics.


🚗 Core Features

Movement System

FeatureDescriptionKey Properties
AccelerationForward/backward force applicationacceleration, maxSpeedForward/Backward
SteeringDirectional control based on speedsteeringForce, isTurning
BrakingControlled decelerationbrakingForce
Nitro BoostTemporary speed enhancementTimedEffectDriver

Collision System

FeatureDescriptionKey Properties
Bounding BoxCollision detection volumecollision
Collision FlagsSpecial behavior controlnoCollision

Visual System

FeatureDescriptionKey Properties
Sprite ManagementAngle-based sprite selectioncurrentSpriteIndex, sprite
Wheel TracesVisual trail effectstracePoints
Debug RenderingCollision visualizationdisplayData

🏗️ Constructor

constructor(sprite: Sprite, traction: number)

Parameters:

NameTypeDescription
spriteSpriteVisual representation asset
tractionnumberSurface grip coefficient (0-1)

Initial State:

  • Position: (0, 0)
  • Angle: 0°
  • Velocity: (0, 0)
  • All forces reset to zero

🎮 Control Methods

Movement Controls

MethodDescriptionPhysics Impact
accelerateForward()Applies forward thrustIncreases velocity
brake()Slows vehicleApplies brakingForce
applyForce(magnitude)General force applicationDirect velocity change

Steering Controls

MethodDescriptionPhysics Impact
addSteeringForce(value)Adds turning torqueModifies steeringForce
turning(deltaTime)Processes steeringUpdates angle
rotate(angle)Immediate rotationSets angle directly

Special Abilities

enterNitroMode(onRefuel?: () => void)

Nitro Effects:

  1. 2x acceleration boost
  2. 1.5x max speed
  3. Duration: 3 seconds
  4. Cooldown: 5 seconds

📊 Property Details

Physics State

PropertyTypeRangeDescription
positionVec2DWorld coordsCurrent location
velocityVec2DAnyMovement vector
anglenumber0-360°Facing direction

Force Controls

PropertyTypeDescription
accelerationVec2DCurrent force being applied
brakingForcenumberDeceleration magnitude
steeringForcenumberTurning torque

Limits

PropertyTypeDefaultDescription
maxSpeedForwardnumber5.0Forward speed cap
maxSpeedBackwardnumber2.0Reverse speed cap
tractionnumber0.9Surface grip factor

🔍 Getters & Utility Methods

Spatial Queries

MethodReturnsDescription
centerPositionVec2DCenter point of vehicle
getWheelsPosition[Vec2D, Vec2D]Left/right wheel positions
collisionCollisionObjectBounding box data

State Management

MethodDescription
resetToDefaultSpeed()Restores speed limits
resetToDefaultAdhesion()Resets traction
updateCurrentSprite()Updates visual representation

🖥️ Rendering System

Display Pipeline

graph TD
A[Position Update] --> B[Angle Calculation]
B --> C[Sprite Selection]
C --> D[Trace Generation]
D --> E[DisplayData Preparation]

Trace Effects:

  • Persist for 1.5 seconds
  • Fade linearly over time
  • Width scales with speed

⚙️ Physics Formulas

Steering Calculation

const turnRate = (1 - (currentSpeed / maxSpeed)) * steeringForce;
this.angle += turnRate * deltaTime;

Nitro Boost

// During activation:
maxSpeed *= 1.5;
acceleration *= 2.0;
// After duration:
maxSpeed = defaultMaxSpeed;

🏎️ Usage Example

// Create controller
const car = new PhysicsBasedController(raceCarSprite, 0.85);
// Game loop
function update(deltaTime) {
// Player input
if (input.accelerate) car.accelerateForward();
if (input.brake) car.brake();
car.addSteeringForce(input.steer);
// Special ability
if (input.nitro) car.enterNitroMode(refuelCallback);
// Update physics
car.update(deltaTime);
// Render
render(car.displayData);
}

⚠️ Edge Cases

  1. Zero DeltaTime:

    • Skipped in update() to prevent NaN values
  2. Extreme Angles:

    • Normalized to 0-360° range
  3. Negative Speed:

    • Handled in braking calculations

🛠️ Design Considerations

Decoupled Systems

  • Physics separate from rendering
  • Force-based rather than direct position updates
  • Time-based effects system

Tunable Parameters

ParameterAdjustment Effect
tractionSlide vs grip behavior
steeringForceResponsiveness
brakingForceStopping distance

📈 Performance Notes

  1. Trace Management:

    • Automatic pruning of old points
    • Linear fade calculation
  2. Sprite System:

    • Angle-to-index mapping is O(1)
    • No runtime sprite modifications
  3. Collision Optimization:

    • Lazy bounding box calculation
    • Flag-based early outs