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

Python超人-宇宙模拟器

上级 68134ad9
文件已添加
文件已添加
文件已添加
...@@ -409,7 +409,7 @@ def create_3d_card(left=-.885, top=0.495, width=0.02, height=0.02): ...@@ -409,7 +409,7 @@ def create_3d_card(left=-.885, top=0.495, width=0.02, height=0.02):
return panel return panel
def create_text_panel(width=0.35, height=.5, font=None): def create_text_panel(width=0.35, height=.5, font=None, font_scale=1.0):
# 创建一个 Panel 组件 # 创建一个 Panel 组件
from ursina import Text, Panel, color, camera, Vec3, window from ursina import Text, Panel, color, camera, Vec3, window
from simulators.ursina.ursina_config import UrsinaConfig from simulators.ursina.ursina_config import UrsinaConfig
...@@ -428,15 +428,15 @@ def create_text_panel(width=0.35, height=.5, font=None): ...@@ -428,15 +428,15 @@ def create_text_panel(width=0.35, height=.5, font=None):
) )
if font is None: if font is None:
font = UrsinaConfig.CN_FONT font = UrsinaConfig.CN_FONT
else: elif str(font).startswith("fonts/"):
from common.func import find_file from common.func import find_file
font = find_file(f"fonts/{font}", UrsinaConfig.CN_FONT) font = find_file(f"{font}", UrsinaConfig.CN_FONT)
# 创建一个 Text 组件用于显示消息 # 创建一个 Text 组件用于显示消息
text = Text( text = Text(
parent=panel, parent=panel,
text='', text='',
origin=(-.5, .5, -.5), origin=(-.5, .5, -.5),
scale=(height * 5, width * 5), scale=(height * 5 * font_scale, width * 5 * font_scale),
font=font, font=font,
# background=True, # background=True,
# background_color=color.clear # background_color=color.clear
......
...@@ -143,12 +143,23 @@ class HalleyCometSimBase(UniverseSimScenes): ...@@ -143,12 +143,23 @@ class HalleyCometSimBase(UniverseSimScenes):
# else: # else:
from ursina import window from ursina import window
aspect_ratio = window.aspect_ratio aspect_ratio = window.aspect_ratio
position, origin = (0.5 * aspect_ratio - 0.3, -0.465), (-0.5, 0.5), position, origin = (0.5 * aspect_ratio - 0.25, -0.45), (-0.5, 0.5),
ControlUI.current_ui.show_message(dt.strftime('%Y-%m-%d %H:%M:%S'), ControlUI.current_ui.show_message(dt.strftime(' %Y-%m-%d'),
position=position, position=position,
origin=origin, origin=origin,
font="verdana.ttf", # font="verdana.ttf",
font="fonts/Digital-7Mono.TTF",
font_scale=1.35,
font_color=(0, 255, 0),
close_time=-1) close_time=-1)
# ControlUI.current_ui.show_message(dt.strftime(' %Y-%m-%d %H:%M:%S'),
# position=position,
# origin=origin,
# # font="verdana.ttf",
# font="fonts/Digital-7Mono.TTF",
# font_scale=1.35,
# font_color=(0, 255, 0),
# close_time=-1)
def interval_run(self, total_times, interval, fun, fun_args=None): def interval_run(self, total_times, interval, fun, fun_args=None):
""" """
......
...@@ -136,7 +136,7 @@ class HalleyCometSim(HalleyCometSimBase): ...@@ -136,7 +136,7 @@ class HalleyCometSim(HalleyCometSimBase):
label = create_label(trail, label=year, pos=_pos, label = create_label(trail, label=year, pos=_pos,
label_color=label_color, label_color=label_color,
font="DroidSansFallback.ttf", font="fonts/DroidSansFallback.ttf",
scale=scale, alpha=1.0, background=background scale=scale, alpha=1.0, background=background
) )
label.set_light_off() label.set_light_off()
...@@ -297,11 +297,11 @@ class HalleyCometSim(HalleyCometSimBase): ...@@ -297,11 +297,11 @@ class HalleyCometSim(HalleyCometSimBase):
@param d_sun: @param d_sun:
@return: @return:
""" """
panel_text = "哈雷彗星:\n\n距离太阳:%.3f\tAU" % (d_sun / AU) panel_text = "哈雷彗星:\n\n当前日距:%s AU" % "{:.3f}".format(d_sun / AU).rjust(6, "0")
panel_text += "\n\n离日最远:%.3f\tAU" % (self.comet_aphel / AU) panel_text += "\n\n最大日距:%s AU" % "{:.3f}".format(self.comet_aphel / AU).rjust(6, "0")
panel_text += "\n\n离日最近:%.3f\tAU" % (self.comet_peri / AU) panel_text += "\n\n最小日距:%s AU" % "{:.3f}".format(self.comet_peri / AU).rjust(6, "0")
velocity, _ = get_value_direction_vectors(self.halley_comet.velocity) velocity, _ = get_value_direction_vectors(self.halley_comet.velocity)
panel_text += "\n\n当前速度:%.3f\tkm/s" % velocity panel_text += "\n\n当前速度:%s km/s" % "{:.3f}".format(velocity).rjust(6, "0")
self.text_panel.text = panel_text self.text_panel.text = panel_text
...@@ -370,7 +370,7 @@ class HalleyCometSim(HalleyCometSimBase): ...@@ -370,7 +370,7 @@ class HalleyCometSim(HalleyCometSimBase):
# 创建太阳系天体的真实轨迹(太阳和哈雷彗星除外) # 创建太阳系天体的真实轨迹(太阳和哈雷彗星除外)
self.create_orbit_lines() self.create_orbit_lines()
# 创建信息显示面板 # 创建信息显示面板
self.text_panel = create_text_panel(font="DroidSansFallback.ttf") self.text_panel = create_text_panel(font="fonts/sanjixiaozhuanti.ttf", font_scale=1.5)
def on_timer_changed(self, time_data): def on_timer_changed(self, time_data):
""" """
......
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
from ursina import Ursina, window, Entity, Grid, Mesh, camera, Text, application, color, mouse, Vec2, Vec3, \ from ursina import Ursina, window, Entity, Grid, Mesh, camera, Text, application, color, mouse, Vec2, Vec3, \
load_texture, held_keys, Button, ButtonList, destroy, scene, distance, Sequence, Wait, Func load_texture, held_keys, Button, ButtonList, destroy, scene, distance, Sequence, Wait, Func
from ursina.prefabs.first_person_controller import FirstPersonController from ursina.prefabs.first_person_controller import FirstPersonController
from common.color_utils import conv_to_vec4_color
from common.consts import SECONDS_PER_HOUR, SECONDS_PER_HALF_DAY, \ from common.consts import SECONDS_PER_HOUR, SECONDS_PER_HALF_DAY, \
SECONDS_PER_DAY, SECONDS_PER_WEEK, SECONDS_PER_MONTH, SECONDS_PER_YEAR SECONDS_PER_DAY, SECONDS_PER_WEEK, SECONDS_PER_MONTH, SECONDS_PER_YEAR
from common.consts import AU from common.consts import AU
...@@ -63,7 +65,8 @@ class UiPanel(WindowPanel): ...@@ -63,7 +65,8 @@ class UiPanel(WindowPanel):
""" """
pass pass
def show_message(self, message, font=None, origin=(0, 0), position=(0, .25), close_time=3): def show_message(self, message, font=None, origin=(0, 0), position=(0, .25), close_time=3,
font_color=None, font_scale=1):
""" """
显示消息框 显示消息框
@param message: 消息内容 @param message: 消息内容
...@@ -75,10 +78,17 @@ class UiPanel(WindowPanel): ...@@ -75,10 +78,17 @@ class UiPanel(WindowPanel):
destroy(self.last_message_box) destroy(self.last_message_box)
if font is None: if font is None:
font = UrsinaConfig.CN_FONT font = UrsinaConfig.CN_FONT
# else: elif str(font).startswith("fonts/"):
# font = None from common.func import find_file
font = find_file(f"{font}", UrsinaConfig.CN_FONT)
if font_color is None:
font_color = color.white
else:
font_color = conv_to_vec4_color(font_color)
# 创建消息框 # 创建消息框
message_box = Text(text=message, font=font, background=True, origin=origin, position=position) message_box = Text(text=message, font=font, scale=font_scale, color=font_color,
background=True, origin=origin, position=position)
self.last_message_box = message_box self.last_message_box = message_box
......
...@@ -201,9 +201,9 @@ def create_label(parent, label, pos, label_color, scale=50, alpha=1.0, backgroun ...@@ -201,9 +201,9 @@ def create_label(parent, label, pos, label_color, scale=50, alpha=1.0, backgroun
label_color[3] = alpha label_color[3] = alpha
if font is None: if font is None:
font = UrsinaConfig.CN_FONT font = UrsinaConfig.CN_FONT
else: elif str(font).startswith("fonts/"):
from common.func import find_file from common.func import find_file
font = find_file(f"fonts/{font}", UrsinaConfig.CN_FONT) font = find_file(f"{font}", UrsinaConfig.CN_FONT)
text = Text(label, parent=parent, scale=scale, billboard=True, color=label_color, text = Text(label, parent=parent, scale=scale, billboard=True, color=label_color,
position=Vec3(pos) + Vec3(1, 1, 1), alpha=alpha, position=Vec3(pos) + Vec3(1, 1, 1), alpha=alpha,
font=font, background=background) font=font, background=background)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册