Created
May 30, 2026 22:25
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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