diff --git a/bodies/body.py b/bodies/body.py index 5aac8d7555637b6cd0f3f646f6fa967e5ac24124..0fa85c1364ba9ffb50e11f743cfcb73a50fd9e6c 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 57598e440c0fbaef61b006e7531f1ad2b735d690..f990903ea056705713bbc37e239e4600fbd1a1f7 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 d9929d2955f8f818e4ee3e51b4e78a8a635c6fe2..d9b077a891873c5ccd9a9d380689a0b90084cf28 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 0000000000000000000000000000000000000000..8a58b52c71f498f09c99deedc913f119e006ec40 --- /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))