From 9d686b8fa57c7659a064c9a66348b569e1207d5d Mon Sep 17 00:00:00 2001 From: march3 Date: Sun, 9 Apr 2023 17:57:21 +0800 Subject: [PATCH] =?UTF-8?q?Python=E8=B6=85=E4=BA=BA-=E5=AE=87=E5=AE=99?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solar_system/speed_of_light_init.py | 15 +++++++-- simulators/ursina/ui/control_ui.py | 2 +- simulators/ursina/ursina_event.py | 33 ++++++++++++++++++- 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/sim_scenes/solar_system/speed_of_light_init.py b/sim_scenes/solar_system/speed_of_light_init.py index 8702ebb..9733677 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 ab5d99a..b4ff62d 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 6710614..50e7b8c 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: -- GitLab