@@ -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