提交 504dc7e4 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 2b8f6bb4
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册