Compare commits
No commits in common. "master" and "remove-images" have entirely different histories.
master
...
remove-ima
@ -9,11 +9,12 @@ PI = 3.14159265
|
|||||||
VALID_SURFACES = [
|
VALID_SURFACES = [
|
||||||
'dial'
|
'dial'
|
||||||
]
|
]
|
||||||
|
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
|
||||||
def main(windowed_mode=False):
|
def main(windowed_mode=False):
|
||||||
"""
|
"""
|
||||||
Main scene manager to display the scenes of the application
|
Main looping method.
|
||||||
:param windowed_mode: boolean to start the game in windowed mode
|
:param windowed_mode: boolean to start the game in windowed mode
|
||||||
"""
|
"""
|
||||||
pygame.init()
|
pygame.init()
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
import math
|
import math
|
||||||
|
|
||||||
import pygame
|
import pygame
|
||||||
import os
|
|
||||||
|
|
||||||
DIAL_SCALING = 0.9
|
DIAL_SCALING = 0.9
|
||||||
QUIT_BUTTON_SIZE = 50
|
|
||||||
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
||||||
|
|
||||||
|
|
||||||
class Dial(pygame.Surface):
|
class Dial(pygame.Surface):
|
||||||
@ -13,25 +11,21 @@ class Dial(pygame.Surface):
|
|||||||
self.rect = self.get_rect()
|
self.rect = self.get_rect()
|
||||||
self.dial_size = dial_size
|
self.dial_size = dial_size
|
||||||
self.center = (self.dial_size / 2, self.dial_size / 2)
|
self.center = (self.dial_size / 2, self.dial_size / 2)
|
||||||
self.moving = False
|
|
||||||
|
|
||||||
self.setting = 1
|
self.setting = 1
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
self.fill((0, 0, 0, 0))
|
self.fill((0, 0, 0, 0))
|
||||||
|
|
||||||
pygame.draw.circle(self, (64, 64, 255), self.center, self.dial_size / 2, 5)
|
pygame.draw.circle(self, (0, 255, 0), self.center, self.dial_size / 2, 5)
|
||||||
if self.moving:
|
pygame.draw.circle(self, (64, 64, 64), self.center, self.dial_size / 2 * 0.95)
|
||||||
pygame.draw.circle(self, (48, 48, 48), self.center, self.dial_size / 2 * 0.95)
|
|
||||||
else:
|
|
||||||
pygame.draw.circle(self, (64, 64, 64), self.center, self.dial_size / 2 * 0.95)
|
|
||||||
|
|
||||||
angle = (1.25 - (1.5 * self.setting)) * math.pi
|
angle = (1.25 - (1.5 * self.setting)) * math.pi
|
||||||
x_1 = (math.cos(angle) * self.dial_size / 2 * 0.75) + (self.dial_size / 2)
|
x_1 = (math.cos(angle) * self.dial_size / 2 * 0.8) + (self.dial_size / 2)
|
||||||
y_1 = (-1 * math.sin(angle) * self.dial_size / 2 * 0.75) + (self.dial_size / 2)
|
y_1 = (-1 * math.sin(angle) * self.dial_size / 2 * 0.8) + (self.dial_size / 2)
|
||||||
x_2 = (math.cos(angle) * self.dial_size / 2 * 0.99) + (self.dial_size / 2)
|
x_2 = (math.cos(angle) * self.dial_size / 2 * 0.99) + (self.dial_size / 2)
|
||||||
y_2 = (-1 * math.sin(angle) * self.dial_size / 2 * 0.99) + (self.dial_size / 2)
|
y_2 = (-1 * math.sin(angle) * self.dial_size / 2 * 0.99) + (self.dial_size / 2)
|
||||||
pygame.draw.line(self, (64, 64, 255), (x_1, y_1), (x_2, y_2), 10)
|
pygame.draw.line(self, (0, 255, 0), (x_1, y_1), (x_2, y_2), 10)
|
||||||
|
|
||||||
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))
|
||||||
@ -39,36 +33,25 @@ class Dial(pygame.Surface):
|
|||||||
def move_dial(self, movement_amount):
|
def move_dial(self, movement_amount):
|
||||||
self.setting = max(0, min(self.setting + movement_amount, 1))
|
self.setting = max(0, min(self.setting + movement_amount, 1))
|
||||||
|
|
||||||
|
|
||||||
class MouseHandler:
|
class MouseHandler:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.prev_mouse_pos = pygame.mouse.get_pos()
|
self.prev_mouse_pos = pygame.mouse.get_pos()
|
||||||
self.mouse_pos = pygame.mouse.get_pos()
|
self.mouse_pos = pygame.mouse.get_pos()
|
||||||
self.active = False
|
self.active = False
|
||||||
self.click = False
|
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
self.prev_mouse_pos = self.mouse_pos
|
self.prev_mouse_pos = self.mouse_pos
|
||||||
self.mouse_pos = pygame.mouse.get_pos()
|
self.mouse_pos = pygame.mouse.get_pos()
|
||||||
self.click = False
|
|
||||||
|
|
||||||
def get_circular_speed(self, center):
|
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])
|
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))
|
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])
|
mouse_angle = math.atan2(self.mouse_pos[0] - center[0], self.mouse_pos[1] - center[1])
|
||||||
mouse_diff_angle = math.atan2(mouse_diff[0], mouse_diff[1])
|
diff_angle = math.atan2(mouse_diff[0], mouse_diff[1])
|
||||||
speed_coeff = math.cos((mouse_angle - (0.5 * math.pi)) - mouse_diff_angle)
|
speed_coeff = math.cos((mouse_angle - (0.5 * math.pi)) - diff_angle)
|
||||||
return movement_speed * speed_coeff
|
final_speed = movement_speed * speed_coeff
|
||||||
|
return final_speed
|
||||||
|
|
||||||
class QuitButton(pygame.Surface):
|
|
||||||
def __init__(self):
|
|
||||||
super().__init__((QUIT_BUTTON_SIZE, QUIT_BUTTON_SIZE), pygame.SRCALPHA)
|
|
||||||
self.rect = self.get_rect()
|
|
||||||
pygame.draw.rect(self, (255, 0, 0), self.rect, 3)
|
|
||||||
pygame.draw.line(self, (255, 0, 0), (0, 0), (QUIT_BUTTON_SIZE, QUIT_BUTTON_SIZE), 3)
|
|
||||||
pygame.draw.line(self, (255, 0, 0), (0, QUIT_BUTTON_SIZE), (QUIT_BUTTON_SIZE, 0), 3)
|
|
||||||
|
|
||||||
|
|
||||||
class Surface(pygame.Surface):
|
class Surface(pygame.Surface):
|
||||||
def __init__(self, window_size):
|
def __init__(self, window_size):
|
||||||
@ -80,12 +63,9 @@ class Surface(pygame.Surface):
|
|||||||
dial_size = int(min(window_size[0], window_size[1]) * 0.9)
|
dial_size = int(min(window_size[0], window_size[1]) * 0.9)
|
||||||
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.quit_button = QuitButton()
|
|
||||||
|
|
||||||
self.mouse_handler = MouseHandler()
|
self.mouse_handler = MouseHandler()
|
||||||
self.font = pygame.font.Font(SCRIPT_DIR + '/resources/tuffy.ttf', 128)
|
|
||||||
|
|
||||||
pygame.mouse.set_visible(False)
|
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
self.fill((32, 32, 32))
|
self.fill((32, 32, 32))
|
||||||
@ -97,35 +77,16 @@ class Surface(pygame.Surface):
|
|||||||
self.quit = True
|
self.quit = True
|
||||||
if event.type == pygame.KEYDOWN:
|
if event.type == pygame.KEYDOWN:
|
||||||
if event.key == pygame.K_ESCAPE:
|
if event.key == pygame.K_ESCAPE:
|
||||||
self.running = False
|
|
||||||
self.quit = True
|
self.quit = True
|
||||||
if event.type == pygame.MOUSEBUTTONDOWN:
|
if event.type == pygame.MOUSEBUTTONDOWN:
|
||||||
self.mouse_handler.active = True
|
self.mouse_handler.active = True
|
||||||
self.mouse_handler.update()
|
|
||||||
self.mouse_handler.prev_mouse_pos = self.mouse_handler.mouse_pos
|
self.mouse_handler.prev_mouse_pos = self.mouse_handler.mouse_pos
|
||||||
self.mouse_handler.click = True
|
print('yug')
|
||||||
if event.type == pygame.MOUSEBUTTONUP:
|
if event.type == pygame.MOUSEBUTTONUP:
|
||||||
self.mouse_handler.active = False
|
self.mouse_handler.active = False
|
||||||
|
|
||||||
if self.mouse_handler.active:
|
if self.mouse_handler.active:
|
||||||
self.dial.move_dial(self.mouse_handler.get_circular_speed(self.dial.center) / -3000.0)
|
self.dial.move_dial(self.mouse_handler.get_circular_speed(self.dial.center) / -3000.0)
|
||||||
self.dial.moving = True
|
|
||||||
else:
|
|
||||||
self.dial.moving = False
|
|
||||||
|
|
||||||
if self.mouse_handler.click:
|
|
||||||
if self.mouse_handler.mouse_pos[0] <= QUIT_BUTTON_SIZE and \
|
|
||||||
self.mouse_handler.mouse_pos[1] <= QUIT_BUTTON_SIZE:
|
|
||||||
self.running = False
|
|
||||||
self.quit = True
|
|
||||||
|
|
||||||
self.blit(self.dial, self.dial.rect)
|
self.blit(self.dial, self.dial.rect)
|
||||||
|
|
||||||
self.blit(self.quit_button, self.quit_button.rect)
|
|
||||||
|
|
||||||
text = self.font.render('{0}%'.format(round(self.dial.setting * 100)), True, (255, 255, 255))
|
|
||||||
text_rect = text.get_rect()
|
|
||||||
text_rect.center = self.dial.rect.center
|
|
||||||
self.blit(text, text_rect)
|
|
||||||
|
|
||||||
self.dial.update()
|
self.dial.update()
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user