add basic engine simulation + working gauge
This commit is contained in:
@@ -12,6 +12,12 @@ dt = 0
|
||||
|
||||
player_pos = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)
|
||||
|
||||
# Text Setup
|
||||
pygame.font.init()
|
||||
font = pygame.font.SysFont(None, 64)
|
||||
|
||||
|
||||
# Gauge Setup
|
||||
rpm_pos = pygame.Vector2(screen.get_width() * 0.25, screen.get_height() / 2)
|
||||
spd_pos = pygame.Vector2(screen.get_width() * 0.75, screen.get_height() / 2)
|
||||
|
||||
@@ -20,7 +26,7 @@ gauge_radius = screen.get_height() / 5
|
||||
# Angle for gauge
|
||||
angle_rad = math.radians(145)
|
||||
|
||||
needle_color = "black"
|
||||
needle_color = "white"
|
||||
needle_width = 4
|
||||
tip_radius = needle_width
|
||||
|
||||
@@ -29,29 +35,50 @@ offset_vector = pygame.Vector2(
|
||||
math.sin(angle_rad) * gauge_radius
|
||||
)
|
||||
|
||||
e = engine()
|
||||
e = Engine()
|
||||
throttle = 0
|
||||
|
||||
def map_value_to_angle(value, min_val, max_val):
|
||||
clamped = max(min_val, min(value, max_val)) # Can change this later
|
||||
return math.radians(150 + 270 * (clamped - min_val) / (max_val - min_val))
|
||||
|
||||
while running:
|
||||
mX, mY = pygame.mouse.get_pos()
|
||||
# poll for events
|
||||
# pygame.QUIT event means the user clicked X to close your window
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.KEYDOWN:
|
||||
if (pygame.key.name(event.key) == 'v'):
|
||||
if e.ignition:
|
||||
e.ignition = False
|
||||
else:
|
||||
e.start(dt)
|
||||
if event.type == pygame.QUIT:
|
||||
running = False
|
||||
|
||||
# fill the screen with a color to wipe away anything from last frame
|
||||
screen.fill("white")
|
||||
|
||||
# RPM
|
||||
# Min = 0 at 45 degrees
|
||||
# Max = 8 at 315 degrees
|
||||
pygame.draw.circle(screen, "red", rpm_pos, gauge_radius)
|
||||
rpm_tip = rpm_pos + offset_vector
|
||||
pygame.draw.line(screen, needle_color, rpm_pos, rpm_tip, needle_width)
|
||||
pygame.draw.circle(screen, needle_color, rpm_tip, tip_radius)
|
||||
rpm_text = font.render(f"RPM: {int(e.rpm)}", True, (0, 0, 0))
|
||||
rpm_rect = rpm_text.get_rect(center=(screen.get_width() // 2, screen.get_height() // 4))
|
||||
screen.blit(rpm_text, rpm_rect)
|
||||
|
||||
# Trans Speed
|
||||
# Min = 0 at 45 degrees
|
||||
# Max = 160 at 315 degrees
|
||||
rpm_text = font.render(f"Torque: {int(e.instant_torque)}", True, (0, 0, 0))
|
||||
rpm_rect = rpm_text.get_rect(center=(screen.get_width() // 2, screen.get_height() // 4 +100))
|
||||
screen.blit(rpm_text, rpm_rect)
|
||||
|
||||
rpm_angle = map_value_to_angle(e.rpm, 0, 8000)
|
||||
|
||||
# RPM Gauge
|
||||
speed_angle = map_value_to_angle(e.wheel_speed, 0, 160)
|
||||
rpm_vector = pygame.Vector2(math.cos(rpm_angle), math.sin(rpm_angle)) * gauge_radius
|
||||
pygame.draw.circle(screen, "black", rpm_pos, gauge_radius)
|
||||
pygame.draw.line(screen, needle_color, rpm_pos, rpm_pos + rpm_vector, needle_width)
|
||||
|
||||
|
||||
# Trans Gauge
|
||||
|
||||
speed_vector = pygame.Vector2(math.cos(speed_angle), math.sin(speed_angle)) * gauge_radius
|
||||
pygame.draw.circle(screen, "red", spd_pos, gauge_radius)
|
||||
spd_tip = spd_pos + offset_vector
|
||||
pygame.draw.line(screen, needle_color, spd_pos, spd_tip, needle_width)
|
||||
@@ -61,13 +88,20 @@ while running:
|
||||
|
||||
keys = pygame.key.get_pressed()
|
||||
if keys[pygame.K_w]:
|
||||
player_pos.y -= 300 * dt
|
||||
e.rpm += 600 * dt
|
||||
if keys[pygame.K_s]:
|
||||
player_pos.y += 300 * dt
|
||||
e.rpm -= 600 * dt
|
||||
if keys[pygame.K_a]:
|
||||
player_pos.x -= 300 * dt
|
||||
if keys[pygame.K_d]:
|
||||
player_pos.x += 300 * dt
|
||||
if keys[pygame.K_r]:
|
||||
e.rpm = e.idle_rpm
|
||||
|
||||
# Throttle (Using mouse pos)
|
||||
throttle = 1 - (mY / screen.get_height())
|
||||
#print(throttle)
|
||||
|
||||
|
||||
# flip() the display to put your work on screen
|
||||
pygame.display.flip()
|
||||
@@ -76,5 +110,6 @@ while running:
|
||||
# dt is delta time in seconds since last frame, used for framerate-
|
||||
# independent physics.
|
||||
dt = clock.tick(60) / 1000
|
||||
e.update(throttle, 0, dt)
|
||||
|
||||
pygame.quit()
|
||||
Reference in New Issue
Block a user