From 504dc7e48639c6f9fd1e7b6d5f70bb3a4eaa7115 Mon Sep 17 00:00:00 2001 From: march3 Date: Sun, 2 Jul 2023 19:33:52 +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 --- sim_scenes/science/speed_of_light_3d.py | 57 +++++++++++++++++++++---- 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/sim_scenes/science/speed_of_light_3d.py b/sim_scenes/science/speed_of_light_3d.py index 1b53960..de0d201 100644 --- a/sim_scenes/science/speed_of_light_3d.py +++ b/sim_scenes/science/speed_of_light_3d.py @@ -12,6 +12,10 @@ from common.consts import LIGHT_SPEED from sim_scenes.science.speed_of_light_init import SpeedOfLightInit # TODO: 三种不同的摄像机视角 +from simulators.ursina.entities.body_timer import TimeData +from simulators.ursina.entities.entity_utils import get_value_direction_vectors +from simulators.ursina.ursina_event import UrsinaEvent + camera_follow_light = None # 摄像机固定,不会跟随光 camera_follow_light = 'ForwardView' # 摄像机跟随光,方向是向前看 @@ -22,8 +26,8 @@ init = SpeedOfLightInit(camera_follow_light) # 创建太阳系天体(忽略质量,引力无效,初速度全部为0) bodies = create_solar_system_bodies(ignore_mass=True, init_velocity=[0, 0, 0]) -camera_pos = "left" -# camera_pos = "right" +# camera_pos = "left" +camera_pos = "right" camera_l2r = 0.01 * AU if camera_pos == "right": # 摄像机右眼 @@ -46,19 +50,56 @@ init.light_ship = light_ship init.bodies = bodies init.event_subscription() +UrsinaEvent.on_reset_unsubscription(init.on_reset) + + +def on_reset(): + init.on_reset + init.arrived_info = "距离[太阳中心]:${distance}\n\n" + init.arrived_info = "距离[太阳中心]:${distance}\n\n光速飞船速度:${speed}\n\n" + + +def on_timer_changed(time_data: TimeData): + velocity, _ = get_value_direction_vectors(light_ship.velocity) + distance = round(init.light_ship.position[2] / AU, 4) + text = init.arrived_info.replace("${distance}", "%.4f AU" % distance) + init.text_panel.text = text.replace("${speed}", str(round(velocity / LIGHT_SPEED, 1)) + "倍光速") + + +# 订阅重新开始事件 +# 按键盘的 “O” 重置键会触发 on_reset +UrsinaEvent.on_reset_subscription(on_reset) +# 订阅计时器事件(记录已到达天体列表) +# 运行中,每时每刻都会触发 on_timer_changed +UrsinaEvent.on_timer_changed_subscription(on_timer_changed) + def body_arrived(body): - if body.name == "火星": + # 到达每个行星都会触发,对光速飞船进行加速,超光速前进(使用未来曲率引擎技术) + if body.name == "火星": # 到达火星,加速前进,并进行攀升 light_ship.acceleration = [0, 35, 300] - elif body.name == "木星": + elif body.name == "木星": # 到达木星,加速前进,并进行下降 light_ship.acceleration = [0, -100, 200] - elif body.name == "土星": + elif body.name == "土星": # 到达土星,加速前进,并进行攀升 light_ship.acceleration = [0, 55, 200] - elif body.name == "天王星": + elif body.name == "天王星": # 到达天王星,加速前进,并进行下降 light_ship.acceleration = [0, -50, 200] - elif body.name == "海王星": + elif body.name == "海王星": # 到达海王星,加速前进,并进行攀升 light_ship.acceleration = [-3, 48, 300] - print(body) + # print(body) + +# def body_arrived(body): +# # 到达每个行星都会触发,对光速飞船进行加速,超光速前进(使用未来曲率引擎技术) +# if body.name == "火星": # 到达火星,加速前进,并进行攀升 +# light_ship.acceleration = [0, 35000, 300000] +# elif body.name == "木星": # 到达木星,加速前进,并进行下降 +# light_ship.acceleration = [0, -100000, 200000] +# elif body.name == "土星": # 到达土星,加速前进,并进行攀升 +# light_ship.acceleration = [0, 55000, 200000] +# elif body.name == "天王星": # 到达天王星,加速前进,并进行下降 +# light_ship.acceleration = [0, -50000, 200000] +# elif body.name == "海王星": # 到达海王星,加速前进,并进行攀升 +# light_ship.acceleration = [-3, 48000, 300000] init.body_arrived = body_arrived -- GitLab