Skip to content

Commit 03e1271

Browse files
committed
improved_minimap_sizing_and_information
1 parent 938a888 commit 03e1271

1 file changed

Lines changed: 73 additions & 13 deletions

File tree

lineflow/simulation/visualization.py

Lines changed: 73 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,10 @@ def __init__(
4444

4545
self.initial_view_data = False
4646

47+
self.line_bounds = None
4748
self.show_minimap = True
4849

49-
def set_initial_viewpoint(self):
50+
def find_line_size(self):
5051
x_positions = []
5152
y_positions = []
5253
for station in self.stations:
@@ -58,6 +59,14 @@ def set_initial_viewpoint(self):
5859
min(x_positions)+line_width/2,
5960
min(y_positions)+line_height/2
6061
)
62+
self.line_bounds = dict(
63+
upper_left=pygame.Vector2(min(x_positions), min(y_positions)),
64+
lower_right=pygame.Vector2(max(x_positions), max(y_positions))
65+
)
66+
return line_width, line_height, line_center
67+
68+
def set_initial_viewpoint(self):
69+
line_width, line_height, line_center = self.find_line_size()
6170
x = -line_center.x
6271
y = -line_center.y
6372
x_scalar = line_width / (self.size.x-100)
@@ -285,36 +294,87 @@ def draw_cursor(self):
285294
pygame.draw.circle(self.screen, 'blue', self.center, 10, 1)
286295

287296
def draw_minimap(self):
297+
if self.line_bounds is None:
298+
self.find_line_size()
299+
288300
downscale = 5
301+
buffer = pygame.Vector2(10, 10)
302+
line_diagonal = self.line_bounds['lower_right'] - self.line_bounds['upper_left']
303+
minimap_upper_left = pygame.Vector2(
304+
self.size.x - line_diagonal.x / downscale - buffer.x,
305+
buffer.y
306+
)
307+
draw_position = minimap_upper_left - self.line_bounds['upper_left'] / downscale
289308
minimap_size = pygame.Vector2(self.size / downscale)
290-
minimap = pygame.Surface(minimap_size)
291-
minimap.fill('white')
292-
pygame.draw.rect(minimap, 'blue', pygame.Rect((0, 0), minimap_size), width=2)
309+
pygame.draw.rect(
310+
self.screen,
311+
'white',
312+
pygame.Rect(minimap_upper_left - buffer, line_diagonal / downscale + buffer*2)
313+
)
314+
pygame.draw.rect(
315+
self.screen,
316+
'blue',
317+
pygame.Rect(minimap_upper_left - buffer, line_diagonal / downscale + buffer*2),
318+
width=2
319+
)
293320

294321
for connector in self.connectors:
295322
pygame.draw.line(
296-
minimap,
323+
self.screen,
297324
'gray',
298-
connector['start']/downscale,
299-
connector['end']/downscale,
325+
draw_position + connector['start'] / downscale,
326+
draw_position + connector['end'] / downscale,
300327
)
301328
for station in self.stations:
302-
pygame.draw.circle(minimap, 'green', station['position']/downscale, 5)
329+
color = 'black'
330+
if not 'mode' in station:
331+
pass
332+
elif station['mode'] == 'working':
333+
color = 'green'
334+
elif station['mode'] == 'waiting':
335+
color = 'yellow'
336+
elif station['mode'] == 'failing':
337+
color = 'red'
338+
elif station['mode'] == 'off':
339+
color = 'gray'
340+
pygame.draw.circle(
341+
self.screen,
342+
color,
343+
draw_position + station['position'] / downscale,
344+
5
345+
)
303346
for carrier in self.carriers:
304-
pygame.draw.circle(minimap, 'orange', carrier['position']/downscale, 3)
347+
pygame.draw.circle(
348+
self.screen,
349+
'orange',
350+
draw_position + carrier['position'] / downscale,
351+
3
352+
)
305353

306354
view_outline = pygame.Rect(
307-
-1 * self.view / downscale - (self.size / downscale * self.viewpoint.z) / 2,
355+
draw_position - self.view / downscale - self.size / downscale * self.viewpoint.z / 2,
308356
self.size / downscale * self.viewpoint.z
309357
)
310-
pygame.draw.rect(minimap, 'red', view_outline, width=1)
311-
self.screen.blit(minimap, (self.size.x-minimap_size.x, 0))
358+
pygame.draw.line(
359+
self.screen,
360+
'red',
361+
draw_position - self.view / downscale + (3,0),
362+
draw_position - self.view / downscale - (3,0)
363+
)
364+
pygame.draw.line(
365+
self.screen,
366+
'red',
367+
draw_position - self.view / downscale + (0,3),
368+
draw_position - self.view / downscale - (0,3)
369+
)
370+
if self.viewpoint.z < 1:
371+
pygame.draw.rect(self.screen, 'red', view_outline, width=1)
312372

313373
def check_user_input(self):
314374
for event in pygame.event.get():
315375
if event.type == pygame.QUIT:
316376
return False
317-
377+
318378
keys = pygame.key.get_pressed()
319379
if keys[pygame.K_q]:
320380
self.viewpoint.z -= 3*self.dt

0 commit comments

Comments
 (0)