End result if done correctly:
Last active
May 30, 2026 22:24
-
-
Save amirrajan/4f48f5d7291efb92554699d578dbe284 to your computer and use it in GitHub Desktop.
DT (Delta Time) Quiz
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
| # 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