From b87dce5e6c6053d8912bb1f980304147b1b45a48 Mon Sep 17 00:00:00 2001 From: march3 Date: Tue, 5 Dec 2023 17:36:18 +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 --- bodies/body.py | 13 ++++++-- bodies/makemake.py | 2 +- objs/obj.py | 13 ++++++-- objs/sci_fi_space_station.py | 58 ++++++++++++++++++++++++++++++++++++ 4 files changed, 79 insertions(+), 7 deletions(-) create mode 100644 objs/sci_fi_space_station.py diff --git a/bodies/body.py b/bodies/body.py index 5aac8d7..0fa85c1 100644 --- a/bodies/body.py +++ b/bodies/body.py @@ -534,7 +534,8 @@ class Body(metaclass=ABCMeta): def show_demo(self, size_scale=1000, position=(0, 0, -5000000), on_ready_fun=None, - on_timer_changed_fun=None): + on_timer_changed_fun=None, + directional_light_pos=None): from sim_scenes.func import ursina_run from sim_scenes.func import camera_look_at from simulators.ursina.ursina_event import UrsinaEvent @@ -546,12 +547,18 @@ class Body(metaclass=ABCMeta): def on_ready(): camera_look_at(self) - on_ready_fun() + + if directional_light_pos is not None: + from simulators.ursina.entities.entity_utils import create_directional_light + create_directional_light(position=directional_light_pos, light_num=3, target=self) + + if callable(on_ready_fun): + on_ready_fun() def on_timer_changed(time_data): on_timer_changed_fun(time_data) - if callable(on_ready_fun): + if callable(on_ready_fun) or directional_light_pos is not None: UrsinaEvent.on_ready_subscription(on_ready) if callable(on_timer_changed_fun): diff --git a/bodies/makemake.py b/bodies/makemake.py index 57598e4..f990903 100644 --- a/bodies/makemake.py +++ b/bodies/makemake.py @@ -67,5 +67,5 @@ class Makemake(Body): if __name__ == '__main__': makemake = Makemake() - makemake.show_demo() + makemake.show_demo(directional_light_pos=(200, 0, -300)) print(makemake) diff --git a/objs/obj.py b/objs/obj.py index d9929d2..d9b077a 100644 --- a/objs/obj.py +++ b/objs/obj.py @@ -487,7 +487,8 @@ class Obj(metaclass=ABCMeta): def show_demo(self, size_scale=10000, position=(0, 3000000, -9000000), on_ready_fun=None, - on_timer_changed_fun=None): + on_timer_changed_fun=None, + directional_light_pos=None): from sim_scenes.func import ursina_run from sim_scenes.func import camera_look_at from simulators.ursina.ursina_event import UrsinaEvent @@ -498,12 +499,18 @@ class Obj(metaclass=ABCMeta): def on_ready(): camera_look_at(self) - on_ready_fun() + + if directional_light_pos is not None: + from simulators.ursina.entities.entity_utils import create_directional_light + create_directional_light(position=directional_light_pos, light_num=3, target=self) + + if callable(on_ready_fun): + on_ready_fun() def on_timer_changed(time_data): on_timer_changed_fun(time_data) - if callable(on_ready_fun): + if callable(on_ready_fun) or directional_light_pos is not None: UrsinaEvent.on_ready_subscription(on_ready) if callable(on_timer_changed_fun): diff --git a/objs/sci_fi_space_station.py b/objs/sci_fi_space_station.py new file mode 100644 index 0000000..8a58b52 --- /dev/null +++ b/objs/sci_fi_space_station.py @@ -0,0 +1,58 @@ +# -*- coding:utf-8 -*- +# title :空间站 +# description :空间站 +# author :Python超人 +# date :2023-02-11 +# link :https://gitcode.net/pythoncr/ +# python_version :3.8 +# ============================================================================== +from objs.obj import Obj + + +class ScifiSpaceStation(Obj): + """ + 空间站 + """ + + def __init__(self, name="空间站", mass=5.97237e24, + init_position=[0, 0, 0], + init_velocity=[0, 0, 0], + texture="texture_space_station_02.jpg", size_scale=1.0, distance_scale=1.0, + ignore_mass=False, density=1e3, color=(7, 0, 162), + trail_color=None, show_name=False, + model="sci_fi_space_station.obj", rotation=(0, 0, 0), + parent=None, gravity_only_for=[]): + params = { + "name": name, + "mass": mass, + "init_position": init_position, + "init_velocity": init_velocity, + "density": density, + "color": color, + "texture": texture, + "size_scale": size_scale, + "distance_scale": distance_scale, + "ignore_mass": ignore_mass, + "trail_color": trail_color, + "show_name": show_name, + "parent": parent, + "rotation": rotation, + "gravity_only_for": gravity_only_for, + "model": model + } + super().__init__(**params) + + +if __name__ == '__main__': + sci_fi_space_station = ScifiSpaceStation(size_scale=1000) + print(sci_fi_space_station) + + + def on_timer_changed(time_data): + sci_fi_space_station.planet.rotation_z += 0.1 + + + sci_fi_space_station.show_demo(size_scale=1000, + position=[0, 0, -10000000], + on_timer_changed_fun=on_timer_changed, + directional_light_pos=(200, 0, -300)) -- GitLab