/
HexMapManager.py
116 lines (98 loc) · 3.43 KB
/
HexMapManager.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
import time
import pygame as pg
from HexMap import HexMap
from HexSimulation.HexSimulator import HexSimulator
class HexMapManager:
def __init__(self) -> None:
self.update_enabled = False
self.pgInit()
self.spritesList = []
self.mode = 0
self.riverMode = False
self.borderMode = False
self.tileSize = None
self.center = (0, 0)
self.currentMap = None
self.simulator = None
def pgInit(self) -> None:
self.width, self.height = 1200, 1000
self.screenCenter = (self.width / 2, self.height / 2)
self.screen = pg.display.set_mode((self.width, self.height))
self.main_surf = None
self.font = None
self.clock = None
self.main_surf = pg.display.set_mode((self.width, self.height))
def setMode(self, mode) -> None:
# start = time.time()
if mode == self.mode:
return
self.mode = mode
self.queueUpdate()
def setRiverMode(self, mode: bool) -> None:
if self.riverMode != mode:
self.riverMode = mode
self.queueUpdate()
def toggleBorders(self) -> None:
self.borderMode = not self.borderMode
self.queueUpdate()
def queueUpdate(self) -> None:
print("queued update")
self.update_enabled = True
def update(self) -> None:
if self.update_enabled:
self.screen.fill((0, 0, 0))
self.draw()
self.update_enabled = False
print("updated")
def draw(self) -> None:
start = time.time()
for cell in list(self.currentMap.values()):
if self.borderMode:
if cell.nation is not None:
cell.draw(self.mode, self.riverMode, radius=self.tileSize, border=True,
borderColor=cell.nation.color)
else:
cell.draw(self.mode, self.riverMode, radius=self.tileSize)
else:
cell.draw(self.mode, self.riverMode, radius=self.tileSize)
self.main_surf.blit(
cell.image, (cell.getPosition()[0] + self.center[0], cell.getPosition()[1] + self.center[1])
)
stop = time.time()
print(f"Draw call took {stop - start}s")
def zoom(self, newtileSize: int) -> None:
self.tileSize = newtileSize
self.queueUpdate()
def pan(self, newCenter: tuple[int, int]) -> None:
if newCenter == self.center:
pass
else:
self.center = newCenter
self.queueUpdate()
def setView(self, newTileSize: int, newCenter: tuple[int, int]) -> None:
self.pan(newCenter)
self.zoom(newTileSize)
def createMap(
self, mapSize: list[int, int], tileSize: int, nPlates: int, ratio: float, zetaTectonics: float,
axialTilt: int, nIterationsMoisture: int
) -> None:
self.currentMap = HexMap()
self.tileSize = tileSize
self.currentMap.createMap(
mapSize,
tileSize,
nPlates,
ratio,
(self.width, self.height),
zetaTectonics,
axialTilt,
nIterationsMoisture
)
self.simulator = HexSimulator(self.currentMap)
self.queueUpdate()
def stepSimulation(self):
self.simulator.step()
self.queueUpdate()
def startSim(self):
self.simulator.start()
self.queueUpdate()