diff --git a/sim_scenes/solar_system/speed_of_light_init.py b/sim_scenes/solar_system/speed_of_light_init.py index 8702ebb39f1386a1fa5ad3d233870c710e632792..9733677fdae1b0f00a60a95de4727f7b967f73fb 100644 --- a/sim_scenes/solar_system/speed_of_light_init.py +++ b/sim_scenes/solar_system/speed_of_light_init.py @@ -99,6 +99,8 @@ class SpeedOfLightInit: if self.bodies is None: raise Exception("请指定 SpeedOfLightInit.bodies") + + # 订阅重新开始事件 UrsinaEvent.on_reset_subscription(self.on_reset) UrsinaEvent.on_ready_subscription(self.on_ready) @@ -128,6 +130,7 @@ class SpeedOfLightInit: 模拟器开始运行前触发 @return: """ + # self.__light_body.planet_scale = self.__light_body.planet.scale self.text_panel = create_text_panel() self.text_panel.text = self.arrived_info.replace("${distance}", "0 AU") @@ -140,9 +143,15 @@ class SpeedOfLightInit: self.light_body.planet.input = self.light_body_input camera.rotation_y = -15 + # 取消订阅(防止 光体 的大小进行变化影响摄像机的视角) + UrsinaEvent.on_body_size_changed_unsubscription(self.light_body.planet.change_body_scale) + + # def on_body_size(self): + # self.light_body.planet.scale = self.light_body.planet_scale + def auto_run_speed(self): - # if self.__camera_follow_light != "SideViewActualSize": - # return + if self.__camera_follow_light != "SideViewActualSize": + return run_speed_maps = [ {"au": 0.008, "secs": 1}, @@ -169,7 +178,7 @@ class SpeedOfLightInit: {"au": 30.692, "secs": SECONDS_PER_MINUTE}, {"au": 30.702, "secs": 1}, # [04:15:19] 到达 [海王星] 30.7 AU {"au": 39.52, "secs": SECONDS_PER_HOUR * 1.2}, - {"au": 39.53, "secs": SECONDS_PER_MINUTE}, + {"au": 39.54, "secs": SECONDS_PER_MINUTE}, {"au": 1000, "secs": 1} # [05:28:55] 到达 [冥王星] 39.55 AU ] light_distance = self.light_body.position[2] diff --git a/simulators/ursina/ui/control_ui.py b/simulators/ursina/ui/control_ui.py index ab5d99a506c70ff40985bd0076a852d1ffb9907d..b4ff62d0585108db7040d478635a908a7634f2a0 100644 --- a/simulators/ursina/ui/control_ui.py +++ b/simulators/ursina/ui/control_ui.py @@ -31,7 +31,7 @@ class ControlUI(UiPanel): self.trail_button_text = "○--" self.slider_body_spin_factor = UiSlider(text='自转速度', min=0.01, max=5, default=1) - self.slider_body_size_factor = UiSlider(text='天体缩放', min=0.1, max=10, step=0.1, default=1) + self.slider_body_size_factor = UiSlider(text='天体缩放', min=0.1, max=20, step=0.1, default=1) self.slider_run_speed_factor = UiSlider(text="运行速度", min=0.01, max=20, default=1) self.slider_control_speed_factor = UiSlider(text="控制速度", min=0.01, max=10, step=0.1, default=application.time_scale) diff --git a/simulators/ursina/ursina_event.py b/simulators/ursina/ursina_event.py index 6710614f452753890cd9db015eeb7b4143cf633e..50e7b8cd282b2952a2bf58b7d39588b92cff2b51 100644 --- a/simulators/ursina/ursina_event.py +++ b/simulators/ursina/ursina_event.py @@ -42,6 +42,10 @@ class UrsinaEvent: def on_body_size_changed_subscription(fun): UrsinaEvent.on_body_size_changed_callback.append(fun) + @staticmethod + def on_body_size_changed_unsubscription(fun): + UrsinaEvent.on_body_size_changed_callback.remove(fun) + @staticmethod def on_body_size_changed(): for f in UrsinaEvent.on_body_size_changed_callback: @@ -51,6 +55,10 @@ class UrsinaEvent: def on_timer_changed_subscription(fun): UrsinaEvent.on_timer_changed_callback.append(fun) + @staticmethod + def on_timer_changed_unsubscription(fun): + UrsinaEvent.on_timer_changed_callback.remove(fun) + @staticmethod def on_timer_changed(time_data): for f in UrsinaEvent.on_timer_changed_callback: @@ -60,6 +68,10 @@ class UrsinaEvent: def on_evolving_subscription(fun): UrsinaEvent.on_evolving_callback.append(fun) + @staticmethod + def on_evolving_unsubscription(fun): + UrsinaEvent.on_evolving_callback.remove(fun) + @staticmethod def on_evolving(evolve_dt): for f in UrsinaEvent.on_evolving_callback: @@ -69,6 +81,10 @@ class UrsinaEvent: def on_application_run_callback_subscription(fun): UrsinaEvent.on_application_run_callback.append(fun) + @staticmethod + def on_application_run_callback_unsubscription(fun): + UrsinaEvent.on_application_run_callback.remove(fun) + @staticmethod def on_searching_bodies_subscription(subscription_name, fun): UrsinaEvent.on_searching_bodies_funcs.append((subscription_name, fun)) @@ -77,6 +93,10 @@ class UrsinaEvent: def on_reset_subscription(fun): UrsinaEvent.on_reset_funcs.append(fun) + @staticmethod + def on_reset_unsubscription(fun): + UrsinaEvent.on_reset_funcs.remove(fun) + @staticmethod def on_reset(): for f in UrsinaEvent.on_reset_funcs: @@ -86,6 +106,10 @@ class UrsinaEvent: def on_ready_subscription(fun): UrsinaEvent.on_ready_funcs.append(fun) + @staticmethod + def on_ready_unsubscription(fun): + UrsinaEvent.on_ready_funcs.remove(fun) + @staticmethod def on_ready(): for f in UrsinaEvent.on_ready_funcs: @@ -95,6 +119,10 @@ class UrsinaEvent: def on_start_subscription(fun): UrsinaEvent.on_start_funcs.append(fun) + @staticmethod + def on_start_unsubscription(fun): + UrsinaEvent.on_start_funcs.remove(fun) + @staticmethod def on_start(): for f in UrsinaEvent.on_start_funcs: @@ -104,12 +132,15 @@ class UrsinaEvent: def on_pause_subscription(fun): UrsinaEvent.on_pause_funcs.append(fun) + @staticmethod + def on_pause_unsubscription(fun): + UrsinaEvent.on_pause_funcs.remove(fun) + @staticmethod def on_pause(): for f in UrsinaEvent.on_pause_funcs: f() - @staticmethod def on_application_run(): if len(UrsinaEvent.on_application_run_callback) == 0: