diff --git a/fonts/Digital-7Mono.TTF b/fonts/Digital-7Mono.TTF new file mode 100644 index 0000000000000000000000000000000000000000..e22ed5485c356de8d5f6c93c5e5c3e38c6fbe411 Binary files /dev/null and b/fonts/Digital-7Mono.TTF differ diff --git a/fonts/en.ttf b/fonts/en.ttf new file mode 100644 index 0000000000000000000000000000000000000000..83449625f5036449e7cf462a6420fc2425563302 Binary files /dev/null and b/fonts/en.ttf differ diff --git a/fonts/th.ttf b/fonts/th.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c841224d169897db5a897ef0cab4df79d135a92a Binary files /dev/null and b/fonts/th.ttf differ diff --git a/fonts/zh-hans.ttf b/fonts/zh-hans.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0d7269374145c3e3e6ffeaab546f44d92f0ee0db Binary files /dev/null and b/fonts/zh-hans.ttf differ diff --git "a/fonts/\345\220\216\347\216\260\344\273\243\344\275\223.otf" "b/fonts/\345\220\216\347\216\260\344\273\243\344\275\223.otf" new file mode 100644 index 0000000000000000000000000000000000000000..fd17433c7dd8146da64549636b5eda8584e01aea Binary files /dev/null and "b/fonts/\345\220\216\347\216\260\344\273\243\344\275\223.otf" differ diff --git "a/fonts/\346\226\260\351\235\222\345\271\264\344\275\223.ttf" "b/fonts/\346\226\260\351\235\222\345\271\264\344\275\223.ttf" new file mode 100644 index 0000000000000000000000000000000000000000..1eb2d2340532a4cc762a22f1510952a81853ff7e Binary files /dev/null and "b/fonts/\346\226\260\351\235\222\345\271\264\344\275\223.ttf" differ diff --git a/sim_scenes/func.py b/sim_scenes/func.py index 00ffc396c4505f27c927fcea76679ca77049f0e7..9e4e1ac7e5a5ec71462ea1419ab2b0a0e3fef221 100644 --- a/sim_scenes/func.py +++ b/sim_scenes/func.py @@ -409,7 +409,7 @@ def create_3d_card(left=-.885, top=0.495, width=0.02, height=0.02): 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 组件 from ursina import Text, Panel, color, camera, Vec3, window from simulators.ursina.ursina_config import UrsinaConfig @@ -428,15 +428,15 @@ def create_text_panel(width=0.35, height=.5, font=None): ) if font is None: font = UrsinaConfig.CN_FONT - else: + elif str(font).startswith("fonts/"): 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( parent=panel, text='', origin=(-.5, .5, -.5), - scale=(height * 5, width * 5), + scale=(height * 5 * font_scale, width * 5 * font_scale), font=font, # background=True, # background_color=color.clear diff --git a/sim_scenes/solar_system/halley_comet_lib.py b/sim_scenes/solar_system/halley_comet_lib.py index fe3e15466662aa60ff8f6b0b43f61ec81cdd8fec..1e9b190de62255ff8374534db9a2f008868161a7 100644 --- a/sim_scenes/solar_system/halley_comet_lib.py +++ b/sim_scenes/solar_system/halley_comet_lib.py @@ -143,12 +143,23 @@ class HalleyCometSimBase(UniverseSimScenes): # else: from ursina import window aspect_ratio = window.aspect_ratio - position, origin = (0.5 * aspect_ratio - 0.3, -0.465), (-0.5, 0.5), - ControlUI.current_ui.show_message(dt.strftime('%Y-%m-%d %H:%M:%S'), + position, origin = (0.5 * aspect_ratio - 0.25, -0.45), (-0.5, 0.5), + ControlUI.current_ui.show_message(dt.strftime(' %Y-%m-%d'), position=position, 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) + # 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): """ diff --git a/sim_scenes/solar_system/halley_comet_sim.py b/sim_scenes/solar_system/halley_comet_sim.py index 9710a9f3a542abf4b8e1c706d9aae2bd803da77d..90a265673fad352e7618fe185d342b4f0d715577 100644 --- a/sim_scenes/solar_system/halley_comet_sim.py +++ b/sim_scenes/solar_system/halley_comet_sim.py @@ -136,7 +136,7 @@ class HalleyCometSim(HalleyCometSimBase): label = create_label(trail, label=year, pos=_pos, label_color=label_color, - font="DroidSansFallback.ttf", + font="fonts/DroidSansFallback.ttf", scale=scale, alpha=1.0, background=background ) label.set_light_off() @@ -297,11 +297,11 @@ class HalleyCometSim(HalleyCometSimBase): @param d_sun: @return: """ - panel_text = "哈雷彗星:\n\n距离太阳:%.3f\tAU" % (d_sun / AU) - panel_text += "\n\n离日最远:%.3f\tAU" % (self.comet_aphel / AU) - panel_text += "\n\n离日最近:%.3f\tAU" % (self.comet_peri / AU) + panel_text = "哈雷彗星:\n\n当前日距:%s AU" % "{:.3f}".format(d_sun / AU).rjust(6, "0") + panel_text += "\n\n最大日距:%s AU" % "{:.3f}".format(self.comet_aphel / AU).rjust(6, "0") + panel_text += "\n\n最小日距:%s AU" % "{:.3f}".format(self.comet_peri / AU).rjust(6, "0") 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 @@ -370,7 +370,7 @@ class HalleyCometSim(HalleyCometSimBase): # 创建太阳系天体的真实轨迹(太阳和哈雷彗星除外) 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): """ diff --git a/simulators/ursina/ui/ui_panel.py b/simulators/ursina/ui/ui_panel.py index cca8e0f38b32e9363ab864e3028f71c8043dcb9a..16d470c18115a617fc9e0a8d098e617361e80fca 100644 --- a/simulators/ursina/ui/ui_panel.py +++ b/simulators/ursina/ui/ui_panel.py @@ -9,6 +9,8 @@ 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 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, \ SECONDS_PER_DAY, SECONDS_PER_WEEK, SECONDS_PER_MONTH, SECONDS_PER_YEAR from common.consts import AU @@ -63,7 +65,8 @@ class UiPanel(WindowPanel): """ 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: 消息内容 @@ -75,10 +78,17 @@ class UiPanel(WindowPanel): destroy(self.last_message_box) if font is None: font = UrsinaConfig.CN_FONT - # else: - # font = None + elif str(font).startswith("fonts/"): + 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 diff --git a/simulators/ursina/ursina_mesh.py b/simulators/ursina/ursina_mesh.py index 9ba58510c72913236335f761016c9a9c4966173b..6acd1d66d66cf366a7074b61c316caec3366f883 100644 --- a/simulators/ursina/ursina_mesh.py +++ b/simulators/ursina/ursina_mesh.py @@ -201,9 +201,9 @@ def create_label(parent, label, pos, label_color, scale=50, alpha=1.0, backgroun label_color[3] = alpha if font is None: font = UrsinaConfig.CN_FONT - else: + elif str(font).startswith("fonts/"): 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, position=Vec3(pos) + Vec3(1, 1, 1), alpha=alpha, font=font, background=background)