-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
143 lines (119 loc) · 4.09 KB
/
main.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
import math
import os
import random
import sys
import time
import pygame
import pygame.gfxdraw
from common.enums import Screens
from common.game_manager import GameManager
from common.screens.game_screen import GameScreen
from common.screens.game_end_screen import GameEndScreen
from common.screens.leaderboard_screen import LeaderboardScreen
from common.screens.main_menu_screen import MainMenuScreen
from common.screens.map_select_screen import MapSelectScreen
from common.screens.settings_screen import SettingsScreen
from common.settings import Settings
from utils.helpers import *
from utils.thread import Thread
def main():
os.add_dll_directory('/')
pygame.init()
gm = GameManager()
settings = Settings()
flags = pygame.DOUBLEBUF
screen = pygame.display.set_mode((settings.res_x, settings.res_y), flags)
pygame.display.set_caption('Egregious Racing 1992')
surface = pygame.Surface((settings.internal_res_x, settings.internal_res_y))
scaled_surface = pygame.Surface(screen.get_size())
clock = pygame.time.Clock()
mms = MainMenuScreen()
mms_thread = Thread(mms.load, ())
ss = SettingsScreen()
ss_thread = Thread(ss.load, ())
lbs = LeaderboardScreen()
lbs_thread = Thread(lbs.load, ())
mss = MapSelectScreen()
mss_thread = Thread(mss.load, ())
gs = GameScreen()
gs_thread = Thread(gs.load, ())
ges = GameEndScreen()
ges_thread = Thread(ges.load, ())
states = {
Screens.main_menu: {
'screen': mms,
'thread': mms_thread,
},
Screens.settings: {
'screen': ss,
'thread': ss_thread,
},
Screens.leaderboard: {
'screen': lbs,
'thread': lbs_thread,
},
Screens.map_select: {
'screen': mss,
'thread': mss_thread,
},
Screens.game: {
'screen': gs,
'thread': gs_thread,
},
Screens.game_end: {
'screen': ges,
'thread': ges_thread,
}
}
gm.screens = states
print("Starting loop")
while 1:
start = time.time()
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
pygame.display.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
pygame.display.quit()
sys.exit()
if event.type == pygame.WINDOWRESIZED:
screen = pygame.display.set_mode((settings.res_x, settings.res_y), flags)
surface = pygame.Surface((settings.internal_res_x, settings.internal_res_y))
scaled_surface = pygame.Surface(screen.get_size())
cscreen = gm.screens[gm.current_screen]['screen']
thread = gm.screens[gm.current_screen]['thread']
if cscreen.loaded:
gm.unload_previous_screen()
pygame.mouse.set_visible(cscreen.mouse_visible)
pygame.event.set_grab(cscreen.mouse_grab)
cscreen.update(events)
cscreen.render(surface)
elif not thread.started:
thread.start()
else:
progress = cscreen.current_loading / cscreen.max_loading
pygame.gfxdraw.box(
surface,
[surface.get_width() / 2 - 25, surface.get_height() / 2 - 5, 50, 10],
(255, 255, 255)
)
pygame.gfxdraw.box(
surface,
[surface.get_width() / 2 - 24, surface.get_height() / 2 - 4, max(1, 48 * progress), 8],
(255 * (1 - progress), 255 * progress, 0)
)
pygame.transform.scale(surface, screen.get_size(), scaled_surface)
screen.blit(scaled_surface, (0, 0))
pygame.display.update()
# Eat inputs
pygame.mouse.get_rel()
# Update clock and delta time
clock.tick(settings.fps_cap)
settings.delta_time = clock.get_time() / 1000
#print(1 / (time.time() - start))
if __name__ == '__main__':
main()
def __main__():
main()