mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-07-07 06:32:08 +08:00
BigUI WIP: Optimizations
This commit is contained in:
@@ -535,6 +535,7 @@ class StarPilotMapsLayout(StarPilotPanel):
|
||||
self._active_state_group_key = "whole_us"
|
||||
self._full_us_mode = True
|
||||
self._whole_us_context_initialized = False
|
||||
self._cached_selected_tokens: set[str] = set()
|
||||
|
||||
self._download_button = self._child(
|
||||
AetherButton(
|
||||
@@ -585,6 +586,9 @@ class StarPilotMapsLayout(StarPilotPanel):
|
||||
|
||||
def _update_state(self):
|
||||
super()._update_state()
|
||||
self._cached_selected_tokens = _selected_token_set(
|
||||
self._params.get("MapsSelected", encoding="utf-8") or ""
|
||||
)
|
||||
self._sync_download_state()
|
||||
if self._pending_storage_state is not None:
|
||||
generation, storage_text, has_downloaded_data = self._pending_storage_state
|
||||
@@ -692,7 +696,7 @@ class StarPilotMapsLayout(StarPilotPanel):
|
||||
return _format_mb(total_size), has_files
|
||||
|
||||
def _selected_tokens(self) -> set[str]:
|
||||
return _selected_token_set(self._params.get("MapsSelected", encoding="utf-8") or "")
|
||||
return self._cached_selected_tokens
|
||||
|
||||
def _selected_count(self) -> int:
|
||||
return len(self._selected_tokens())
|
||||
@@ -903,7 +907,7 @@ class StarPilotMapsLayout(StarPilotPanel):
|
||||
return token in self._selected_tokens()
|
||||
|
||||
def _set_map_state(self, token: str, state: bool):
|
||||
selected = self._selected_tokens()
|
||||
selected = set(self._cached_selected_tokens)
|
||||
if state:
|
||||
if token == US_COUNTRY_TOKEN:
|
||||
selected = {item for item in selected if not item.startswith(STATE_PREFIX)}
|
||||
@@ -921,6 +925,7 @@ class StarPilotMapsLayout(StarPilotPanel):
|
||||
if self._active_state_group_key == "whole_us":
|
||||
self._active_state_group_key = STATES_SECTION["groups"][0]["key"]
|
||||
self._params.put("MapsSelected", sanitize_selected_locations_csv(sorted(selected)))
|
||||
self._cached_selected_tokens = selected
|
||||
|
||||
def _network_type(self):
|
||||
return ui_state.sm["deviceState"].networkType if ui_state.sm.valid.get("deviceState", False) else NetworkType.none
|
||||
|
||||
@@ -125,7 +125,11 @@ class ModelRenderer(Widget):
|
||||
|
||||
# StarPilot lead indicator visibility conditions
|
||||
hide_lead_marker = self._params.get_bool("HideLeadMarker")
|
||||
lead_info_enabled = self._params.get_bool("LeadInfo")
|
||||
self._lead_info_enabled = self._params.get_bool("LeadInfo")
|
||||
self._use_rainbow = self._params.get_bool('RainbowPath', default=False)
|
||||
self._use_accel_path = self._params.get_bool('AccelerationPath', default=True)
|
||||
self._is_metric = self._params.get_bool('IsMetric')
|
||||
lead_info_enabled = self._lead_info_enabled
|
||||
render_lead_indicator = (self._longitudinal_control or lead_info_enabled) and radar_state is not None and not hide_lead_marker
|
||||
|
||||
# Update model data when needed
|
||||
@@ -261,13 +265,12 @@ class ModelRenderer(Widget):
|
||||
|
||||
def _update_experimental_gradient(self):
|
||||
"""Pre-calculate experimental mode gradient colors"""
|
||||
use_rainbow = self._params.get_bool('RainbowPath', default=False)
|
||||
if use_rainbow:
|
||||
if self._use_rainbow:
|
||||
gradient_bottom, gradient_top = self._get_visible_gradient_bounds()
|
||||
self._exp_gradient = self._build_rainbow_gradient(gradient_bottom, gradient_top)
|
||||
return
|
||||
|
||||
if not self._experimental_mode or not self._params.get_bool('AccelerationPath', default=True):
|
||||
if not self._experimental_mode or not self._use_accel_path:
|
||||
return
|
||||
|
||||
max_len = min(len(self._path.projected_points) // 2, len(self._acceleration_x))
|
||||
@@ -399,8 +402,8 @@ class ModelRenderer(Widget):
|
||||
allow_throttle = sm['longitudinalPlan'].allowThrottle or not self._longitudinal_control
|
||||
self._blend_filter.update(int(allow_throttle))
|
||||
|
||||
use_rainbow = self._params.get_bool('RainbowPath', default=False)
|
||||
use_accel_path = not use_rainbow and self._params.get_bool('AccelerationPath', default=True)
|
||||
use_rainbow = self._use_rainbow
|
||||
use_accel_path = not use_rainbow and self._use_accel_path
|
||||
if use_rainbow:
|
||||
if len(self._exp_gradient.colors) > 1:
|
||||
draw_polygon(self._rect, self._path.projected_points, gradient=self._exp_gradient)
|
||||
@@ -466,8 +469,7 @@ class ModelRenderer(Widget):
|
||||
rl.draw_triangle_fan(lead.chevron, len(lead.chevron), with_alpha(color, lead.fill_alpha))
|
||||
|
||||
# Draw metrics if enabled
|
||||
lead_info_enabled = self._params.get_bool("LeadInfo")
|
||||
if lead_info_enabled and i < len(leads) and leads[i] and leads[i].status:
|
||||
if self._lead_info_enabled and i < len(leads) and leads[i] and leads[i].status:
|
||||
self._draw_lead_metrics(False, lead.chevron, leads[i])
|
||||
|
||||
def _update_adjacent_leads(self, starpilot_radar_state, path_x_array):
|
||||
@@ -511,8 +513,7 @@ class ModelRenderer(Widget):
|
||||
rl.draw_triangle_fan(lead.chevron, len(lead.chevron), with_alpha(color, lead.fill_alpha))
|
||||
|
||||
# Draw metrics if enabled
|
||||
lead_info_enabled = self._params.get_bool("LeadInfo")
|
||||
if lead_info_enabled:
|
||||
if self._lead_info_enabled:
|
||||
self._draw_lead_metrics(True, lead.chevron, lead_data)
|
||||
|
||||
def _draw_lead_metrics(self, adjacent, chevron, lead_data):
|
||||
@@ -894,14 +895,14 @@ class ModelRenderer(Widget):
|
||||
def _small_distance_to_half_m(self, value: float) -> float:
|
||||
if value <= 0:
|
||||
return 0.0
|
||||
if self._params.get_bool("IsMetric"):
|
||||
if self._is_metric:
|
||||
return value / 200.0
|
||||
return value * (CV.INCH_TO_CM / 100.0) / 2.0
|
||||
|
||||
def _path_width_to_half_m(self, value: float) -> float:
|
||||
if value <= 0:
|
||||
return 0.0
|
||||
if self._params.get_bool("IsMetric"):
|
||||
if self._is_metric:
|
||||
return value / 2.0
|
||||
return value * CV.FOOT_TO_METER / 2.0
|
||||
|
||||
|
||||
@@ -164,9 +164,11 @@ class UIState:
|
||||
self.light_sensor = -1
|
||||
|
||||
# Trust hardwared's filtered started state; raw ignition can flap on Toyota.
|
||||
force_onroad = self.params.get_bool("ForceOnroad")
|
||||
force_offroad = self.params.get_bool("ForceOffroad")
|
||||
started = self.sm["deviceState"].started
|
||||
started |= self.params.get_bool("ForceOnroad")
|
||||
started &= not self.params.get_bool("ForceOffroad")
|
||||
started |= force_onroad
|
||||
started &= not force_offroad
|
||||
self.started = started
|
||||
|
||||
# Update recording audio state
|
||||
@@ -197,8 +199,8 @@ class UIState:
|
||||
except Exception as e:
|
||||
cloudlog.warning(f"Error parsing starpilot_toggles: {e}")
|
||||
|
||||
self.starpilot_toggles["force_offroad"] = self.params.get_bool("ForceOffroad")
|
||||
self.starpilot_toggles["force_onroad"] = self.params.get_bool("ForceOnroad")
|
||||
self.starpilot_toggles["force_offroad"] = force_offroad
|
||||
self.starpilot_toggles["force_onroad"] = force_onroad
|
||||
|
||||
def _update_status(self) -> None:
|
||||
if self.started and self.sm.updated["selfdriveState"]:
|
||||
|
||||
Reference in New Issue
Block a user