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

Python超人-宇宙模拟器

上级 3fcc15dc
......@@ -14,6 +14,8 @@ from common.celestial_data_service import get_body_posvel, recalc_moon_position,
set_solar_system_celestial_position, set_earth_rotation, get_reality_orbit_points
from common.consts import SECONDS_PER_WEEK, SECONDS_PER_DAY, SECONDS_PER_HOUR, AU
from sim_scenes.func import ursina_run, create_sphere_sky
from sim_scenes.universe_sim_scenes import UniverseSimScenes
from simulators.func import ext_fun_for_method
from simulators.ursina.entities.body_timer import TimeData
from simulators.ursina.ui.control_ui import ControlUI
from simulators.ursina.ursina_config import UrsinaConfig
......@@ -23,7 +25,7 @@ from ursina import camera, application
from simulators.ursina.ursina_mesh import create_orbit_line, create_orbit_by_points
class SolarSystemRealitySim:
class SolarSystemRealitySim(UniverseSimScenes):
def __init__(self):
"""
......@@ -43,10 +45,10 @@ class SolarSystemRealitySim:
# 由于宇宙空间尺度非常大,如果按照实际的天体大小,则无法看到天体,因此需要对天体的尺寸进行放大
# 太阳 60倍、
SUN_SIZE_SCALE = 60
SUN_SIZE_SCALE = 50
SIZE_SCALE_1 = 2000
SIZE_SCALE_2 = 5e2
SIZE_SCALE_3 = 15e2
SIZE_SCALE_2 = 500
SIZE_SCALE_3 = 1500
# 太阳缩放比例
self.sun_size_scale = 0.04e2 if self.debug_mode else SUN_SIZE_SCALE
......@@ -136,6 +138,7 @@ class SolarSystemRealitySim:
@return:
"""
# 运行前触发
self.set_window_size((1920, 1079), False)
self.sky = create_sphere_sky(scale=80000)
......@@ -187,7 +190,7 @@ class SolarSystemRealitySim:
segments=100)
# print(points)
orbit_line = create_orbit_by_points(center_body.position, points, line_color=body.trail_color,
alpha=alpha)
alpha=alpha, thickness=1)
return orbit_line
def create_orbit_lines(self):
......@@ -197,7 +200,7 @@ class SolarSystemRealitySim:
"""
self.orbit_lines = []
for body in self.bodies[1:]:
alpha = 0.5
alpha = 1
orbit_line = self.create_orbit_line(self.sun, body, self.start_time, alpha=alpha)
if orbit_line is not None:
self.orbit_lines.append(orbit_line)
......@@ -270,9 +273,9 @@ class SolarSystemRealitySim:
def init_steps(self):
self.step_index = 0
self.steps = [
self.set_body_as_real_scale,
lambda: self.recover_body_scale(self.sun),
self.set_bodies_as_real_scale,
lambda: self.enabled_orbit_lines(),
lambda: self.recover_body_scale(self.sun),
lambda: self.recover_body_scale([self.earth, self.mercury, self.venus, self.mars, self.earth_clouds]),
lambda: self.recover_body_scale([self.jupiter, self.saturn]),
lambda: self.recover_body_scale([self.uranus, self.neptune]),
......@@ -284,6 +287,7 @@ class SolarSystemRealitySim:
from ursina import Vec4
orbit_line.alpha = 0
orbit_line.color *= Vec4(1, 1, 1, 0)
# orbit_line.origin_color = orbit_line.color
def orbit_line_update():
......@@ -312,18 +316,20 @@ class SolarSystemRealitySim:
scale_inc = (scale_x - body.planet.scale_x) / 200.0
def update_scale():
# body.planet.origin_update()
planet_scale_x = body.planet.scale_x
planet_scale_x += scale_inc
if planet_scale_x > scale_x:
planet_scale_x = scale_x
body.planet.update = lambda: None
body.planet.update = body.planet.origin_update
body.planet.scale = planet_scale_x
body.planet.update = update_scale
def recover_run(self):
for body in self.bodies:
body.planet.update = body.planet.origin_update
pass
# for body in self.bodies:
# body.planet.update = body.planet.origin_update
def recover_sky(self):
def update_sky():
......@@ -343,15 +349,30 @@ class SolarSystemRealitySim:
bodies = body_or_bodies
for body in bodies:
self.scale_animation(body)
from ursina import invoke
def set_body_as_real_scale(self):
self.save_body_scale()
for body in self.bodies:
body.planet.origin_update = body.planet.update
body.planet.update = lambda: None
def recover_run_speed():
UrsinaConfig.run_speed_factor = 1
invoke(function=recover_run_speed, delay=3.0)
def set_body_as_real_scale(self, body):
UrsinaConfig.run_speed_factor = 0.01
body.planet.origin_update = body.planet.update
# body.planet.update = lambda: None
def update_scale():
size_scale, scale_x = self.body_scale_dict[body]
body.planet.scale = scale_x / size_scale
ext_fun_for_method(body.planet, after_run_fun=update_scale)
def set_bodies_as_real_scale(self):
self.save_body_scale()
for body in self.bodies:
self.set_body_as_real_scale(body)
for orbit_line in self.orbit_lines:
orbit_line.origin_alpha = orbit_line.alpha
# orbit_line.alpha = 0
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册