added mouse movement

This commit is contained in:
Nicholas Dyer 2023-02-20 00:09:31 -05:00
parent 778c373809
commit f23572d4d2
No known key found for this signature in database
GPG Key ID: E4E6388793FA2105

View File

@ -30,6 +30,29 @@ class Dial(pygame.Surface):
def set_setting(self, new_setting): def set_setting(self, new_setting):
self.setting = max(0, min(new_setting, 1)) self.setting = max(0, min(new_setting, 1))
def move_dial(self, movement_amount):
self.setting = max(0, min(self.setting + movement_amount, 1))
class MouseHandler:
def __init__(self):
self.prev_mouse_pos = pygame.mouse.get_pos()
self.mouse_pos = pygame.mouse.get_pos()
self.active = False
def update(self):
self.prev_mouse_pos = self.mouse_pos
self.mouse_pos = pygame.mouse.get_pos()
def get_circular_speed(self, center):
mouse_diff = (self.prev_mouse_pos[0] - self.mouse_pos[0], self.prev_mouse_pos[1] - self.mouse_pos[1])
movement_speed = math.sqrt((mouse_diff[0] ** 2) + (mouse_diff[1] ** 2))
mouse_angle = math.atan2(self.mouse_pos[0] - center[0], self.mouse_pos[1] - center[1])
diff_angle = math.atan2(mouse_diff[0], mouse_diff[1])
speed_coeff = math.cos((mouse_angle - (0.5 * math.pi)) - diff_angle)
final_speed = movement_speed * speed_coeff
return final_speed
class Surface(pygame.Surface): class Surface(pygame.Surface):
def __init__(self, window_size): def __init__(self, window_size):
super().__init__(window_size, pygame.SRCALPHA) super().__init__(window_size, pygame.SRCALPHA)
@ -41,8 +64,13 @@ class Surface(pygame.Surface):
self.dial = Dial(dial_size) self.dial = Dial(dial_size)
self.dial.rect.center = (window_size[0] / 2, window_size[1] / 2) self.dial.rect.center = (window_size[0] / 2, window_size[1] / 2)
self.mouse_handler = MouseHandler()
def update(self): def update(self):
self.fill((32, 32, 32)) self.fill((32, 32, 32))
self.mouse_handler.update()
for event in pygame.event.get(): for event in pygame.event.get():
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
self.running = False self.running = False
@ -50,6 +78,15 @@ class Surface(pygame.Surface):
if event.type == pygame.KEYDOWN: if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE: if event.key == pygame.K_ESCAPE:
self.quit = True self.quit = True
if event.type == pygame.MOUSEBUTTONDOWN:
self.mouse_handler.active = True
self.mouse_handler.prev_mouse_pos = self.mouse_handler.mouse_pos
print('yug')
if event.type == pygame.MOUSEBUTTONUP:
self.mouse_handler.active = False
if self.mouse_handler.active:
self.dial.move_dial(self.mouse_handler.get_circular_speed(self.dial.center) / -3000.0)
self.blit(self.dial, self.dial.rect) self.blit(self.dial, self.dial.rect)
self.dial.update() self.dial.update()