-
Notifications
You must be signed in to change notification settings - Fork 0
/
general_functions.py
154 lines (122 loc) · 4.64 KB
/
general_functions.py
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#Módulo com as funções gerais utilizadas por todo o código
#Servem como resumos para outras coisas que acabariam ocupando muito espaço desnecessariamente
from itertools import chain
import pygame
import glob
SCREEN_WIDTH = 1600
SCREEN_HEIGHT = 900
screen = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
pygame.init()
SCREEN_WIDTH = 1600
SCREEN_HEIGHT = 900
screen = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
#Cores padrão
vermelho = (255,0,0)
verde = (0,255,0)
azul = (0,0,255)
preto = (0,0,0)
branco = (255,255,255)
amarelo = (255,255,0)
magenta = (255,0,255)
#Sons dos botões
btn1 = pygame.mixer.Sound("sounds/btn1.wav")
btn2 = pygame.mixer.Sound("sounds/btn2.wav")
btn3 = pygame.mixer.Sound("sounds/btn3.wav")
def show_fps(screen,mainClock):
fps = str(mainClock.get_fps())
pygame.draw.rect(screen,preto,[30,screen.get_height()*.945,500,30])
draw_text("FPS: "+fps,vermelho,screen,x=30,y=screen.get_height()*.95)
def truncline(text, font, maxwidth):
real=len(text)
stext=text
l=font.size(text)[0]
cut=0
a=0
done=1
old = None
while l > maxwidth:
a=a+1
n=text.rsplit(None, a)[0]
if stext == n:
cut += 1
stext= n[:-cut]
else:
stext = n
l=font.size(stext)[0]
real=len(stext)
done=0
return real, done, stext
def wrapline(text, font, maxwidth):
done=0
wrapped=[]
while not done:
nl, done, stext=truncline(text, font, maxwidth)
wrapped.append(stext.strip())
text=text[nl:]
return wrapped
def wrap_multi_line(text, font, maxwidth):
lines = chain(*(wrapline(line, font, maxwidth) for line in text.splitlines()))
return list(lines)
#Gerar os gráficos de progresso verticais
def draw_graf_vert(screen,val_min,val_max,mid,val,maxh,width,x,y,tipo,text):
altura = -(val*(maxh/val_max))
visual= pygame.Rect(x, y, width, altura)
if val < mid:
if tipo == "cres":
pygame.draw.rect(screen, vermelho, visual)
else:
pygame.draw.rect(screen, verde, visual)
if val >= mid:
if tipo == "cres":
pygame.draw.rect(screen, verde, visual)
else:
pygame.draw.rect(screen, vermelho, visual)
draw_text(val, branco, screen, center=(visual.centerx, visual.bottom-20))
draw_text(text, branco, screen, x=visual.x, y=visual.y+20)
draw_text(str(val)+"-"+str(val_max), branco, screen, x=visual.x, y=visual.y+40)
#Função pra pre-carregar os frames das animações
def load_frames(path):
frames = []
lista = glob.glob(path)
lista.sort()
for frame in lista:
novo_frame = pygame.image.load(frame).convert_alpha()
frames.append(novo_frame)
return frames
#Método para desenhar imagens na tela
def draw_img(screen,path,dimensoes,pos):
img = pygame.image.load('imgs/'+path).convert_alpha()
img = pygame.transform.scale(img, dimensoes)
screen.blit(img, pos)
#Método para desenhar retângulos com texto na tela - Usado nos botões
def draw_botao(screen,cor,larg,alt,x,y,texto,cor_texto=branco):
novo_rect = pygame.Rect(x, y, larg, alt)
pygame.draw.rect(screen, cor, novo_rect)
draw_text(texto, cor_texto, screen, center =novo_rect.center)
#Método para desenhar uma seção preta com um contorno branco
def draw_section(screen,x,y,larg,alt,esp,cor1=preto,cor2=branco):
contorno = pygame.Rect(x-esp, y-esp, larg+esp*2, alt+esp*2)
pygame.draw.rect(screen, cor2, contorno)
preenchimento = pygame.Rect(x, y, larg, alt)
pygame.draw.rect(screen, cor1, preenchimento)
#Facilitar cálculo de largura relativa a tela
def swi(sw,per,dif=0):
return int(sw*per)+dif
#Facilitar cálculo de altura relativa a tela
def shi(sh,per,dif=0):
return int(sh*per)+dif
#Método para impressão de texto na tela
def draw_text(text, color, screen,tamanho=None,font=None, x=None, y=None, center=None):
if not tamanho:
tamanho =int(screen.get_width()*0.01)
font = pygame.font.Font("fonts/cmd2.ttf", tamanho)
textobj = font.render(str(text), 0, color)
textrect = textobj.get_rect()
#Defina caso seja informado centralização
if center:
textrect.center = center
#Define caso sejam dados X e Y
else:
textrect.x = x
textrect.y = y
screen.blit(textobj, textrect)