From c1bf0019b385c64aaf13ea54f55e028a8c13eb3e Mon Sep 17 00:00:00 2001 From: march3 Date: Mon, 4 Dec 2023 17:19:29 +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/solar_system_reality_2.py | 53 +++++++++++++------ 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/sim_scenes/solar_system/solar_system_reality_2.py b/sim_scenes/solar_system/solar_system_reality_2.py index 9a25139..4eeb613 100644 --- a/sim_scenes/solar_system/solar_system_reality_2.py +++ b/sim_scenes/solar_system/solar_system_reality_2.py @@ -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 -- GitLab