Skip to content

Instantly share code, notes, and snippets.

@KonnorRogers
Created May 30, 2026 22:25
Show Gist options
  • Select an option

  • Save KonnorRogers/00947ebf089c337d8f9993dbf015bb1b to your computer and use it in GitHub Desktop.

Select an option

Save KonnorRogers/00947ebf089c337d8f9993dbf015bb1b to your computer and use it in GitHub Desktop.
Amir's quiz to remind me i have no idea how delta time works.
def calc_car dt = 1
target_speed = if state.engine == :high
state.high_speed
else
state.low_speed
end
state.speed *= (0.98 * dt) if steering_at_limit?
if auto_break?
state.speed *= state.auto_break_speed_degredation * dt
else
ds = target_speed - state.speed
state.speed += ds * state.acceleration_deceleration_ratio * dt
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)) * dt
velocity_y = (state.speed * Math.cos(state.angle_r + state.steer_angle_r) * (1.0 - state.drift_percentage_right - state.drift_percentage_left)) * dt
normal_x_right = (state.speed * Math.sin((PI / 2.0 ) - state.angle_r) * state.drift_percentage_right) * dt
normal_y_right = (state.speed * Math.cos((PI / 2.0 ) - state.angle_r) * state.drift_percentage_right * -1.0) * dt
normal_x_left = (state.speed * Math.sin((PI / 2.0 ) - state.angle_r) * state.drift_percentage_left * -1.0) * dt
normal_y_left = (state.speed * Math.cos((PI / 2.0 ) - state.angle_r) * state.drift_percentage_left) * dt
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 * dt
state.drift_percentage_left *= state.momentum_away_from_normal * dt
elsif state.steer_angle_r < 0
state.drift_percentage_right *= state.momentum_away_from_normal * dt
state.drift_percentage_left *= state.momentum_toward_normal * dt
else
state.drift_percentage_right *= state.momentum_decay_out_of_drift * dt
state.drift_percentage_left *= state.momentum_decay_out_of_drift * dt
end
else
state.drift_percentage_right *= state.momentum_decay_out_of_drift * dt
state.drift_percentage_left *= state.momentum_decay_out_of_drift * dt
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 * dt
# steering improves when auto breaking
if auto_break?
steer_speed *= 3.0 * dt
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 * dt
elsif state.steer_angle_r > 0
state.steer_angle_r -= steering_wheel_delta * state.steering_wheel_reset_perc * dt
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