Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Python_超人
宇宙模拟器
提交
ba31cad0
宇宙模拟器
项目概览
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看板
提交
ba31cad0
编写于
11月 20, 2023
作者:
三月三net
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Python超人-宇宙模拟器
上级
e567cd88
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
68 addition
and
63 deletion
+68
-63
sim_scenes/wormhole_sim.py
sim_scenes/wormhole_sim.py
+68
-63
未找到文件。
sim_scenes/wormhole_sim.py
浏览文件 @
ba31cad0
...
@@ -18,6 +18,7 @@ from ursina import camera, application, lerp, Vec3
...
@@ -18,6 +18,7 @@ from ursina import camera, application, lerp, Vec3
from
bodies
import
Body
from
bodies
import
Body
from
simulators.ursina.ursina_event
import
UrsinaEvent
from
simulators.ursina.ursina_event
import
UrsinaEvent
from
dataclasses
import
dataclass
,
field
from
dataclasses
import
dataclass
,
field
import
inspect
@
dataclass
(
order
=
True
)
@
dataclass
(
order
=
True
)
...
@@ -37,6 +38,11 @@ class WormholeInfo:
...
@@ -37,6 +38,11 @@ class WormholeInfo:
rotation_x
:
float
=
None
rotation_x
:
float
=
None
rotation_y
:
float
=
None
rotation_y
:
float
=
None
rotation_z
:
float
=
None
rotation_z
:
float
=
None
around_max_count
:
int
=
300
around_max_speed
:
int
=
-
200
around_min_speed
:
int
=
100
around_direction
:
str
=
"right"
around_acc_speed
:
int
=
-
2
# class WormholeInfoParams:
# class WormholeInfoParams:
...
@@ -59,6 +65,7 @@ class WormholeSim:
...
@@ -59,6 +65,7 @@ class WormholeSim:
init_position
=
[
D
,
0
,
-
D
],
init_position
=
[
D
,
0
,
-
D
],
init_velocity
=
[
0
,
0
,
0
],
init_velocity
=
[
0
,
0
,
0
],
size_scale
=
self
.
SIZE_SCALE
*
1e3
).
set_ignore_gravity
(
True
)
size_scale
=
self
.
SIZE_SCALE
*
1e3
).
set_ignore_gravity
(
True
)
self
.
wormholeinfo_default_vals
=
None
self
.
camera_target
.
go_target
=
None
self
.
camera_target
.
go_target
=
None
self
.
camera_target
.
go_target_stage
=
None
self
.
camera_target
.
go_target_stage
=
None
self
.
last_universe
=
None
self
.
last_universe
=
None
...
@@ -66,6 +73,7 @@ class WormholeSim:
...
@@ -66,6 +73,7 @@ class WormholeSim:
self
.
target_universe
=
None
self
.
target_universe
=
None
self
.
universes
=
[]
self
.
universes
=
[]
self
.
wormhole_infos
=
{}
self
.
wormhole_infos
=
{}
self
.
create_universes
()
self
.
create_universes
()
self
.
bodies
=
[
self
.
camera_target
]
+
self
.
universes
self
.
bodies
=
[
self
.
camera_target
]
+
self
.
universes
...
@@ -93,9 +101,14 @@ class WormholeSim:
...
@@ -93,9 +101,14 @@ class WormholeSim:
# rotation_x: float = None
# rotation_x: float = None
# rotation_y: float = None
# rotation_y: float = None
# rotation_z: float = None
# rotation_z: float = None
# around_max_count: int = 300
# around_max_speed: int = -200
# around_direction: str = "right"
# around_acc_speed: int = -2
wormhole_infos
=
[
wormhole_infos
=
[
{
"position"
:
[
D
,
0
,
-
D
],
"rotation_y"
:
-
150
},
{
"position"
:
[
D
,
0
,
-
D
],
"rotation_y"
:
-
150
},
{
"position"
:
[
D
,
0
,
D
],
"rotation_z"
:
30
},
{
"position"
:
[
D
,
0
,
D
],
"rotation_z"
:
30
,
"around_acc_speed"
:
-
10
,
"around_min_speed"
:
150
},
{
"position"
:
[
-
D
,
-
D
,
D
]},
{
"position"
:
[
-
D
,
-
D
,
D
]},
{
"position"
:
[
-
D
,
0
,
-
D
]},
{
"position"
:
[
-
D
,
0
,
-
D
]},
{
"position"
:
[
D
,
D
,
D
]},
{
"position"
:
[
D
,
D
,
D
]},
...
@@ -110,58 +123,34 @@ class WormholeSim:
...
@@ -110,58 +123,34 @@ class WormholeSim:
def
build_wormhole_info_param
(
wormhole_info
):
def
build_wormhole_info_param
(
wormhole_info
):
# ps = WormholeInfoParams()
# ps = WormholeInfoParams()
if
self
.
wormholeinfo_default_vals
is
None
:
self
.
wormholeinfo_default_vals
=
{}
init_wormholeinfo_default_vals
=
True
else
:
init_wormholeinfo_default_vals
=
False
ps
=
{}
ps
=
{}
import
inspect
attributes
=
inspect
.
getmembers
(
WormholeInfo
)
attributes
=
inspect
.
getmembers
(
WormholeInfo
)
for
attr
in
attributes
:
for
attr
in
attributes
:
if
not
attr
[
0
].
startswith
(
'_'
):
if
not
attr
[
0
].
startswith
(
'_'
):
pn
=
attr
[
0
]
pn
=
attr
[
0
]
if
init_wormholeinfo_default_vals
:
self
.
wormholeinfo_default_vals
[
pn
]
=
attr
[
1
]
if
pn
not
in
wormhole_info
.
keys
():
if
pn
not
in
wormhole_info
.
keys
():
continue
continue
ps
[
pn
]
=
wormhole_info
[
pn
]
# attr[1].default
ps
[
pn
]
=
wormhole_info
[
pn
]
# attr[1].default
# return {
# attr[0]: attr[1].default
# for attr in attributes
# if not attr[0].startswith('_')
# }
return
ps
return
ps
for
idx
,
wormhole_info
in
enumerate
(
wormhole_infos
):
for
idx
,
wormhole_info
in
enumerate
(
wormhole_infos
):
pos
=
wormhole_info
.
get
(
"position"
,
[
0
,
0
,
0
])
pos
=
wormhole_info
.
get
(
"position"
,
[
0
,
0
,
0
])
name
=
wormhole_info
.
get
(
"name"
,
f
"宇宙
{
idx
}
"
)
name
=
wormhole_info
.
get
(
"name"
,
f
"宇宙
{
idx
}
"
)
# camera_target_init_speed: int = wormhole_info.get("camera_target_init_speed", 100)
# camera_init_speed: int = wormhole_info.get("camera_init_speed", 100)
# camera_target_speed: int = wormhole_info.get("camera_target_speed", 2000)
# camera_target_max_speed: int = wormhole_info.get("camera_target_max_speed", 2000)
# camera_forward_speed: int = wormhole_info.get("camera_forward_speed", -0.1)
# camera_max_speed: int = wormhole_info.get("camera_max_speed", 5000)
# camera_acc_speed: int = wormhole_info.get("camera_acc_speed", 1.02)
# camera_forward_acc_speed: int = wormhole_info.get("camera_forward_acc_speed", 0.01)
# size_factor: float = wormhole_info.get("size_factor", 10)
# rotation_x: float = wormhole_info.get("rotation_x", None)
# rotation_y: float = wormhole_info.get("rotation_y", None)
# rotation_z: float = wormhole_info.get("rotation_z", None)
ps1
=
build_wormhole_info_param
(
wormhole_info
)
ps1
=
build_wormhole_info_param
(
wormhole_info
)
ps1
[
"position"
]
=
pos
ps1
[
"position"
]
=
pos
ps1
[
"name"
]
=
name
ps1
[
"name"
]
=
name
universe
=
self
.
create_universe
(
name
,
idx
,
pos
)
universe
=
self
.
create_universe
(
name
,
idx
,
pos
)
self
.
universes
.
append
(
universe
)
self
.
universes
.
append
(
universe
)
self
.
wormhole_infos
[
universe
]
=
WormholeInfo
(
**
ps1
)
self
.
wormhole_infos
[
universe
]
=
WormholeInfo
(
**
ps1
)
# self.wormhole_infos[universe] = WormholeInfo(name=name, position=pos,
# camera_target_init_speed=camera_target_init_speed,
# camera_init_speed=camera_init_speed,
# camera_target_speed=camera_target_speed,
# camera_target_max_speed=camera_target_max_speed,
# camera_forward_speed=camera_forward_speed,
# camera_max_speed=camera_max_speed,
# camera_acc_speed=camera_acc_speed,
# camera_forward_acc_speed=camera_forward_acc_speed,
# size_factor=size_factor,
# rotation_x=rotation_x,
# rotation_y=rotation_y,
# rotation_z=rotation_z
#
# )
def
init_setting
(
self
):
def
init_setting
(
self
):
camera
.
clip_plane_near
=
0.00005
camera
.
clip_plane_near
=
0.00005
...
@@ -180,18 +169,25 @@ class WormholeSim:
...
@@ -180,18 +169,25 @@ class WormholeSim:
camera
.
forward_speed
=
0
camera
.
forward_speed
=
0
def
get_wormhole_data
(
self
,
data_name
,
default_val
=
None
,
universe
=
None
):
def
get_wormhole_data
(
self
,
data_name
,
default_val
=
None
,
universe
=
None
):
def
ret_value
():
if
default_val
is
None
:
if
data_name
in
self
.
wormholeinfo_default_vals
.
keys
():
return
self
.
wormholeinfo_default_vals
[
data_name
]
return
default_val
if
universe
is
None
:
if
universe
is
None
:
universe
=
self
.
current_universe
universe
=
self
.
current_universe
wormhole_info
=
self
.
wormhole_infos
[
universe
]
wormhole_info
=
self
.
wormhole_infos
[
universe
]
if
wormhole_info
is
None
:
if
wormhole_info
is
None
:
return
default_val
return
ret_value
()
if
not
hasattr
(
wormhole_info
,
data_name
):
if
not
hasattr
(
wormhole_info
,
data_name
):
return
default_val
return
ret_value
()
val
=
getattr
(
wormhole_info
,
data_name
)
val
=
getattr
(
wormhole_info
,
data_name
)
if
val
is
None
:
if
val
is
None
:
return
default_val
return
ret_value
()
return
val
return
val
...
@@ -223,8 +219,8 @@ class WormholeSim:
...
@@ -223,8 +219,8 @@ class WormholeSim:
if
rotation_z
is
not
None
:
if
rotation_z
is
not
None
:
self
.
current_universe
.
planet
.
rotation_z
=
rotation_z
self
.
current_universe
.
planet
.
rotation_z
=
rotation_z
self
.
camera_target
.
speed
=
self
.
get_wormhole_data
(
"camera_target_init_speed"
,
100
)
self
.
camera_target
.
speed
=
self
.
get_wormhole_data
(
"camera_target_init_speed"
)
camera
.
speed
=
self
.
get_wormhole_data
(
"camera_init_speed"
,
100
)
camera
.
speed
=
self
.
get_wormhole_data
(
"camera_init_speed"
)
if
self
.
last_universe
is
None
:
if
self
.
last_universe
is
None
:
self
.
camera_target
.
go_target
=
self
.
target_universe
self
.
camera_target
.
go_target
=
self
.
target_universe
...
@@ -234,14 +230,14 @@ class WormholeSim:
...
@@ -234,14 +230,14 @@ class WormholeSim:
self
.
camera_target
.
go_target
=
self
.
last_universe
self
.
camera_target
.
go_target
=
self
.
last_universe
self
.
last_universe
.
planet
.
enabled
=
True
self
.
last_universe
.
planet
.
enabled
=
True
size_factor
=
self
.
get_wormhole_data
(
"size_factor"
,
10
,
self
.
last_universe
)
size_factor
=
self
.
get_wormhole_data
(
"size_factor"
,
universe
=
self
.
last_universe
)
self
.
scale_down
(
self
.
last_universe
,
scale_size
=
self
.
SIZE_SCALE
*
size_factor
)
self
.
scale_down
(
self
.
last_universe
,
scale_size
=
self
.
SIZE_SCALE
*
size_factor
)
self
.
camera_target
.
go_target_stage
=
"last_universe"
self
.
camera_target
.
go_target_stage
=
"last_universe"
self
.
camera_target
.
go_target_hit
=
False
self
.
camera_target
.
go_target_hit
=
False
self
.
scale_down
(
u
)
self
.
scale_down
(
u
)
self
.
camera_target
.
speed
=
self
.
get_wormhole_data
(
"camera_target_speed"
,
2000
)
self
.
camera_target
.
speed
=
self
.
get_wormhole_data
(
"camera_target_speed"
)
camera
.
forward_speed
=
self
.
get_wormhole_data
(
"camera_forward_speed"
,
-
0.1
)
camera
.
forward_speed
=
self
.
get_wormhole_data
(
"camera_forward_speed"
)
self
.
scale_up
(
self
.
current_universe
)
self
.
scale_up
(
self
.
current_universe
)
# self.scale_down(self.target_universe)
# self.scale_down(self.target_universe)
...
@@ -270,13 +266,9 @@ class WormholeSim:
...
@@ -270,13 +266,9 @@ class WormholeSim:
self
.
body_update_reset
()
self
.
body_update_reset
()
self
.
universe_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
# camera_look_at(self.camera_target)
# camera_look_at(self.camera_target)
self
.
camera_target
.
planet
.
collider
=
"sphere"
self
.
camera_target
.
planet
.
collider
=
"sphere"
#
self.camera_target.planet.enabled = False
self
.
camera_target
.
planet
.
enabled
=
False
camera
.
collider
=
"sphere"
camera
.
collider
=
"sphere"
camera
.
current_universe
=
self
.
current_universe
camera
.
current_universe
=
self
.
current_universe
camera_look_at
(
self
.
camera_target
,
rotation_z
=
0
)
camera_look_at
(
self
.
camera_target
,
rotation_z
=
0
)
...
@@ -319,18 +311,19 @@ class WormholeSim:
...
@@ -319,18 +311,19 @@ class WormholeSim:
# self.camera_move(time_data)
# self.camera_move(time_data)
from
ursina
import
time
,
distance
from
ursina
import
time
,
distance
camera_max_speed
=
self
.
get_wormhole_data
(
"camera_max_speed"
,
5000
)
camera_max_speed
=
self
.
get_wormhole_data
(
"camera_max_speed"
)
camera_acc_speed
=
self
.
get_wormhole_data
(
"camera_acc_speed"
,
1.02
)
camera_acc_speed
=
self
.
get_wormhole_data
(
"camera_acc_speed"
)
camera_target_max_speed
=
self
.
get_wormhole_data
(
"camera_target_max_speed"
,
2000
)
camera_target_max_speed
=
self
.
get_wormhole_data
(
"camera_target_max_speed"
,
)
if
self
.
camera_target
.
go_target
is
not
None
:
if
self
.
camera_target
.
go_target
is
not
None
:
go_target
=
self
.
camera_target
.
go_target
.
planet
go_target
=
self
.
camera_target
.
go_target
.
planet
if
self
.
camera_target
.
go_target_stage
==
"around_universe"
:
if
self
.
camera_target
.
go_target_stage
==
"around_universe"
:
around_max_count
:
int
=
300
around_max_count
=
self
.
get_wormhole_data
(
"around_max_count"
)
around_max_speed
:
int
=
-
200
around_max_speed
=
self
.
get_wormhole_data
(
"around_max_speed"
)
around_direction
:
str
=
"right"
around_min_speed
=
self
.
get_wormhole_data
(
"around_min_speed"
)
around_acc_speed
:
int
=
-
2
around_direction
=
self
.
get_wormhole_data
(
"around_direction"
)
around_target
=
camera
around_acc_speed
=
self
.
get_wormhole_data
(
"around_acc_speed"
)
# around_target = camera
around_target
=
go_target
around_target
=
go_target
self
.
camera_target
.
planet
.
look_at
(
around_target
)
self
.
camera_target
.
planet
.
look_at
(
around_target
)
...
@@ -344,13 +337,14 @@ class WormholeSim:
...
@@ -344,13 +337,14 @@ class WormholeSim:
self
.
camera_target
.
around_count
=
0
self
.
camera_target
.
around_count
=
0
if
self
.
camera_target
.
around_count
>
around_max_count
:
if
self
.
camera_target
.
around_count
>
around_max_count
:
if
hasattr
(
self
.
camera_target
,
"around_speed"
)
and
abs
(
self
.
camera_target
.
around_speed
)
>
100
:
if
hasattr
(
self
.
camera_target
,
"around_speed"
)
and
\
self
.
camera_target
.
around_speed
-=
around_acc_speed
*
10
abs
(
self
.
camera_target
.
around_speed
)
>
abs
(
around_min_speed
):
self
.
camera_target
.
around_speed
-=
around_acc_speed
else
:
else
:
delattr
(
self
.
camera_target
,
"around_speed"
)
#
delattr(self.camera_target, "around_speed")
delattr
(
self
.
camera_target
,
"around_count"
)
delattr
(
self
.
camera_target
,
"around_count"
)
self
.
camera_target
.
go_target_stage
=
"last_universe"
self
.
camera_target
.
go_target_stage
=
"last_universe"
self
.
camera_target
.
speed
=
self
.
get_wormhole_data
(
"camera_init_speed"
,
100
)
self
.
camera_target
.
speed
=
self
.
get_wormhole_data
(
"camera_init_speed"
)
else
:
else
:
self
.
camera_target
.
around_speed
+=
around_acc_speed
self
.
camera_target
.
around_speed
+=
around_acc_speed
...
@@ -360,14 +354,14 @@ class WormholeSim:
...
@@ -360,14 +354,14 @@ class WormholeSim:
self
.
camera_target
.
planet
.
position
+=
planet_direction
*
self
.
camera_target
.
around_speed
self
.
camera_target
.
planet
.
position
+=
planet_direction
*
self
.
camera_target
.
around_speed
print
(
"around_speed"
,
self
.
camera_target
.
around_speed
)
print
(
"around_speed"
,
self
.
camera_target
.
around_speed
)
if
hasattr
(
self
.
camera_target
,
"around_count"
):
if
hasattr
(
self
.
camera_target
,
"around_count"
):
self
.
camera_target
.
around_count
+=
1
self
.
camera_target
.
around_count
+=
1
# camera.forward_speed = -0.05
# camera.forward_speed = -0.05
if
camera
.
forward_speed
<
0
:
if
camera
.
forward_speed
<
0
:
camera_forward_acc_speed
=
self
.
get_wormhole_data
(
"camera_forward_acc_speed"
,
0.01
)
camera_forward_acc_speed
=
self
.
get_wormhole_data
(
"camera_forward_acc_speed"
)
camera
.
forward_speed
+=
camera_forward_acc_speed
camera
.
forward_speed
+=
camera_forward_acc_speed
else
:
else
:
camera
.
forward_speed
=
0
camera
.
forward_speed
=
0
...
@@ -388,14 +382,25 @@ class WormholeSim:
...
@@ -388,14 +382,25 @@ class WormholeSim:
self
.
camera_target
.
go_target_hit
=
True
self
.
camera_target
.
go_target_hit
=
True
self
.
camera_target
.
go_target_stage
=
"around_universe"
self
.
camera_target
.
go_target_stage
=
"around_universe"
self
.
camera_target
.
go_target
=
self
.
target_universe
self
.
camera_target
.
go_target
=
self
.
target_universe
self
.
camera_target
.
speed
=
self
.
get_wormhole_data
(
"camera_init_speed"
,
100
)
self
.
camera_target
.
speed
=
self
.
get_wormhole_data
(
"camera_init_speed"
)
camera
.
speed
=
1
# 在看上一个宇宙时候,停留一会
camera
.
speed
=
1
# 在看上一个宇宙时候,停留一会
# # camera.forward_speed = -0.05
# # camera.forward_speed = -0.05
# if camera.forward_speed < 0:
# if camera.forward_speed < 0:
# camera_forward_acc_speed = self.get_wormhole_data("camera_forward_acc_speed"
, 0.01
)
# camera_forward_acc_speed = self.get_wormhole_data("camera_forward_acc_speed")
# camera.forward_speed += camera_forward_acc_speed
# camera.forward_speed += camera_forward_acc_speed
# else:
# else:
# camera.forward_speed = 0
# camera.forward_speed = 0
if
hasattr
(
self
.
camera_target
,
"around_speed"
):
if
abs
(
self
.
camera_target
.
around_speed
)
>
abs
(
10
):
around_acc_speed
=
self
.
get_wormhole_data
(
"around_acc_speed"
)
around_direction
=
self
.
get_wormhole_data
(
"around_direction"
)
planet_direction
=
getattr
(
self
.
camera_target
.
planet
,
around_direction
)
self
.
camera_target
.
around_speed
-=
around_acc_speed
self
.
camera_target
.
planet
.
position
+=
planet_direction
*
self
.
camera_target
.
around_speed
else
:
delattr
(
self
.
camera_target
,
"around_speed"
)
elif
self
.
camera_target
.
go_target_stage
==
"target_universe"
:
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
:
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_hit
=
True
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录