feat: first full movement and enemy prototype
This commit is contained in:
parent
d72a037d5a
commit
eb8dba058d
42 changed files with 3844 additions and 0 deletions
10
project/materials/forest_background.tres
Normal file
10
project/materials/forest_background.tres
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://djdxb1ptl4fkm"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://b2jg52p2jp4m6" path="res://materials/forest_background_albedo.png" id="1"]
|
||||
|
||||
[resource]
|
||||
shading_mode = 0
|
||||
diffuse_mode = 3
|
||||
specular_mode = 2
|
||||
albedo_color = Color(0.262932, 0.262932, 0.262932, 1)
|
||||
albedo_texture = ExtResource("1")
|
||||
BIN
project/materials/forest_background_albedo.png
Normal file
BIN
project/materials/forest_background_albedo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.5 MiB |
35
project/materials/forest_background_albedo.png.import
Normal file
35
project/materials/forest_background_albedo.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b2jg52p2jp4m6"
|
||||
path.s3tc="res://.godot/imported/forest_background_albedo.png-642a0f669ff130342dd8093d23e0d358.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://materials/forest_background_albedo.png"
|
||||
dest_files=["res://.godot/imported/forest_background_albedo.png-642a0f669ff130342dd8093d23e0d358.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
project/materials/grass_albedo.png
Normal file
BIN
project/materials/grass_albedo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 52 KiB |
35
project/materials/grass_albedo.png.import
Normal file
35
project/materials/grass_albedo.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cjamwnt4hrwfv"
|
||||
path.s3tc="res://.godot/imported/grass_albedo.png-57e8badbbc8384a3f2937b01be12939e.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://materials/grass_albedo.png"
|
||||
dest_files=["res://.godot/imported/grass_albedo.png-57e8badbbc8384a3f2937b01be12939e.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
8
project/materials/ground.tres
Normal file
8
project/materials/ground.tres
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://5knww03rsy1a"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://y4ftdhw1dlsv" path="res://materials/ground_albedo.png" id="1"]
|
||||
|
||||
[resource]
|
||||
albedo_texture = ExtResource("1")
|
||||
uv1_scale = Vector3(0.15, 0.15, 0.15)
|
||||
uv1_triplanar = true
|
||||
BIN
project/materials/ground_albedo.png
Normal file
BIN
project/materials/ground_albedo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 167 KiB |
35
project/materials/ground_albedo.png.import
Normal file
35
project/materials/ground_albedo.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://y4ftdhw1dlsv"
|
||||
path.s3tc="res://.godot/imported/ground_albedo.png-cf078738e4e623441210940e255d1b5d.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://materials/ground_albedo.png"
|
||||
dest_files=["res://.godot/imported/ground_albedo.png-cf078738e4e623441210940e255d1b5d.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
project/materials/hair_albedo.png
Normal file
BIN
project/materials/hair_albedo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 MiB |
35
project/materials/hair_albedo.png.import
Normal file
35
project/materials/hair_albedo.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://chn66gpql1jsl"
|
||||
path.s3tc="res://.godot/imported/hair_albedo.png-981c776a21414d965a3bf5beccbe4944.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://materials/hair_albedo.png"
|
||||
dest_files=["res://.godot/imported/hair_albedo.png-981c776a21414d965a3bf5beccbe4944.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
project/materials/leaves_albedo.png
Normal file
BIN
project/materials/leaves_albedo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 MiB |
35
project/materials/leaves_albedo.png.import
Normal file
35
project/materials/leaves_albedo.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d1sxmql1f46f6"
|
||||
path.s3tc="res://.godot/imported/leaves_albedo.png-c7fbf26344a7d1d842a58cae87a5960c.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://materials/leaves_albedo.png"
|
||||
dest_files=["res://.godot/imported/leaves_albedo.png-c7fbf26344a7d1d842a58cae87a5960c.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
project/materials/leaves_normal.png
Normal file
BIN
project/materials/leaves_normal.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.7 MiB |
35
project/materials/leaves_normal.png.import
Normal file
35
project/materials/leaves_normal.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ibjmbcpyrog3"
|
||||
path.s3tc="res://.godot/imported/leaves_normal.png-766133aa6b297b181b025e5d58a9ccb2.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://materials/leaves_normal.png"
|
||||
dest_files=["res://.godot/imported/leaves_normal.png-766133aa6b297b181b025e5d58a9ccb2.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=1
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=1
|
||||
roughness/src_normal="res://materials/leaves_normal.png"
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
project/models/player/character.blend
Normal file
BIN
project/models/player/character.blend
Normal file
Binary file not shown.
53
project/models/player/character.blend.import
Normal file
53
project/models/player/character.blend.import
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://cl7a4q5m73vlw"
|
||||
path="res://.godot/imported/character.blend-b11623af143592406982b1ed3a0f36d8.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/player/character.blend"
|
||||
dest_files=["res://.godot/imported/character.blend-b11623af143592406982b1ed3a0f36d8.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
blender/nodes/visible=0
|
||||
blender/nodes/active_collection_only=false
|
||||
blender/nodes/punctual_lights=true
|
||||
blender/nodes/cameras=true
|
||||
blender/nodes/custom_properties=true
|
||||
blender/nodes/modifiers=1
|
||||
blender/meshes/colors=false
|
||||
blender/meshes/uvs=true
|
||||
blender/meshes/normals=true
|
||||
blender/meshes/export_geometry_nodes_instances=false
|
||||
blender/meshes/tangents=true
|
||||
blender/meshes/skins=2
|
||||
blender/meshes/export_bones_deforming_mesh_only=false
|
||||
blender/materials/unpack_enabled=true
|
||||
blender/materials/export_materials=1
|
||||
blender/animation/limit_playback=true
|
||||
blender/animation/always_sample=true
|
||||
blender/animation/group_tracks=true
|
||||
BIN
project/models/player/character.blend1
Normal file
BIN
project/models/player/character.blend1
Normal file
Binary file not shown.
BIN
project/models/props/tree.blend
Normal file
BIN
project/models/props/tree.blend
Normal file
Binary file not shown.
53
project/models/props/tree.blend.import
Normal file
53
project/models/props/tree.blend.import
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dgsd4ysdm0754"
|
||||
path="res://.godot/imported/tree.blend-8b0773933094aea3a4bad2707cd9b0f0.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/props/tree.blend"
|
||||
dest_files=["res://.godot/imported/tree.blend-8b0773933094aea3a4bad2707cd9b0f0.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
blender/nodes/visible=0
|
||||
blender/nodes/active_collection_only=false
|
||||
blender/nodes/punctual_lights=true
|
||||
blender/nodes/cameras=true
|
||||
blender/nodes/custom_properties=true
|
||||
blender/nodes/modifiers=1
|
||||
blender/meshes/colors=false
|
||||
blender/meshes/uvs=true
|
||||
blender/meshes/normals=true
|
||||
blender/meshes/export_geometry_nodes_instances=false
|
||||
blender/meshes/tangents=true
|
||||
blender/meshes/skins=2
|
||||
blender/meshes/export_bones_deforming_mesh_only=false
|
||||
blender/materials/unpack_enabled=true
|
||||
blender/materials/export_materials=1
|
||||
blender/animation/limit_playback=true
|
||||
blender/animation/always_sample=true
|
||||
blender/animation/group_tracks=true
|
||||
BIN
project/models/props/tree.blend1
Normal file
BIN
project/models/props/tree.blend1
Normal file
Binary file not shown.
4
project/models/props/tree_leaves.tres
Normal file
4
project/models/props/tree_leaves.tres
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
[gd_resource type="StandardMaterial3D" format=3 uid="uid://dqtsjjn0jp0oj"]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color(0.27451, 0.388235, 0.192157, 1)
|
||||
BIN
project/models/terrains/test_level.blend
Normal file
BIN
project/models/terrains/test_level.blend
Normal file
Binary file not shown.
53
project/models/terrains/test_level.blend.import
Normal file
53
project/models/terrains/test_level.blend.import
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://byylmsg7lopet"
|
||||
path="res://.godot/imported/test_level.blend-b1faa0e5781efd0945d28d5955d99765.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/terrains/test_level.blend"
|
||||
dest_files=["res://.godot/imported/test_level.blend-b1faa0e5781efd0945d28d5955d99765.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
blender/nodes/visible=0
|
||||
blender/nodes/active_collection_only=false
|
||||
blender/nodes/punctual_lights=true
|
||||
blender/nodes/cameras=true
|
||||
blender/nodes/custom_properties=true
|
||||
blender/nodes/modifiers=1
|
||||
blender/meshes/colors=false
|
||||
blender/meshes/uvs=true
|
||||
blender/meshes/normals=true
|
||||
blender/meshes/export_geometry_nodes_instances=false
|
||||
blender/meshes/tangents=true
|
||||
blender/meshes/skins=2
|
||||
blender/meshes/export_bones_deforming_mesh_only=false
|
||||
blender/materials/unpack_enabled=true
|
||||
blender/materials/export_materials=1
|
||||
blender/animation/limit_playback=true
|
||||
blender/animation/always_sample=true
|
||||
blender/animation/group_tracks=true
|
||||
BIN
project/models/terrains/test_level.blend1
Normal file
BIN
project/models/terrains/test_level.blend1
Normal file
Binary file not shown.
45
project/objects/player.tscn
Normal file
45
project/objects/player.tscn
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://dcgsrdacswacl"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cl7a4q5m73vlw" path="res://models/player/character.blend" id="1_eqqp1"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_bxedw"]
|
||||
radius = 0.339355
|
||||
height = 2.15448
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_eqqp1"]
|
||||
script/source = "extends Camera3D
|
||||
@export var dist : float = 2.0
|
||||
@export var pivot_height : float = 3.0
|
||||
@export var look_target_height : float = 1.0
|
||||
|
||||
func _ready():
|
||||
self.top_level = true
|
||||
|
||||
func _process(_delta):
|
||||
var target : Vector3 = get_parent().global_position + Vector3(0.0, pivot_height, 0.0)
|
||||
var diff := self.global_position - target
|
||||
self.look_at_from_position(target + diff.normalized() * dist, get_parent().global_position + Vector3(0.0, look_target_height, 0.0))
|
||||
"
|
||||
|
||||
[node name="Player" type="PlayerBody"]
|
||||
wall_min_slide_angle = 0.0
|
||||
floor_max_angle = 0.523599
|
||||
|
||||
[node name="PlayerStateMachine" type="PlayerStateMachine" parent="."]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.05124, 0)
|
||||
shape = SubResource("CapsuleShape3D_bxedw")
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(-1, -6.18173e-08, -6.18173e-08, -6.71313e-08, 0.99594, 0.0900246, 5.60012e-08, 0.0900246, -0.99594, 3.76484e-07, 1.43409, -2.96511)
|
||||
fov = 100.0
|
||||
script = SubResource("GDScript_eqqp1")
|
||||
dist = 1.5
|
||||
pivot_height = 2.5
|
||||
look_target_height = 1.5
|
||||
|
||||
[node name="character" parent="." instance=ExtResource("1_eqqp1")]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[editable path="character"]
|
||||
7
project/objects/tre.tscn
Normal file
7
project/objects/tre.tscn
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://dqjurq1nq1fle"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dgsd4ysdm0754" path="res://models/props/tree.blend" id="1_n3f34"]
|
||||
|
||||
[node name="Node3D" type="Node3D"]
|
||||
|
||||
[node name="tree" parent="." instance=ExtResource("1_n3f34")]
|
||||
87
project/objects/wall_enemy.tscn
Normal file
87
project/objects/wall_enemy.tscn
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://cdmksnsttot3j"]
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_j6w7d"]
|
||||
script/source = "extends CharacterBody3D
|
||||
|
||||
@export var speed : float = 10.0
|
||||
@export var target_distance : float = 5.0
|
||||
@export var detect_distance : float = 100.0
|
||||
@export var max_home_distance : float = 50.0
|
||||
@onready var player := $\"../Player\"
|
||||
@onready var last_velocity : Vector3 = player.velocity
|
||||
@onready var direction := 1.0 if randi() % 2 == 0 else -1.0
|
||||
@onready var home := global_position
|
||||
var homing : bool = true
|
||||
|
||||
func _process(_delta : float):
|
||||
if homing || global_position.distance_squared_to(home) > max_home_distance * max_home_distance:
|
||||
self.homing = true
|
||||
self.process_homing()
|
||||
elif player.global_position.distance_squared_to(global_position) > detect_distance * detect_distance:
|
||||
self.homing = true
|
||||
elif player.velocity.normalized().dot(global_position - player.global_position) > -10.0:
|
||||
self.process_ahead()
|
||||
else:
|
||||
self.process_behind()
|
||||
|
||||
func process_homing():
|
||||
if player.global_position.distance_squared_to(global_position) < detect_distance * detect_distance:
|
||||
self.homing = false
|
||||
else:
|
||||
self.velocity = (Vector3(home.x, global_position.y, home.z) - global_position).normalized() * speed
|
||||
|
||||
func process_ahead():
|
||||
var target : Vector3 = player.global_position + last_velocity
|
||||
target.y = self.global_position.y
|
||||
var forward : Vector3 = player.velocity.normalized()
|
||||
if player.global_position.distance_squared_to(self.global_position) < target_distance * target_distance or abs((player.global_position - global_position).dot(forward.cross(Vector3.UP))) < 0.25:
|
||||
self.velocity = Vector3()
|
||||
return
|
||||
if !forward.is_zero_approx():
|
||||
last_velocity = player.velocity
|
||||
forward.y = 0.0
|
||||
forward = forward.normalized()
|
||||
self.global_basis = Basis(Vector3.UP.cross(forward), Vector3.UP, forward)
|
||||
self.velocity = (target - self.global_position).normalized() * speed
|
||||
|
||||
func process_behind():
|
||||
var diff : Vector3 = player.global_position - global_position
|
||||
var forward := diff.normalized()
|
||||
var left := Vector3.UP.cross(forward)
|
||||
self.velocity = forward + left * direction * min(10.0, diff.length())
|
||||
self.look_at(Vector3(player.global_position.x, global_position.y, player.global_position.z))
|
||||
|
||||
func _physics_process(_delta : float):
|
||||
self.velocity += Vector3(0, -0.25, 0)
|
||||
self.move_and_slide()
|
||||
"
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_j6w7d"]
|
||||
size = Vector3(4.29, 3.77, 2.705)
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_j6w7d"]
|
||||
radius = 1.83616
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_j6w7d"]
|
||||
size = Vector3(4.29688, 3.86325, 2.76758)
|
||||
|
||||
[node name="WallEnemy" type="CharacterBody3D"]
|
||||
collision_layer = 2
|
||||
script = SubResource("GDScript_j6w7d")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.302, 0)
|
||||
mesh = SubResource("BoxMesh_j6w7d")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.83717, 0)
|
||||
shape = SubResource("SphereShape3D_j6w7d")
|
||||
|
||||
[node name="AnimatableBody3D" type="AnimatableBody3D" parent="."]
|
||||
collision_layer = 2
|
||||
collision_mask = 0
|
||||
sync_to_physics = false
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="AnimatableBody3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.29157, 0)
|
||||
shape = SubResource("BoxShape3D_j6w7d")
|
||||
|
|
@ -11,5 +11,39 @@ config_version=5
|
|||
[application]
|
||||
|
||||
config/name="going"
|
||||
run/main_scene="uid://bp0vgy3lnsucd"
|
||||
config/features=PackedStringArray("4.4", "Forward Plus")
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
[input]
|
||||
|
||||
move_left={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_right={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_forward={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_back={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
split_step={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[layer_names]
|
||||
|
||||
3d_physics/layer_1="Platforming"
|
||||
3d_physics/layer_2="Entities"
|
||||
|
|
|
|||
209
project/scenes/test_level.tscn
Normal file
209
project/scenes/test_level.tscn
Normal file
|
|
@ -0,0 +1,209 @@
|
|||
[gd_scene load_steps=8 format=3 uid="uid://bp0vgy3lnsucd"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dcgsrdacswacl" path="res://objects/player.tscn" id="1_2venv"]
|
||||
[ext_resource type="Material" uid="uid://5knww03rsy1a" path="res://materials/ground.tres" id="2_paw1w"]
|
||||
[ext_resource type="PackedScene" uid="uid://dgsd4ysdm0754" path="res://models/props/tree.blend" id="3_j6w7d"]
|
||||
[ext_resource type="PackedScene" uid="uid://cdmksnsttot3j" path="res://objects/wall_enemy.tscn" id="4_x4b8f"]
|
||||
|
||||
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_j6w7d"]
|
||||
sky_top_color = Color(0.0825, 0.277292, 0.55, 1)
|
||||
sky_horizon_color = Color(0.4422, 0.529523, 0.67, 1)
|
||||
ground_bottom_color = Color(0.132, 0.2, 0.134267, 1)
|
||||
ground_horizon_color = Color(0.4087, 0.508865, 0.67, 1)
|
||||
|
||||
[sub_resource type="Sky" id="Sky_x4b8f"]
|
||||
sky_material = SubResource("ProceduralSkyMaterial_j6w7d")
|
||||
|
||||
[sub_resource type="Environment" id="Environment_tmr53"]
|
||||
background_mode = 2
|
||||
sky = SubResource("Sky_x4b8f")
|
||||
ambient_light_source = 3
|
||||
|
||||
[node name="Level" type="Node3D"]
|
||||
|
||||
[node name="DirectionalLight3D2" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(-0.266483, -0.681371, -0.681704, 2.11204e-08, -0.707279, 0.706934, -0.96384, 0.188386, 0.188478, 0, 2.9317, 0)
|
||||
shadow_enabled = true
|
||||
directional_shadow_split_1 = 0.0
|
||||
directional_shadow_blend_splits = true
|
||||
directional_shadow_fade_start = 0.529
|
||||
directional_shadow_pancake_size = 0.0
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource("Environment_tmr53")
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("1_2venv")]
|
||||
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -2.51976, 0.505302, 31.1225)
|
||||
collision_layer = 2
|
||||
collision_mask = 3
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."]
|
||||
material_override = ExtResource("2_paw1w")
|
||||
use_collision = true
|
||||
collision_mask = 0
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.76738, 0, -46.1384)
|
||||
size = Vector3(348.365, 1, 313.019)
|
||||
|
||||
[node name="CSGBox3D5" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 112.066, 6.68009, -45.6989)
|
||||
size = Vector3(21.0713, 13.992, 304.707)
|
||||
|
||||
[node name="CSGBox3D7" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(0.495368, 0, 0.868683, 0, 1, 0, -0.868683, 0, 0.495368, 14.1738, 6.68009, -130.707)
|
||||
size = Vector3(21.0713, 13.992, 304.707)
|
||||
|
||||
[node name="CSGBox3D8" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(-0.46722, 3.68856e-08, 0.884141, -6.75675e-10, 1, -4.20762e-08, -0.884141, -2.02562e-08, -0.46722, -82.5379, 6.68009, -120.633)
|
||||
size = Vector3(21.0713, 13.992, 304.707)
|
||||
|
||||
[node name="CSGBox3D9" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(-0.995971, 3.58765e-08, -0.0896765, 4.18912e-08, 1, -6.51885e-08, 0.0896765, -6.86825e-08, -0.995971, -135.259, 6.68009, 9.65932)
|
||||
size = Vector3(21.0713, 13.992, 304.707)
|
||||
|
||||
[node name="CSGBox3D10" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(0.0969229, -2.52315e-08, -0.995292, 8.14769e-08, 1, -1.74165e-08, 0.995292, -7.94052e-08, 0.0969229, -16.3844, 6.68009, 83.5363)
|
||||
size = Vector3(21.0713, 13.992, 304.707)
|
||||
|
||||
[node name="CSGBox3D6" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.985839, -0.167698, 0, 0.167698, 0.985839, -2.10367, -0.514863, -73.0895)
|
||||
size = Vector3(21.0713, 9.59839, 48.4176)
|
||||
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(0.992826, 0, -0.119565, 0, 1, 0, 0.119565, 0, 0.992826, 36.8326, 7.17883, 25.3075)
|
||||
size = Vector3(58.4217, 13.992, 35.8203)
|
||||
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(0.994166, 0, 0.107861, 0, 1, 0, -0.107861, 0, 0.994166, -26.921, 7.17883, 30.6887)
|
||||
size = Vector3(33.525, 13.992, 23.5235)
|
||||
|
||||
[node name="CSGBox3D4" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(-0.994886, 0, -0.101005, 0, 1, 0, 0.101005, 0, -0.994886, -74.3581, 7.17883, -23.1177)
|
||||
size = Vector3(21.0713, 13.992, 29.5631)
|
||||
|
||||
[node name="CSGBox3D17" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(0.0501054, 0, -0.998744, 0, 1, 0, 0.998744, 0, 0.0501054, -31.5186, 7.17883, -17.6439)
|
||||
size = Vector3(52.6972, 13.992, 29.5631)
|
||||
|
||||
[node name="CSGBox3D18" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(-0.99792, -3.21504e-09, -0.0644627, -3.20072e-09, 1, -3.25401e-10, 0.0644627, -1.18395e-10, -0.99792, -24.4708, 7.17883, 71.5412)
|
||||
size = Vector3(89.7069, 13.992, 29.5631)
|
||||
|
||||
[node name="CSGBox3D11" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(0.0805638, 0, 0.996749, 0, 1, 0, -0.996749, 0, 0.0805638, -52.543, 7.17883, -73.5605)
|
||||
size = Vector3(33.0723, 13.992, 32.853)
|
||||
|
||||
[node name="CSGBox3D12" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(0.0805638, 0, 0.996749, 0, 1, 0, -0.996749, 0, 0.0805638, -82.4276, 7.17883, 22.5865)
|
||||
size = Vector3(34.7832, 13.992, 47.5163)
|
||||
|
||||
[node name="CSGBox3D19" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(0.0137188, 2.19264e-08, -0.999906, 8.12172e-08, 1, 2.30427e-08, 0.999906, -8.15257e-08, 0.0137188, -96.5416, 7.17883, 49.5459)
|
||||
size = Vector3(27.5021, 13.992, 20.9295)
|
||||
|
||||
[node name="CSGBox3D13" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(0.0014831, 3.45693e-09, 0.999998, -1.42038e-10, 1, -3.45673e-09, -0.999998, -1.3691e-10, 0.0014831, 13.6153, 7.17883, -80.6041)
|
||||
size = Vector3(31.3782, 13.992, 20.3278)
|
||||
|
||||
[node name="CSGBox3D20" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(0.498033, -1.86452e-08, 0.867157, 5.66462e-09, 1, 1.82482e-08, -0.867157, -4.17607e-09, 0.498033, 33.162, 7.17883, -72.771)
|
||||
size = Vector3(31.3782, 13.992, 39.8747)
|
||||
|
||||
[node name="CSGBox3D14" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(-0.0663268, 0, 0.997798, 0, 1, 0, -0.997798, 0, -0.0663268, -26.1951, 7.17883, -85.7654)
|
||||
size = Vector3(48.4302, 13.992, 29.5631)
|
||||
|
||||
[node name="CSGBox3D15" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(0.00352485, -1.48914e-08, 0.999994, -2.56226e-09, 1, 1.49005e-08, -0.999994, -2.61477e-09, 0.00352485, -110.126, 7.17883, -80.68)
|
||||
size = Vector3(64.0211, 13.992, 55.2003)
|
||||
|
||||
[node name="CSGBox3D16" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(-0.0429226, 0, 0.999078, 0, 1, 0, -0.999078, 0, -0.0429226, 25.5569, 7.17883, -25.3028)
|
||||
size = Vector3(34.6213, 13.992, 29.5631)
|
||||
|
||||
[node name="CSGBox3D22" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(-0.963275, -1.35554e-08, 0.268516, -1.36363e-08, 1, 1.56402e-09, -0.268516, -2.15497e-09, -0.963275, 67.5984, 7.17883, -15.9523)
|
||||
size = Vector3(33.4785, 13.992, 30.2278)
|
||||
|
||||
[node name="CSGBox3D23" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||
transform = Transform3D(-0.987724, -8.69745e-09, 0.15621, -8.72721e-09, 1, 4.95334e-10, -0.15621, -8.74023e-10, -0.987724, 89.3285, 7.17883, -64.4714)
|
||||
size = Vector3(45.022, 13.992, 47.936)
|
||||
|
||||
[node name="tree" parent="." instance=ExtResource("3_j6w7d")]
|
||||
transform = Transform3D(47.1373, 0, 0, 0, 47.1373, 0, 0, 0, 47.1373, -8.21284, -90.0106, -698.149)
|
||||
|
||||
[node name="WallEnemy" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 92.6076, 0.500008, -4.21022)
|
||||
|
||||
[node name="WallEnemy2" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.82557, 0.500008, -23.3368)
|
||||
|
||||
[node name="WallEnemy6" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 69.2337, 0.499985, 6.60841)
|
||||
|
||||
[node name="WallEnemy8" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 66.3735, 0.5, -36.0839)
|
||||
|
||||
[node name="WallEnemy18" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 47.8969, 0.5, -41.5884)
|
||||
|
||||
[node name="WallEnemy9" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -55.6647, 0.500038, 28.0866)
|
||||
|
||||
[node name="WallEnemy19" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -35.817, 0.500038, 50.7088)
|
||||
|
||||
[node name="WallEnemy20" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -53.4997, 0.5, -22.2078)
|
||||
|
||||
[node name="WallEnemy12" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -110.48, 0.594315, 8.49598)
|
||||
|
||||
[node name="WallEnemy13" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -101.93, 0.594315, -25.3139)
|
||||
|
||||
[node name="WallEnemy14" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -112.681, 0.500122, 55.7373)
|
||||
|
||||
[node name="WallEnemy15" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -78.3017, 0.594315, 0.732658)
|
||||
|
||||
[node name="WallEnemy16" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 85.9813, 0.594315, 32.7154)
|
||||
|
||||
[node name="WallEnemy17" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 58.4806, 0.594315, 55.6496)
|
||||
|
||||
[node name="WallEnemy4" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -76.4011, 0.5, 66.5686)
|
||||
|
||||
[node name="WallEnemy5" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -41.8591, 0.5, -118.416)
|
||||
|
||||
[node name="WallEnemy10" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 19.4218, 0.500015, -104.974)
|
||||
|
||||
[node name="WallEnemy11" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.8844, 0.499985, -123.468)
|
||||
|
||||
[node name="WallEnemy21" parent="." instance=ExtResource("4_x4b8f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -74.085, 0.5, -77.013)
|
||||
|
||||
[node name="tree2" parent="." instance=ExtResource("3_j6w7d")]
|
||||
transform = Transform3D(-0.99367, 0, -0.112336, 0, 1, 0, 0.112336, 0, -0.99367, -87.2561, 0.446493, -28.6384)
|
||||
|
||||
[node name="tree3" parent="." instance=ExtResource("3_j6w7d")]
|
||||
transform = Transform3D(-0.988367, 0, 0.152089, 0, 1, 0, -0.152089, 0, -0.988367, -87.8342, 0.446493, -33.7517)
|
||||
|
||||
[node name="tree4" parent="." instance=ExtResource("3_j6w7d")]
|
||||
transform = Transform3D(-0.776311, 0, 0.630351, 0, 1, 0, -0.630351, 0, -0.776311, -85.8638, 0.446493, -38.0303)
|
||||
|
||||
[node name="tree5" parent="." instance=ExtResource("3_j6w7d")]
|
||||
transform = Transform3D(-0.131564, 0, 0.991308, 0, 1, 0, -0.991308, 0, -0.131564, -81.0296, 0.446493, -38.8804)
|
||||
|
||||
[node name="tree6" parent="." instance=ExtResource("3_j6w7d")]
|
||||
transform = Transform3D(-0.131564, 0, 0.991308, 0, 1, 0, -0.991308, 0, -0.131564, -74.547, 0.446493, -39.3256)
|
||||
|
||||
[node name="tree7" parent="." instance=ExtResource("3_j6w7d")]
|
||||
transform = Transform3D(-0.0441948, 0, 0.999023, 0, 1, 0, -0.999023, 0, -0.0441948, -67.3778, 0.446493, -39.9096)
|
||||
Loading…
Add table
Add a link
Reference in a new issue