Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Python_超人
宇宙模拟器
提交
ce7feeec
宇宙模拟器
项目概览
Python_超人
/
宇宙模拟器
通知
19
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
宇宙模拟器
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
ce7feeec
编写于
11月 19, 2023
作者:
三月三net
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Python超人-宇宙模拟器
上级
593a5c97
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
55 addition
and
13 deletion
+55
-13
sim_scenes/wormhole_sim.py
sim_scenes/wormhole_sim.py
+55
-13
未找到文件。
sim_scenes/wormhole_sim.py
浏览文件 @
ce7feeec
...
...
@@ -12,7 +12,7 @@ from bodies.universe_body import create_universe_body
from
common.consts
import
SECONDS_PER_DAY
,
SECONDS_PER_WEEK
,
SECONDS_PER_MONTH
,
SECONDS_PER_YEAR
,
AU
from
objs
import
Obj
,
SpaceShip
,
StarWarsSpeeder
,
ScifiGunship
,
SciFiBomber
,
CoreValagaClas
from
sim_scenes.func
import
mayavi_run
,
mpl_run
,
ursina_run
,
camera_look_at
,
two_bodies_colliding
,
camera_move_control
,
\
get_run_speed_factor
get_run_speed_factor
,
create_text_panel
from
ursina
import
camera
,
application
,
lerp
from
bodies
import
Body
...
...
@@ -54,6 +54,16 @@ class WormholeSim:
[
D
,
D
,
-
D
],
[
D
,
D
,
D
],
[
-
D
,
D
,
-
D
],
[
-
D
,
D
,
D
],
[
D
,
-
D
,
-
D
],
[
D
,
-
D
,
D
],
[
-
D
,
-
D
,
-
D
],
[
-
D
,
-
D
,
D
]
]
positions
=
[[
D
,
0
,
-
D
],
[
D
,
0
,
D
],
[
-
D
,
-
D
,
D
],
[
-
D
,
0
,
-
D
],
[
D
,
D
,
D
],
[
D
,
-
D
,
D
],
[
-
D
,
-
D
,
-
D
],
[
-
D
,
0
,
D
],
[
D
,
D
,
-
D
],
[
-
D
,
D
,
-
D
],
[
-
D
,
D
,
D
],
[
D
,
-
D
,
-
D
]
]
for
idx
,
pos
in
enumerate
(
positions
):
self
.
universes
.
append
(
self
.
create_universe
(
idx
,
pos
))
...
...
@@ -71,6 +81,7 @@ class WormholeSim:
for
universe
in
self
.
universes
:
universe
.
planet
.
collider
=
"sphere"
universe
.
planet
.
enabled
=
False
camera
.
forward_speed
=
0
def
universe_reset
(
self
):
self
.
camera_target
.
speed
=
100
...
...
@@ -89,6 +100,7 @@ class WormholeSim:
self
.
last_universe
=
self
.
current_universe
self
.
current_universe
=
self
.
universes
[
self
.
current_idx
]
self
.
target_universe
=
self
.
universes
[
self
.
target_idx
]
if
self
.
last_universe
is
None
:
self
.
camera_target
.
go_target
=
self
.
target_universe
self
.
camera_target
.
go_target_stage
=
"target_universe"
...
...
@@ -96,9 +108,12 @@ class WormholeSim:
else
:
self
.
camera_target
.
go_target
=
self
.
last_universe
self
.
last_universe
.
planet
.
enabled
=
True
self
.
scale_down
(
self
.
last_universe
,
scale_size
=
self
.
SIZE_SCALE
*
10
)
self
.
camera_target
.
go_target_stage
=
"last_universe"
self
.
camera_target
.
go_target_hit
=
False
self
.
scale_down
(
u
)
self
.
camera_target
.
speed
=
2000
camera
.
forward_speed
=
-
0.1
self
.
scale_up
(
self
.
current_universe
)
# self.scale_down(self.target_universe)
...
...
@@ -127,8 +142,6 @@ class WormholeSim:
self
.
body_update_reset
()
self
.
universe_reset
()
# self.target_universe.planet.rotation_y = 100
# self.current_universe.planet.rotation_y = 200
# self.current_universe.planet.rotation_x = 30
...
...
@@ -140,18 +153,37 @@ class WormholeSim:
camera
.
current_universe
=
self
.
current_universe
camera_look_at
(
self
.
camera_target
,
rotation_z
=
0
)
self
.
text_panel
=
create_text_panel
(
font
=
"fonts/DroidSansFallback.ttf"
,
font_scale
=
1.3
)
def
update_text_panel
(
self
):
"""
更新文字信息面板
@param d_sun:
@return:
"""
panel_text
=
"虫洞穿越宇宙:
\n\n
当前宇宙:%s "
%
self
.
current_universe
.
name
panel_text
+=
"
\n\n
下站宇宙:%s"
%
self
.
target_universe
.
name
if
self
.
last_universe
is
not
None
:
panel_text
+=
"
\n\n
上站宇宙:%s "
%
self
.
last_universe
.
name
self
.
text_panel
.
text
=
panel_text
def
scale_up
(
self
,
obj
):
if
obj
is
None
:
return
obj
.
planet
.
init_scale
=
self
.
SIZE_SCALE
*
100
def
scale_down
(
self
,
obj
):
def
scale_down
(
self
,
obj
,
scale_size
=
None
):
if
obj
is
None
:
return
obj
.
planet
.
init_scale
=
self
.
SIZE_SCALE
if
scale_size
is
None
:
scale_size
=
self
.
SIZE_SCALE
obj
.
planet
.
init_scale
=
scale_size
def
on_timer_changed
(
self
,
time_data
):
self
.
target_universe
.
planet
.
rotation_y
-=
0.5
if
self
.
last_universe
is
not
None
:
self
.
last_universe
.
planet
.
rotation_y
+=
0.3
camera_look_at
(
self
.
camera_target
,
rotation_z
=
0
)
# camera.rotation_x -= 2
...
...
@@ -169,15 +201,22 @@ class WormholeSim:
self
.
camera_target
.
speed
*
time
.
dt
)
if
self
.
camera_target
.
go_target_stage
==
"last_universe"
:
if
self
.
camera_target
.
planet
.
intersects
(
go_target
).
hit
and
not
self
.
camera_target
.
go_target_hit
:
self
.
camera_target
.
go_target_hit
=
True
self
.
camera_target
.
go_target_stage
==
"target_universe"
self
.
camera_target
.
go_target
=
self
.
target_universe
self
.
camera_target
.
speed
=
500
camera
.
speed
=
1
# 在看上一个宇宙时候,停留一会
if
self
.
camera_target
.
planet
.
intersects
(
go_target
).
hit
:
if
not
self
.
camera_target
.
go_target_hit
:
self
.
camera_target
.
go_target_hit
=
True
self
.
camera_target
.
go_target_stage
==
"target_universe"
self
.
camera_target
.
go_target
=
self
.
target_universe
self
.
camera_target
.
speed
=
100
camera
.
speed
=
1
# 在看上一个宇宙时候,停留一会
# camera.forward_speed = -0.05
if
camera
.
forward_speed
<
0
:
camera
.
forward_speed
+=
0.01
else
:
camera
.
forward_speed
=
0
elif
self
.
camera_target
.
go_target_stage
==
"target_universe"
:
if
self
.
camera_target
.
planet
.
intersects
(
go_target
).
hit
and
not
self
.
camera_target
.
go_target_hit
:
self
.
camera_target
.
go_target_hit
=
True
camera
.
forward_speed
=
0
# camera.speed = 3000 # TODO:这个不能反复执行
# self.camera_target.planet.position += self.camera_target.planet.forward*100
...
...
@@ -189,12 +228,15 @@ class WormholeSim:
dd
=
distance
(
camera
.
position
,
self
.
target_universe
.
planet
.
position
)
if
camera
.
speed
!=
0
:
camera
.
position
=
lerp
(
camera
.
position
,
self
.
target_universe
.
planet
.
position
,
camera
.
speed
*
time
.
dt
/
dd
)
# camera.position += camera.forward * 2
if
camera
.
forward_speed
!=
0
:
camera
.
position
+=
camera
.
forward
*
camera
.
forward_speed
# if self.camera_target.planet.intersects(self.target_universe.planet).hit:
if
camera
.
intersects
(
self
.
target_universe
.
planet
).
hit
:
self
.
universe_reset
()
self
.
update_text_panel
()
def
build_events
(
self
):
# 订阅事件后,上面2个函数功能才会起作用
# 运行中,每时每刻都会触发 on_timer_changed
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录