-
Notifications
You must be signed in to change notification settings - Fork 0
/
gamecreds.py
147 lines (127 loc) · 4.01 KB
/
gamecreds.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
"""
Modulo gamecreds.
Mostra os creditos no menu principal.
"""
import pygame
from pygame.locals import *
import game, gfx, snd, txt
#Definicao dos creditos
credits = (
('Developer', ('Renato Silva',)),
('Graphics', ('Ari Fieldman - SpriteLib',)),
('Beta Testers', ('Paulo Silla', 'Rafael Euclides')),
)
#Informacao de licenca do jogo
licenseinfo = ('This program is free software. You are encouraged to',
'make copies and modify it, subject to the LGPL.',
'See "lgpl.txt" file for details.')
fonts = [] #Fontes utilizadas neste menu
images = [] #Imagens utilizadas neste menu
def load_game_resources():
"""
Carregamento de recursos para criacao do menu de creditos.
"""
global fonts, images
fontname = 'stencil'
fonts.append((txt.Font(fontname, 20), (255, 255, 0)))
fonts.append((txt.Font(fontname, 30), (255, 255, 255)))
font = txt.Font('stencil', 15)
top = 560
mid = 400
for l in licenseinfo:
t = font.text((50, 150, 150), l, (mid, top))
top += t[1].height
images.append(t)
snd.preload('select_choose')
class GameCreds:
"""
Definicao do menu de creditos
"""
def __init__(self, prevhandler):
"""
Parametros:
prevhandler - handler previamente ativo do jogo.
"""
self.prevhandler = prevhandler
self.done = 0
self.center = gfx.rect.centerx
self.text = []
self.credits = []
self.area = Rect(130, 100, 550, 400)
self.offset = 0
for cred in credits:
self.createtext(cred[0], 0)
self.offset += 10
for peop in cred[1]:
self.createtext(peop, 1)
self.offset += 30
self.offset = 0.0
self.oldoffsety = 0.0
self.text.extend(images)
self.first = 1
def createtext(self, text, size):
"""
Cria o texto de credito.
Parametros:
text - texto a ser escrito.
size - indice da lista de fontes a ser utilizada.
"""
f, c = fonts[size]
t = f.text(c, text, (self.center, 0))
t[1].top = self.offset
self.offset = t[1].bottom - 5
self.credits.append(t)
def quit(self):
"""
Funcao de saida do menu de creditos
"""
gfx.dirty(self.background(gfx.rect))
game.handler = self.prevhandler
self.done = 1
snd.play('select_choose')
def input(self, event):
"""
Detecta os eventos associados a este menu.
Parametros:
event - Evento detectado no loop principal do jogo.
"""
if event.type == KEYUP: return
self.quit()
def event(self, e):
pass
def run(self):
"""
Loop de execucao deste handler.
"""
if self.first:
gfx.dirty(gfx.rect)
self.first = 0
ratio = game.clockticks / 25
speedadjust = max(ratio, 1.0)
self.offset += speedadjust * 1.0
offsety = self.area.bottom-self.offset
#Obtem um retangulo com posicoes validas a partir do objeto Surface
oldclip = gfx.surface.get_clip()
#Desenha o texto do credito e desloca para cima na tela.
if not self.done:
for cred, pos in self.text:
gfx.surface.blit(cred, pos)
gfx.surface.set_clip(self.area)
for cred, pos in self.credits:
r = pos.move(0, offsety)
self.background(r)
bottom = r.bottom
gfx.surface.blit(cred, r)
gfx.surface.set_clip(oldclip)
gfx.dirty(self.area)
if bottom < self.area.top:
self.offset = 0.0
else:
for text in self.text:
r = text[1]
gfx.dirty(self.background(text[1]))
def background(self, area):
"""
Loop de desenho do background do menu de creditos.
"""
return gfx.surface.fill((0, 0, 0), area)