Skip to content

Instantly share code, notes, and snippets.

@amirrajan
Last active May 30, 2026 22:24
Show Gist options
  • Select an option

  • Save amirrajan/4f48f5d7291efb92554699d578dbe284 to your computer and use it in GitHub Desktop.

Select an option

Save amirrajan/4f48f5d7291efb92554699d578dbe284 to your computer and use it in GitHub Desktop.
DT (Delta Time) Quiz

End result if done correctly:

D491FC6E-A5EB-4C5F-9AE9-EAADCCA7F984.MP4
# QUIZ/CHALLENGE: add the multiplcation of dt (delta_time) to the
# correct lines in these three functions to see if you really understand
# the nuances of delta_time
def calc_car dt = 1
target_speed = if state.engine == :high
state.high_speed
else
state.low_speed
end
state.speed *= 0.98 if steering_at_limit?
if auto_break?
state.speed *= state.auto_break_speed_degredation
else
ds = target_speed - state.speed
state.speed += ds * state.acceleration_deceleration_ratio
end
state.speed = state.min_speed if state.speed < state.min_speed
velocity_x = state.speed * Math.sin(state.angle_r + state.steer_angle_r) * (1.0 - state.drift_percentage_right - state.drift_percentage_left)
velocity_y = state.speed * Math.cos(state.angle_r + state.steer_angle_r) * (1.0 - state.drift_percentage_right - state.drift_percentage_left)
normal_x_right = state.speed * Math.sin((PI / 2.0 ) - state.angle_r) * state.drift_percentage_right
normal_y_right = state.speed * Math.cos((PI / 2.0 ) - state.angle_r) * state.drift_percentage_right * -1.0
normal_x_left = state.speed * Math.sin((PI / 2.0 ) - state.angle_r) * state.drift_percentage_left * -1.0
normal_y_left = state.speed * Math.cos((PI / 2.0 ) - state.angle_r) * state.drift_percentage_left
state.x += (velocity_x + normal_x_right + normal_x_left)
state.y += (velocity_y + normal_y_right + normal_y_left)
state.angle_r -= state.steer_angle_r
end
def calc_physics dt = 1
if drift_mode?
if state.steer_angle_r > 0
state.drift_percentage_right *= state.momentum_toward_normal
state.drift_percentage_left *= state.momentum_away_from_normal
elsif state.steer_angle_r < 0
state.drift_percentage_right *= state.momentum_away_from_normal
state.drift_percentage_left *= state.momentum_toward_normal
else
state.drift_percentage_right *= state.momentum_decay_out_of_drift
state.drift_percentage_left *= state.momentum_decay_out_of_drift
end
else
state.drift_percentage_right *= state.momentum_decay_out_of_drift
state.drift_percentage_left *= state.momentum_decay_out_of_drift
end
state.drift_percentage_right = state.drift_minimum if drift_mode? && state.drift_percentage_right < state.drift_minimum
state.drift_percentage_left = state.drift_minimum if drift_mode? && state.drift_percentage_left < state.drift_minimum
state.drift_percentage_right = state.drift_maximum if state.drift_percentage_right > state.drift_maximum
state.drift_percentage_left = state.drift_maximum if state.drift_percentage_left > state.drift_maximum
state.drift_percentage_right = state.drift_percentage_right.round(4)
state.drift_percentage_left = state.drift_percentage_left.round(4)
end
def calc_steering dt = 1
steer_speed = steering_wheel_delta * state.turn_magnitude.abs
# steering improves when auto breaking
if auto_break?
steer_speed *= 3.0
state.auto_break_at = state.clock
end
# outputs.debug << { x: 30, y: 30, text: "steer angle: #{state.steer_angle_r}", r: 255, g: 255, b: 255 }
# outputs.debug << { x: 30, y: 60, text: "steer range: #{state.steering_wheel_range}", r: 255, g: 255, b: 255 }
# outputs.debug << { x: 30, y: 90, text: "steer speed: #{steer_speed}", r: 255, g: 255, b: 255 }
case state.steering
when :right
if state.steer_angle_r > state.steering_wheel_range * -1.0
state.steer_angle_r -= steer_speed
end
when :left
if state.steer_angle_r < state.steering_wheel_range
state.steer_angle_r += steer_speed
end
when :released
if !drift_mode?
if state.steer_angle_r < 0
state.steer_angle_r += steering_wheel_delta * state.steering_wheel_reset_perc
elsif state.steer_angle_r > 0
state.steer_angle_r -= steering_wheel_delta * state.steering_wheel_reset_perc
end
end
end
state.steer_angle_r = state.steer_angle_r.round(4).to_f
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment