1+ from collections import defaultdict
12from pyqtgraph .Qt .QtWidgets import *
23from proto .import_all_protos import *
34from software .py_constants import SECONDS_PER_MICROSECOND , SECONDS_PER_MINUTE
45from software .thunderscope .common .common_widgets import set_table_data
56from software .thunderscope .thread_safe_buffer import ThreadSafeBuffer
6- from google .protobuf .json_format import MessageToDict
77
88
99class RefereeInfoWidget (QWidget ):
@@ -34,6 +34,9 @@ def __init__(self, buffer_size: int = 1) -> None:
3434 self .vertical_layout .addWidget (self .referee_info )
3535 self .setLayout (self .vertical_layout )
3636
37+ # Team info table data, indexed by [field_name]["blue" | "yellow"]
38+ self .team_info = defaultdict (dict )
39+
3740 def refresh (self ) -> None :
3841 """Update the referee info widget with new referee information"""
3942 referee = self .referee_buffer .get (block = False , return_cached = False )
@@ -42,68 +45,27 @@ def refresh(self) -> None:
4245 if referee is None :
4346 return
4447
45- referee_msg_dict = MessageToDict (referee )
46-
47- if not referee_msg_dict :
48- return
49-
50- stage_time_left_s = (
51- int (referee_msg_dict ["stageTimeLeft" ]) * SECONDS_PER_MICROSECOND
52- )
53- p = (
54- f"Packet Timestamp: { round (float (referee_msg_dict ['packetTimestamp' ]) * SECONDS_PER_MICROSECOND , 3 )} \n "
48+ stage_time_left_s = referee .stage_time_left * SECONDS_PER_MICROSECOND
49+ self .referee_info .setText (
50+ f"Packet Timestamp: { round (referee .packet_timestamp * SECONDS_PER_MICROSECOND , 3 )} \n "
5551 + f"Stage Time Left: { int (stage_time_left_s / SECONDS_PER_MINUTE ):02d} "
5652 + f":{ int (stage_time_left_s % SECONDS_PER_MINUTE ):02d} \n "
57- + f"Stage: { referee_msg_dict ['stage' ]} \n "
58- + "Command: "
59- + referee_msg_dict ["command" ]
60- + "\n "
61- + f"Blue Team on Positive Half: { referee_msg_dict ['blueTeamOnPositiveHalf' ]} \n "
53+ + f"Stage: { Referee .Stage .Name (referee .stage )} \n "
54+ + f"Command: { Referee .Command .Name (referee .command )} \n "
55+ + f"Blue Team on Positive Half: { referee .blue_team_on_positive_half } \n "
6256 )
63- self .referee_info .setText (p )
64-
65- team_info = []
66- blue = []
67- yellow = []
68-
69- for team_info_name in referee_msg_dict ["blue" ]:
70- if team_info_name == "timeouts" :
71- team_info .append ("remainingTimeouts" )
72- elif team_info_name == "goalkeeper" :
73- team_info .append ("goalkeeperID" )
74- else :
75- team_info .append (team_info_name )
76-
77- for team_info_name in referee_msg_dict ["yellow" ]:
78- if team_info_name in team_info :
79- continue
80-
81- if team_info_name == "timeouts" :
82- team_info .append ("remainingTimeouts" )
83- elif team_info_name == "goalkeeper" :
84- team_info .append ("goalkeeperID" )
85- else :
86- team_info .append (team_info_name )
87-
88- for info in team_info :
89- if info == "yellowCardTimes" :
90- blue .append (self .parse_yellow_card_times (referee_msg_dict ["blue" ]))
91- yellow .append (self .parse_yellow_card_times (referee_msg_dict ["yellow" ]))
92- elif info == "remainingTimeouts" :
93- blue .append (referee_msg_dict ["blue" ]["timeouts" ])
94- yellow .append (referee_msg_dict ["yellow" ]["timeouts" ])
95- elif info == "goalkeeperID" :
96- blue .append (referee_msg_dict ["blue" ]["goalkeeper" ])
97- yellow .append (referee_msg_dict ["yellow" ]["goalkeeper" ])
98- else :
99- blue .append (referee_msg_dict ["blue" ][info ])
100- yellow .append (referee_msg_dict ["yellow" ][info ])
57+
58+ for field_descriptor , field_val in referee .blue .ListFields ():
59+ self .team_info [field_descriptor .name ]["blue" ] = field_val
60+
61+ for field_descriptor , field_val in referee .yellow .ListFields ():
62+ self .team_info [field_descriptor .name ]["yellow" ] = field_val
10163
10264 set_table_data (
10365 {
104- "Team Info" : team_info ,
105- "Blue" : blue ,
106- "Yellow" : yellow ,
66+ "Team Info" : self . team_info . keys () ,
67+ "Blue" : [ val [ " blue" ] for val in self . team_info . values ()] ,
68+ "Yellow" : [ val [ " yellow" ] for val in self . team_info . values ()] ,
10769 },
10870 self .referee_table ,
10971 RefereeInfoWidget .HEADER_SIZE_HINT_WIDTH_EXPANSION ,
@@ -118,18 +80,6 @@ def parse_yellow_card_times(self, team_info: TeamInfo) -> str:
11880
11981 :param team_info: TeamInfo protobuf dict to parse
12082 """
121- text = ""
122- if "yellowCardTimes" in team_info :
123- yellow_card_times = team_info ["yellowCardTimes" ]
124- for i in range (0 , len (yellow_card_times ) - 1 ):
125- formatted_time = int (yellow_card_times [i ] * SECONDS_PER_MICROSECOND )
126- text = text + str (formatted_time ) + ", "
127-
128- formatted_time = int (
129- yellow_card_times [len (yellow_card_times ) - 1 ] * SECONDS_PER_MICROSECOND
130- )
131- text = text + str (formatted_time )
132- else :
133- text = "0"
134-
135- return text
83+ return [
84+ time * SECONDS_PER_MICROSECOND for time in team_info .yellow_card_times
85+ ].join (", " )
0 commit comments