1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
# -*- coding: utf-8 -*-
import pygame
from math import pi, cos, sin, fsum
from classes.simple_vector import Vector2
class Ratio:
def __init__(self, unit_size, scale, color1, color2, color3, border_color1, border_color2, border_color3, numbers):
self.size = unit_size * scale
self.center = [self.size // 2, self.size // 2]
self.color1 = color1
self.color2 = color2
self.color3 = color3
self.border_color1 = border_color1
self.border_color2 = border_color2
self.border_color3 = border_color3
self.numbers = numbers
self.type = type
self.canvas = pygame.Surface([self.size, self.size - 1], flags=pygame.SRCALPHA)
self.canvas.fill((0, 0, 0, 0))
self.draw_minicircles()
def get_canvas(self):
return self.canvas
def update_values(self, numbers):
self.numbers = numbers
self.canvas.fill((0, 0, 0, 0))
self.draw_minicircles()
def draw_minicircles(self):
ttl = int(fsum(self.numbers))
angle_step = 2 * pi / ttl
angle_start = -pi / 2
r = self.size // 2.5
r2 = self.size // 17
# manually draw the arc - the 100% width of the arc does not impress
for i in range(ttl):
# angle for line
angle = angle_start + angle_step * i
# Calculate the x,y for the end point
x = r * cos(angle) + self.center[0]
y = r * sin(angle) + self.center[1]
if i < self.numbers[0]:
pygame.draw.circle(self.canvas, self.color1, [int(x), int(y)], r2, 0)
pygame.draw.circle(self.canvas, self.border_color1, [int(x), int(y)], r2, 2)
elif i < self.numbers[0] + self.numbers[1]:
pygame.draw.circle(self.canvas, self.color2, [int(x), int(y)], r2, 0)
pygame.draw.circle(self.canvas, self.border_color2, [int(x), int(y)], r2, 2)
else:
pygame.draw.circle(self.canvas, self.color3, [int(x), int(y)], r2, 0)
pygame.draw.circle(self.canvas, self.border_color3, [int(x), int(y)], r2, 2)
# Draw the line from the self.center to the calculated end point
|