Compare commits

...

11 Commits

Author SHA1 Message Date
4224333963 improved weapon system and cleaner weapon setup
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 10m20s
2026-01-19 17:25:12 +01:00
4dd48bed70 orienting flying sword 2026-01-19 16:55:22 +01:00
abe6f42a3b some juice work on the first person weapon 2026-01-19 16:46:00 +01:00
27c67dbdd9 Some swords
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 10m0s
2026-01-18 18:34:11 +01:00
98ed361546 reorganizing stuff
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 17s
Create tag and build when new code gets to main / Export (push) Successful in 9m26s
2026-01-18 17:04:28 +01:00
eb1c7f78fa flying knockback as well
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Has been cancelled
2026-01-18 16:58:23 +01:00
35b9ea383c knockback component 2026-01-18 12:39:01 +01:00
9690280cd7 better spawning
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 10m36s
2026-01-18 10:27:21 +01:00
65538495c4 spawning
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 9m59s
2026-01-17 23:18:06 +01:00
561e026834 ok so this should be the way to go
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 10m24s
2026-01-17 21:51:57 +01:00
7c74b8b5e5 removing broken ABC and refactoring enemy movement
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 10m2s
2026-01-17 19:55:51 +01:00
128 changed files with 2198 additions and 579 deletions

View File

@@ -123,7 +123,6 @@
<Content Include="menus\scripts\level_state.gd.uid" />
</ItemGroup>
<ItemGroup>
<Folder Include="ABCs\" />
<Folder Include="addons\" />
</ItemGroup>
<ItemGroup>

View File

@@ -0,0 +1 @@
https://craftpix.net/file-licenses/

BIN
assets/swords/fbx/Texture_MAp_sword.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,42 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://qtu5ue4ixkwm"
path.s3tc="res://.godot/imported/Texture_MAp_sword.png-2af3c78c4883b079065f66f1feac90e4.s3tc.ctex"
path.etc2="res://.godot/imported/Texture_MAp_sword.png-2af3c78c4883b079065f66f1feac90e4.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://assets/swords/fbx/Texture_MAp_sword.png"
dest_files=["res://.godot/imported/Texture_MAp_sword.png-2af3c78c4883b079065f66f1feac90e4.s3tc.ctex", "res://.godot/imported/Texture_MAp_sword.png-2af3c78c4883b079065f66f1feac90e4.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
assets/swords/fbx/_sword_1.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://pgd71ofvqsmf"
path="res://.godot/imported/_sword_1.fbx-4fe48a2bb63be1f77a3cf7c7a5c46a2d.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_1.fbx"
dest_files=["res://.godot/imported/_sword_1.fbx-4fe48a2bb63be1f77a3cf7c7a5c46a2d.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_10.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dc867it2djc0j"
path="res://.godot/imported/_sword_10.fbx-26a7b1fe725211263b2c77d9a7dc6a5a.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_10.fbx"
dest_files=["res://.godot/imported/_sword_10.fbx-26a7b1fe725211263b2c77d9a7dc6a5a.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_11.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://b817njxdpygk4"
path="res://.godot/imported/_sword_11.fbx-6b498f728a419e5cdf7015937648dc0c.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_11.fbx"
dest_files=["res://.godot/imported/_sword_11.fbx-6b498f728a419e5cdf7015937648dc0c.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_12.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://vfwwh86wf1ds"
path="res://.godot/imported/_sword_12.fbx-2e156e5fe829c5a90f46f02befc39030.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_12.fbx"
dest_files=["res://.godot/imported/_sword_12.fbx-2e156e5fe829c5a90f46f02befc39030.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_13.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bdo4w8qjps8k1"
path="res://.godot/imported/_sword_13.fbx-0a46eb67177c7e5eef79859c7c94d975.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_13.fbx"
dest_files=["res://.godot/imported/_sword_13.fbx-0a46eb67177c7e5eef79859c7c94d975.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_15.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bo14ktg303cci"
path="res://.godot/imported/_sword_15.fbx-c121fcd47cad6f0460d63d2867e3fecd.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_15.fbx"
dest_files=["res://.godot/imported/_sword_15.fbx-c121fcd47cad6f0460d63d2867e3fecd.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_16.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bu55u3oj7roer"
path="res://.godot/imported/_sword_16.fbx-6c55a39e578558d03763795cf751f0e0.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_16.fbx"
dest_files=["res://.godot/imported/_sword_16.fbx-6c55a39e578558d03763795cf751f0e0.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_17.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://b4gescssbshia"
path="res://.godot/imported/_sword_17.fbx-b5a7ae5038b5033dcc9a27b689bdf110.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_17.fbx"
dest_files=["res://.godot/imported/_sword_17.fbx-b5a7ae5038b5033dcc9a27b689bdf110.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_18.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://fm4607vrkr5l"
path="res://.godot/imported/_sword_18.fbx-eda4d9cb8bcde4d55ac99ec09b545356.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_18.fbx"
dest_files=["res://.godot/imported/_sword_18.fbx-eda4d9cb8bcde4d55ac99ec09b545356.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_19.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://c8lx8075hl8cw"
path="res://.godot/imported/_sword_19.fbx-eb227611876b1946d2773f4e1a392c73.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_19.fbx"
dest_files=["res://.godot/imported/_sword_19.fbx-eb227611876b1946d2773f4e1a392c73.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_2.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dw35utjjm8gb6"
path="res://.godot/imported/_sword_2.fbx-75c5e721ad94d604d3e69e3919dbb3c5.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_2.fbx"
dest_files=["res://.godot/imported/_sword_2.fbx-75c5e721ad94d604d3e69e3919dbb3c5.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_20.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dc65lwlhqbmqd"
path="res://.godot/imported/_sword_20.fbx-0617cc5a77fb88a346d20ddf46355225.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_20.fbx"
dest_files=["res://.godot/imported/_sword_20.fbx-0617cc5a77fb88a346d20ddf46355225.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_21.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://wawgl6e0h6tj"
path="res://.godot/imported/_sword_21.fbx-7200ded408f5953cbc70877022c333a5.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_21.fbx"
dest_files=["res://.godot/imported/_sword_21.fbx-7200ded408f5953cbc70877022c333a5.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_22.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://b0x5klx5auig6"
path="res://.godot/imported/_sword_22.fbx-c6ed8d5dbb3050e43ea62d2e5ccc565c.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_22.fbx"
dest_files=["res://.godot/imported/_sword_22.fbx-c6ed8d5dbb3050e43ea62d2e5ccc565c.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_23.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dqmfrrbc3ewal"
path="res://.godot/imported/_sword_23.fbx-493172d63aace2a9301836d894a62890.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_23.fbx"
dest_files=["res://.godot/imported/_sword_23.fbx-493172d63aace2a9301836d894a62890.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_24.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://b1qfs4yugw3ph"
path="res://.godot/imported/_sword_24.fbx-0adbb8989d27c2a804efc391a50e4c7b.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_24.fbx"
dest_files=["res://.godot/imported/_sword_24.fbx-0adbb8989d27c2a804efc391a50e4c7b.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_3.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://sdufabwshlrj"
path="res://.godot/imported/_sword_3.fbx-04a6f1a0f269fa6ff0c8cba8aed2c8b8.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_3.fbx"
dest_files=["res://.godot/imported/_sword_3.fbx-04a6f1a0f269fa6ff0c8cba8aed2c8b8.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_4.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dmiewrsn2o1xt"
path="res://.godot/imported/_sword_4.fbx-25a5609f8f6918f76d0ed4b3e8e55618.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_4.fbx"
dest_files=["res://.godot/imported/_sword_4.fbx-25a5609f8f6918f76d0ed4b3e8e55618.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_5.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://brogj578mkndo"
path="res://.godot/imported/_sword_5.fbx-9d38cdd495cd4ff9bc2758f9d1e01b7e.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_5.fbx"
dest_files=["res://.godot/imported/_sword_5.fbx-9d38cdd495cd4ff9bc2758f9d1e01b7e.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_6.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://tol5v11e7bhx"
path="res://.godot/imported/_sword_6.fbx-65a0a7d72918e7512792cfa786f56e6e.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_6.fbx"
dest_files=["res://.godot/imported/_sword_6.fbx-65a0a7d72918e7512792cfa786f56e6e.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_7.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bag0oxbvo7ya7"
path="res://.godot/imported/_sword_7.fbx-5a2d61c3625b87c9b91bab13a45ef09e.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_7.fbx"
dest_files=["res://.godot/imported/_sword_7.fbx-5a2d61c3625b87c9b91bab13a45ef09e.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_8.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://b7ibkej2rcs03"
path="res://.godot/imported/_sword_8.fbx-84c74a27d77c6f3455ecd47693de31ef.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_8.fbx"
dest_files=["res://.godot/imported/_sword_8.fbx-84c74a27d77c6f3455ecd47693de31ef.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/_sword_9.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://7widux5ck7kg"
path="res://.godot/imported/_sword_9.fbx-83e0a99c6bcb7a2f902fc35d3c339287.scn"
[deps]
source_file="res://assets/swords/fbx/_sword_9.fbx"
dest_files=["res://.godot/imported/_sword_9.fbx-83e0a99c6bcb7a2f902fc35d3c339287.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

BIN
assets/swords/fbx/sword_14.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://3gho2priko7i"
path="res://.godot/imported/sword_14.fbx-43a1e42a5de4603e1b903e8a8848e2b4.scn"
[deps]
source_file="res://assets/swords/fbx/sword_14.fbx"
dest_files=["res://.godot/imported/sword_14.fbx-43a1e42a5de4603e1b903e8a8848e2b4.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

2
assets/swords/readme.txt Normal file
View File

@@ -0,0 +1,2 @@
Font that was used for the background of the preview:
https://www.dafont.com/the-bold-font.font

View File

@@ -0,0 +1,13 @@
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://buevqo8w8fq75"]
[ext_resource type="Texture2D" uid="uid://qtu5ue4ixkwm" path="res://assets/swords/fbx/Texture_MAp_sword.png" id="1_ke6g8"]
[resource]
resource_name = "Sword_mat_map"
vertex_color_use_as_albedo = true
albedo_texture = ExtResource("1_ke6g8")
emission_enabled = true
use_z_clip_scale = true
z_clip_scale = 0.5
use_fov_override = true
fov_override = 30.0

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

BIN
assets/swords/texture/Texture_MAp_sword.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://br8gpitkrtroi"
path="res://.godot/imported/Texture_MAp_sword.png-5d2e59afea3d1af36913e0e3757cf603.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/swords/texture/Texture_MAp_sword.png"
dest_files=["res://.godot/imported/Texture_MAp_sword.png-5d2e59afea3d1af36913e0e3757cf603.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

View File

@@ -0,0 +1,23 @@
using Godot;
using System;
using Movementtests.interfaces;
[GlobalClass]
public partial class CDamageable : Node, IDamageable
{
public event Action<IDamageable, DamageRecord> DamageTaken;
[Export]
public RDamageModifier[] DamageModifiers { get; set; }
public DamageRecord TakeDamage(DamageRecord damageRecord)
{
var finalDamage = 0f;
foreach (var damageable in DamageModifiers.ToIDamageables())
finalDamage += damageable.TakeDamage(damageRecord).Damage.DamageDealt;
var finalDamageRecord = damageRecord with { Damage = new RDamage(finalDamage, damageRecord.Damage.DamageType) };
DamageTaken?.Invoke(this, finalDamageRecord);
return finalDamageRecord;
}
}

View File

@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://hpsg4fqwrx1u"]
[ext_resource type="Script" uid="uid://b0u23nkpaimyc" path="res://scenes/damage/CDamageable.cs" id="1_qp8bd"]
[ext_resource type="Script" uid="uid://b0u23nkpaimyc" path="res://components/damage/CDamageable.cs" id="1_qp8bd"]
[node name="CDamageable" type="Node"]
script = ExtResource("1_qp8bd")

View File

@@ -0,0 +1,37 @@
using Godot;
using System;
using Movementtests.interfaces;
using Movementtests.systems.damage;
[GlobalClass]
public partial class RDamageModifier : Resource, IDamageable
{
public event Action<IDamageable, DamageRecord> DamageTaken;
[Export]
public EDamageTypes DamageType = EDamageTypes.Normal;
[Export]
public float Modifier = 1.0f;
public RDamageModifier()
{
Modifier = 1.0f;
DamageType = EDamageTypes.Normal;
}
public RDamageModifier(EDamageTypes damageType, float modifier)
{
Modifier = modifier;
DamageType = damageType;
}
public DamageRecord TakeDamage(DamageRecord damageRecord)
{
if (damageRecord.Damage.DamageType != DamageType)
return damageRecord with { Damage = new RDamage(0, damageRecord.Damage.DamageType) };
var finalDamage = damageRecord.Damage.DamageDealt * Modifier;
var finalDamageRecord = damageRecord with { Damage = new RDamage(finalDamage, damageRecord.Damage.DamageType) };
DamageTaken?.Invoke(this, finalDamageRecord);
return finalDamageRecord;
}
}

View File

@@ -0,0 +1,33 @@
using Godot;
using System;
using Movementtests.interfaces;
[GlobalClass]
public partial class CHealth : Node, IHealthable
{
public event Action<IHealthable, float> HealthChanged;
public event Action<IHealthable> HealthDepleted;
[Export]
public RHealth RHealth { get; set; }
public float CurrentHealth { get; set; }
public override void _Ready()
{
CurrentHealth = RHealth.StartingHealth;
}
public void ReduceHealth(IDamageable source, DamageRecord damageRecord)
{
GD.Print(CurrentHealth);
CurrentHealth -= damageRecord.Damage.DamageDealt;
HealthChanged?.Invoke(this, CurrentHealth);
if (CurrentHealth <= 0)
{
CurrentHealth = 0;
HealthDepleted?.Invoke(this);
}
}
}

View File

@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://c4ikbhojckpnc"]
[ext_resource type="Script" uid="uid://bjwrpv3jpsc1e" path="res://scenes/health/CHealth.cs" id="1_75uyt"]
[ext_resource type="Script" uid="uid://bjwrpv3jpsc1e" path="res://components/health/CHealth.cs" id="1_75uyt"]
[node name="CHealth" type="Node"]
script = ExtResource("1_75uyt")

View File

@@ -5,8 +5,8 @@ using Movementtests.interfaces;
[GlobalClass]
public partial class RDeathEffect : Resource, IKillable
{
public void Kill()
public void Kill(IHealthable source)
{
GD.Print("Death Effect triggered");
GD.Print($"Death Effect triggered on {source}");
}
}

View File

@@ -0,0 +1,25 @@
using Godot;
using System;
using Movementtests.interfaces;
[GlobalClass]
public partial class CKnockback : Node3D, IKnockbackable
{
[Export] public RKnockback RKnockback { get; set;}
private DamageRecord _damageRecord = null;
public void RegisterKnockback(IDamageable source, DamageRecord damageRecord)
{
_damageRecord = damageRecord;
}
public Vector3 ComputeKnockback()
{
if (_damageRecord == null) return Vector3.Zero;
var knockbackDirection = GlobalPosition - _damageRecord.Source.GlobalPosition;
_damageRecord = null;
return knockbackDirection.Normalized() * RKnockback.Modifier;
}
}

View File

@@ -0,0 +1 @@
uid://b8dprpcjeac7e

View File

@@ -0,0 +1,12 @@
[gd_scene load_steps=4 format=3 uid="uid://bctpe34ddamg5"]
[ext_resource type="Script" uid="uid://b8dprpcjeac7e" path="res://components/knockback/CKnockback.cs" id="1_ix2yg"]
[ext_resource type="Script" uid="uid://b44cse62qru7j" path="res://components/knockback/RKnockback.cs" id="2_uqiml"]
[sub_resource type="Resource" id="Resource_gbu2d"]
script = ExtResource("2_uqiml")
metadata/_custom_type_script = "uid://b44cse62qru7j"
[node name="CKnockback" type="Node3D"]
script = ExtResource("1_ix2yg")
RKnockback = SubResource("Resource_gbu2d")

View File

@@ -0,0 +1,19 @@
using Godot;
using System;
using Movementtests.interfaces;
[GlobalClass]
public partial class RKnockback : Resource
{
[Export]
public float Modifier = 1.0f;
public RKnockback()
{
Modifier = 1.0f;
}
public RKnockback(float modifier)
{
Modifier = modifier;
}
}

View File

@@ -0,0 +1 @@
uid://b44cse62qru7j

View File

@@ -0,0 +1,61 @@
using Godot;
using Movementtests.interfaces;
namespace Movementtests.scenes.movement;
public partial class CFlyingMovement : Node3D, IMoveable
{
[Export] public RMovement RMovement { get; set; }
[Export(PropertyHint.Layers3DPhysics)]
public uint TerrainCollision { get; set; } = 1;
private bool _movingToDesiredHeight = true;
private Vector3 _randomDirection;
public override void _Ready()
{
_randomDirection = new Vector3(GD.RandRange(-1, 1), 1, GD.RandRange(-1, 1)).Normalized();
}
public Vector3 ComputeVelocity(MovementInputs inputs)
{
var velocity = inputs.Velocity;
var spaceState = GetWorld3D().DirectSpaceState;
var target = inputs.TargetLocation;
var direction = (target - GlobalPosition).Normalized();
// Check if we have a direct line of sight to the player
if (!_movingToDesiredHeight)
{
velocity = velocity.Lerp(direction * RMovement.Speed, (float) inputs.delta * RMovement.Acceleration);
var query = PhysicsRayQueryParameters3D.Create(GlobalPosition, target, TerrainCollision);
var result = spaceState.IntersectRay(query);
if (result.Count > 0)
{
_movingToDesiredHeight = true;
_randomDirection = new Vector3(GD.RandRange(-1, 1), 1, GD.RandRange(-1, 1)).Normalized();
}
}
else
{
velocity = velocity.Lerp(_randomDirection * RMovement.Speed, (float) inputs.delta * RMovement.Acceleration);
var groundQuery = PhysicsRayQueryParameters3D.Create(GlobalPosition, GlobalPosition+Vector3.Down*RMovement.TargetHeight, TerrainCollision);
var groundResult = spaceState.IntersectRay(groundQuery);
if (groundResult.Count == 0)
{
velocity.Y = 0;
var query = PhysicsRayQueryParameters3D.Create(GlobalPosition, target, TerrainCollision);
var result = spaceState.IntersectRay(query);
if (result.Count == 0)
{
_movingToDesiredHeight = false;
}
}
}
return velocity;
}
}

View File

@@ -0,0 +1 @@
uid://cps1rbkxs3nvq

View File

@@ -0,0 +1,7 @@
[gd_scene load_steps=2 format=3 uid="uid://dmw5ibwrb483f"]
[ext_resource type="Script" uid="uid://cps1rbkxs3nvq" path="res://components/movement/CFlyingMovement.cs" id="1_i26q2"]
[node name="CFlyingMovement" type="Node3D"]
script = ExtResource("1_i26q2")
CollisionMask = 256

View File

@@ -0,0 +1,34 @@
using Godot;
using Movementtests.interfaces;
namespace Movementtests.scenes.movement;
public partial class CGroundedMovement : Node3D, IMoveable
{
[Export] public RMovement RMovement { get; set; }
[Export]
public RayCast3D WallInFrontRayCast { get; set; }
public Vector3 ComputeVelocity(MovementInputs inputs)
{
var velocity = inputs.Velocity;
var target = inputs.TargetLocation;
var direction = (target - GlobalPosition).Normalized();
var targetPlane = new Vector3(target.X, GlobalPosition.Y, target.Z);
LookAt(targetPlane);
float xAcc = (float) Mathf.Lerp(velocity.X, direction.X * RMovement.Speed, inputs.delta * RMovement.Acceleration);
float zAcc = (float) Mathf.Lerp(velocity.Z, direction.Z * RMovement.Speed, inputs.delta * RMovement.Acceleration);
velocity.X = xAcc;
velocity.Z = zAcc;
if (WallInFrontRayCast.IsColliding())
velocity.Y = RMovement.Speed;
else if (!inputs.isOnFloor)
velocity += inputs.gravity * (float)inputs.delta * RMovement.GravityModifier;
return velocity;
}
}

View File

@@ -0,0 +1 @@
uid://bdag2eeixw2lt

View File

@@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://dbr7ioio158ew"]
[ext_resource type="Script" uid="uid://bdag2eeixw2lt" path="res://components/movement/CGroundedMovement.cs" id="1_e0agf"]
[node name="CGroundedMovement" type="Node3D"]
script = ExtResource("1_e0agf")

View File

@@ -0,0 +1,31 @@
using Godot;
using System;
[GlobalClass]
public partial class RMovement : Resource
{
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float Speed { get; set;}
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float Acceleration { get; set;}
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float GravityModifier { get; set;}
[Export(PropertyHint.Range, "0,20,1,or_greater")]
public float TargetHeight { get; set;}
public RMovement()
{
Speed = 3.0f;
Acceleration = 1.0f;
GravityModifier = 1.0f;
TargetHeight = 10.0f;
}
public RMovement(float speed, float acceleration, float gravityModifier, float targetHeight)
{
Speed = speed;
Acceleration = acceleration;
GravityModifier = gravityModifier;
TargetHeight = targetHeight;
}
}

View File

@@ -0,0 +1 @@
uid://dtpxijlnb2c5

View File

@@ -0,0 +1,9 @@
using Godot;
namespace Movementtests.interfaces;
public interface IDamageDealer
{
[Export]
RDamage RDamage { get; set; }
}

View File

@@ -1,9 +0,0 @@
using Godot;
namespace Movementtests.interfaces;
public interface IDamageMaker
{
[Export]
RDamage GetDamageDealt { get; set; }
}

View File

@@ -1,8 +1,12 @@
using System;
using Godot;
namespace Movementtests.interfaces;
public record DamageRecord(Node3D Source, RDamage Damage);
public interface IDamageable
{
float TakeDamage(RDamage damage);
event Action<IDamageable, DamageRecord> DamageTaken;
DamageRecord TakeDamage(DamageRecord damageRecord);
}

View File

@@ -1,6 +1,16 @@
using System;
using Godot;
namespace Movementtests.interfaces;
public interface IHealthable
{
void ReduceHealth(float amount);
event Action<IHealthable, float> HealthChanged;
event Action<IHealthable> HealthDepleted;
[Export] RHealth RHealth { get; set; }
float CurrentHealth { get; set; }
void ReduceHealth(IDamageable source, DamageRecord damageRecord);
}

View File

@@ -2,5 +2,5 @@ namespace Movementtests.interfaces;
public interface IKillable
{
void Kill();
void Kill(IHealthable source);
}

View File

@@ -1,6 +1,11 @@
using Godot;
namespace Movementtests.interfaces;
public interface IKnockbackable
{
[Export] RKnockback RKnockback { get; set;}
public void RegisterKnockback(IDamageable source, DamageRecord damageRecord);
public Vector3 ComputeKnockback();
}

16
interfaces/IMoveable.cs Normal file
View File

@@ -0,0 +1,16 @@
using Godot;
namespace Movementtests.interfaces;
public record MovementInputs(
Vector3 Velocity = default,
Vector3 TargetLocation = default,
bool isOnFloor = false,
Vector3 gravity = default,
double delta = 0);
public interface IMoveable
{
[Export] RMovement RMovement { get; set; }
Vector3 ComputeVelocity(MovementInputs inputs);
}

View File

@@ -0,0 +1 @@
uid://dp6v42a2iwlbs

View File

@@ -3,5 +3,5 @@ using Godot;
interface ISpawnable
{
void TestMethod();
void Initialize();
}

View File

@@ -1,18 +1,21 @@
[gd_scene load_steps=19 format=3 uid="uid://q7uc1h2jpbd2"]
[gd_scene load_steps=20 format=3 uid="uid://q7uc1h2jpbd2"]
[ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://player_controller/PlayerController.tscn" id="1_62kkh"]
[ext_resource type="Material" uid="uid://31aulub2nqov" path="res://assets/greybox/m_greybox.tres" id="2_3uydm"]
[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://resource_definitions/RDamage.cs" id="2_sysok"]
[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/first_enemy/first_enemy.tscn" id="3_3uydm"]
[ext_resource type="Script" uid="uid://b2vdwkiqauhk3" path="res://scenes/enemies/first_enemy/EnemyInitInputs.cs" id="4_nd7vd"]
[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://components/damage/RDamage.cs" id="2_sysok"]
[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/grounded_enemy/grounded_enemy.tscn" id="3_3uydm"]
[ext_resource type="Script" uid="uid://b4cwruitopcee" path="res://components/health/RDeathEffect.cs" id="5_7m3bq"]
[ext_resource type="PackedScene" uid="uid://cmlud1hwkd6sv" path="res://scenes/enemies/flying_enemy/flying_enemy.tscn" id="5_8fd2t"]
[ext_resource type="Script" uid="uid://do0dic4r3ri0s" path="res://scenes/enemies/flying_enemy/FlyingEnemyInputs.cs" id="6_7m3bq"]
[ext_resource type="Resource" uid="uid://otfc2snh8umc" path="res://scenes/enemies/first_enemy/first_enemy_damage.tres" id="6_dmw1t"]
[ext_resource type="PackedScene" uid="uid://c305mfrtumcyq" path="res://scenes/spawners/spawner.tscn" id="6_7m3bq"]
[ext_resource type="Resource" uid="uid://bqq6uukbdfysr" path="res://scenes/enemies/grounded_enemy/grounded_enemy_movement.tres" id="7_caohq"]
[ext_resource type="Script" uid="uid://baiapod3csndf" path="res://components/health/RHealth.cs" id="9_2e4ci"]
[ext_resource type="Resource" uid="uid://otfc2snh8umc" path="res://scenes/enemies/grounded_enemy/grounded_enemy_damage.tres" id="9_dmw1t"]
[ext_resource type="Resource" uid="uid://dgo65k2ceqfvy" path="res://scenes/enemies/flying_enemy/flying_enemy_damage.tres" id="9_gp7s3"]
[ext_resource type="Resource" uid="uid://bwqjaom4k7rc3" path="res://scenes/enemies/flying_enemy/flying_enemy_movement.tres" id="10_spw1u"]
[ext_resource type="Resource" uid="uid://dg1xbjhyhgnnk" path="res://scenes/enemies/flying_enemy/flying_enemy_health.tres" id="11_2e4ci"]
[sub_resource type="Resource" id="Resource_gp7s3"]
[sub_resource type="Resource" id="Resource_2e4ci"]
script = ExtResource("2_sysok")
DamageDealt = 3.0
metadata/_custom_type_script = "uid://jitubgv6judn"
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_0xm2m"]
@@ -37,39 +40,21 @@ ssil_radius = 8.4
sdfgi_use_occlusion = true
glow_enabled = true
[sub_resource type="Resource" id="Resource_8fd2t"]
script = ExtResource("4_nd7vd")
Speed = 1.2
metadata/_custom_type_script = "uid://b2vdwkiqauhk3"
[sub_resource type="Resource" id="Resource_7m3bq"]
script = ExtResource("4_nd7vd")
Speed = 2.7
metadata/_custom_type_script = "uid://b2vdwkiqauhk3"
[sub_resource type="Resource" id="Resource_sysok"]
script = ExtResource("4_nd7vd")
Speed = 4.0
metadata/_custom_type_script = "uid://b2vdwkiqauhk3"
script = ExtResource("5_7m3bq")
metadata/_custom_type_script = "uid://b4cwruitopcee"
[sub_resource type="Resource" id="Resource_caohq"]
script = ExtResource("6_7m3bq")
Speed = 0.3
TargetHeight = 10.0
metadata/_custom_type_script = "uid://do0dic4r3ri0s"
[sub_resource type="Resource" id="Resource_dmw1t"]
script = ExtResource("6_7m3bq")
Speed = 6.0
TargetHeight = 15.0
metadata/_custom_type_script = "uid://do0dic4r3ri0s"
[sub_resource type="Resource" id="Resource_ybosk"]
script = ExtResource("9_2e4ci")
StartingHealth = 1.0
metadata/_custom_type_script = "uid://baiapod3csndf"
[node name="Main" type="Node3D"]
[node name="Player" parent="." instance=ExtResource("1_62kkh")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 7.5)
TutorialDone = true
GetDamageDealt = SubResource("Resource_gp7s3")
RDamage = SubResource("Resource_2e4ci")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_1bvp3")
@@ -134,29 +119,38 @@ material = ExtResource("2_3uydm")
[node name="Enemy" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("3_3uydm")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -16.83681)
Target = NodePath("../Player")
Inputs = SubResource("Resource_8fd2t")
GetDamageDealt = ExtResource("6_dmw1t")
DeathEffects = Array[Object]([SubResource("Resource_sysok")])
[node name="Enemy2" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("3_3uydm")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0, -16.83681)
Target = NodePath("../Player")
Inputs = SubResource("Resource_7m3bq")
GetDamageDealt = ExtResource("6_dmw1t")
[node name="Enemy3" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("3_3uydm")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0, -16.83681)
Target = NodePath("../Player")
Inputs = SubResource("Resource_sysok")
GetDamageDealt = ExtResource("6_dmw1t")
[node name="FlyingEnemy" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("5_8fd2t")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 7, -16)
Target = NodePath("../Player")
Inputs = SubResource("Resource_caohq")
GetDamageDealt = ExtResource("9_gp7s3")
[node name="FlyingEnemy2" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("5_8fd2t")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 7, -16)
Target = NodePath("../Player")
Inputs = SubResource("Resource_dmw1t")
GetDamageDealt = ExtResource("9_gp7s3")
[node name="GroundedSpawner" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("6_7m3bq")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 2.5, -15)
EnemyToSpawn = ExtResource("3_3uydm")
MovementInputs = ExtResource("7_caohq")
HealthInputs = SubResource("Resource_ybosk")
DamageInputs = ExtResource("9_dmw1t")
Target = NodePath("../Player")
IsActiveOnStart = false
[node name="FlyingSpawner" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("6_7m3bq")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18, 11, -14)
EnemyToSpawn = ExtResource("5_8fd2t")
MovementInputs = ExtResource("10_spw1u")
HealthInputs = ExtResource("11_2e4ci")
DamageInputs = ExtResource("9_gp7s3")
Target = NodePath("../Player")
IsActiveOnStart = false

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=40 format=3 uid="uid://dmkw8cmalm5k"]
[gd_scene load_steps=45 format=3 uid="uid://dmkw8cmalm5k"]
[ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://player_controller/PlayerController.tscn" id="1_2vsi6"]
[ext_resource type="Script" uid="uid://blenis2y55fmg" path="res://tools/city_helpers.gd" id="1_qwuk2"]
@@ -23,6 +23,10 @@
[ext_resource type="Texture2D" uid="uid://cjh5cnvdbq5ku" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_button_b_outline.svg" id="19_efsse"]
[ext_resource type="Texture2D" uid="uid://nrhxjdpuje3f" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_lt_outline.svg" id="20_crf87"]
[ext_resource type="Texture2D" uid="uid://dyjvbsvbriii4" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_rb_outline.svg" id="23_p287n"]
[ext_resource type="PackedScene" uid="uid://c305mfrtumcyq" path="res://scenes/spawners/spawner.tscn" id="24_qwuk2"]
[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/grounded_enemy/grounded_enemy.tscn" id="25_nrosh"]
[ext_resource type="PackedScene" uid="uid://cmlud1hwkd6sv" path="res://scenes/enemies/flying_enemy/flying_enemy.tscn" id="25_x7fl1"]
[ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://components/movement/RMovement.cs" id="26_lu3yt"]
[sub_resource type="LabelSettings" id="LabelSettings_2k3fr"]
font_size = 30
@@ -89,6 +93,12 @@ adjustment_enabled = true
[sub_resource type="BoxMesh" id="BoxMesh_p287n"]
[sub_resource type="Resource" id="Resource_pxspk"]
script = ExtResource("26_lu3yt")
Speed = 7.0
TargetHeight = 15.0
metadata/_custom_type_script = "uid://dtpxijlnb2c5"
[node name="Main" type="Node3D"]
script = ExtResource("1_qwuk2")
@@ -436,6 +446,17 @@ spot_range = 47.233
spot_angle = 18.85
spot_angle_attenuation = 10.556052
[node name="Spawner" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("24_qwuk2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 19, 43, -111.5)
EnemyToSpawn = ExtResource("25_x7fl1")
MovementInputs = SubResource("Resource_pxspk")
Target = NodePath("../Player")
[node name="Spawner2" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("24_qwuk2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 31, 7.5, -88)
EnemyToSpawn = ExtResource("25_nrosh")
Target = NodePath("../Player")
[connection signal="timeout" from="TutorialController/WaitToShowBlockingTuto" to="TutorialController" method="_show_weapon_tutorial"]
[connection signal="body_exited" from="TutoTriggers/TriggerTutoMove" to="TutorialController" method="hide_tutorials"]
[connection signal="body_entered" from="TutoTriggers/TriggerTutoMantle" to="TutorialController" method="_on_tuto_mantle_body_entered"]

View File

@@ -1,13 +1,12 @@
[gd_scene load_steps=56 format=3 uid="uid://bei4nhkf8lwdo"]
[gd_scene load_steps=52 format=3 uid="uid://bei4nhkf8lwdo"]
[ext_resource type="Script" uid="uid://bbbrf5ckydfna" path="res://player_controller/Scripts/PlayerController.cs" id="1_poq2x"]
[ext_resource type="PackedScene" uid="uid://cf3rrgr1imvv4" path="res://scenes/path/path.tscn" id="2_6lejt"]
[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://resource_definitions/RDamage.cs" id="2_q14ux"]
[ext_resource type="Resource" uid="uid://bl5crtu1gkrtr" path="res://systems/inputs/base_mode/base_mode.tres" id="3_cresl"]
[ext_resource type="Script" uid="uid://b0u23nkpaimyc" path="res://scenes/damage/CDamageable.cs" id="4_q7bng"]
[ext_resource type="Script" uid="uid://b0u23nkpaimyc" path="res://components/damage/CDamageable.cs" id="4_q7bng"]
[ext_resource type="Resource" uid="uid://cpdaw41ah5gic" path="res://systems/inputs/base_mode/rotate_y.tres" id="4_rxwoh"]
[ext_resource type="Resource" uid="uid://ccrb5xsnphc8" path="res://systems/inputs/base_mode/rotate_floorplane.tres" id="5_4u7i3"]
[ext_resource type="Script" uid="uid://b6y3ugfydvch0" path="res://resource_definitions/RDamageModifier.cs" id="5_q7bng"]
[ext_resource type="Script" uid="uid://b6y3ugfydvch0" path="res://components/damage/RDamageModifier.cs" id="5_q7bng"]
[ext_resource type="Resource" uid="uid://f3vs6l4m623s" path="res://systems/inputs/base_mode/move_left.tres" id="5_q14ux"]
[ext_resource type="Resource" uid="uid://t612lts1wi1s" path="res://systems/inputs/base_mode/move_right.tres" id="6_q7bng"]
[ext_resource type="Script" uid="uid://cwbvxlfvmocc1" path="res://player_controller/Scripts/StairsSystem.cs" id="7_bmt5a"]
@@ -18,11 +17,9 @@
[ext_resource type="PackedScene" uid="uid://wq1okogkhc5l" path="res://systems/mantle/mantle_system.tscn" id="8_qu4wy"]
[ext_resource type="Resource" uid="uid://bebstkm608wxx" path="res://systems/inputs/base_mode/aim_pressed.tres" id="9_nob5r"]
[ext_resource type="Resource" uid="uid://bdit2jy5gbpts" path="res://systems/inputs/base_mode/jump.tres" id="10_4u7i3"]
[ext_resource type="Script" uid="uid://g8idirw62qe0" path="res://player_controller/Scripts/Bobbing.cs" id="10_7wk1w"]
[ext_resource type="Resource" uid="uid://b5gx3q8nvu72e" path="res://systems/inputs/base_mode/hit.tres" id="11_cresl"]
[ext_resource type="PackedScene" uid="uid://0ysqmqphq6mq" path="res://systems/head/head_system.tscn" id="11_rxwoh"]
[ext_resource type="Resource" uid="uid://d2r0ur8k3cuu3" path="res://systems/inputs/base_mode/dash.tres" id="12_34snm"]
[ext_resource type="Script" uid="uid://b6k73aj5povgv" path="res://player_controller/Scripts/FieldOfView.cs" id="12_m2mxi"]
[ext_resource type="Resource" uid="uid://55b0dsvioj08" path="res://systems/inputs/base_mode/jump_pressed.tres" id="13_nob5r"]
[ext_resource type="Shape3D" uid="uid://keseacdcooot" path="res://player_controller/resources/PlayerShape.tres" id="13_r7i3q"]
[ext_resource type="Script" uid="uid://b5nk6ntlps3x0" path="res://systems/inputs/input_system.gd" id="16_v31n3"]
@@ -46,11 +43,6 @@
[ext_resource type="Texture2D" uid="uid://chvt6g0xn5c2m" path="res://systems/dash/light-ring.jpg" id="32_lgpc8"]
[ext_resource type="Script" uid="uid://b4dwolbvt8our" path="res://addons/godot_state_charts/history_state.gd" id="41_ruloh"]
[sub_resource type="Resource" id="Resource_m8gvy"]
script = ExtResource("2_q14ux")
DamageDealt = 3.0
metadata/_custom_type_script = "uid://jitubgv6judn"
[sub_resource type="Resource" id="Resource_jb43f"]
script = ExtResource("5_q7bng")
Modifier = 3.0
@@ -88,7 +80,6 @@ blend_mode = 1
[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("CDamage")]
collision_mask = 272
script = ExtResource("1_poq2x")
GetDamageDealt = SubResource("Resource_m8gvy")
CDamage = NodePath("CDamageable")
WalkSpeed = 7.5
AccelerationFloor = 4.0
@@ -181,6 +172,9 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.6, 0)
CameraInclineAcceleration = 20.0
GroundedCameraIncline = 3.0
SlidingJitterAmplitude = 0.2
WeaponSway = 8.0
WeaponLookRotation = 10.0
WeaponAdjustmentSpeed = 1.0
[node name="MantleSystem" parent="HeadSystem" instance=ExtResource("8_qu4wy")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.6, 0)
@@ -210,12 +204,6 @@ collision_mask = 256
target_position = Vector3(0, -0.75, 0)
collision_mask = 256
[node name="Bobbing" type="Node3D" parent="."]
script = ExtResource("10_7wk1w")
[node name="FieldOfView" type="Node3D" parent="."]
script = ExtResource("12_m2mxi")
[node name="HeadCollisionDetectors" type="Node3D" parent="."]
visible = false
@@ -284,11 +272,11 @@ collision_mask = 256
DashSpeed = 0.2
PostDashSpeed = 30.0
[node name="WeaponRoot" type="Node3D" parent="."]
[node name="WeaponSystem" parent="WeaponRoot" instance=ExtResource("29_wv70j")]
[node name="WeaponSystem" parent="." instance=ExtResource("29_wv70j")]
transform = Transform3D(1, 0, 0, 0, 0.173648, -0.984808, 0, 0.984808, 0.173648, 0.45268, 1.44035, -0.692528)
ThrowForce = 15.0
mass = 10.0
gravity_scale = 3.0
ThrowForce = 300.0
StraightThrowDuration = 0.05
[node name="DashIndicator" type="Node3D" parent="."]
@@ -335,6 +323,7 @@ offset_left = 1524.0
offset_top = 1.0
offset_right = -8.0
offset_bottom = 1.0
enabled = false
initial_node_to_watch = NodePath("../StateChart")
[node name="UI" type="Control" parent="."]

View File

@@ -7,7 +7,9 @@ using Movementtests.systems;
using Movementtests.player_controller.Scripts;
using RustyOptions;
public partial class PlayerController : CharacterBody3D, IDamageable, IKnockbackable, IDamageMaker
public partial class PlayerController : CharacterBody3D,
IDamageable,
IDamageDealer
{
// Enums
public enum AllowedInputs
@@ -32,21 +34,18 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
///////////////////////////
// Signals and events //
///////////////////////////
public event Action<float> DamageTaken;
public event Action<IDamageable, DamageRecord> DamageTaken;
///////////////////////////
// Public stuff //
///////////////////////////
public HeadSystem HeadSystem;
public Bobbing Bobbing;
public FieldOfView FieldOfView;
public StairsSystem StairsSystem;
public MantleSystem MantleSystem;
public DashSystem DashSystem;
public CollisionShape3D StandingCollider;
public CollisionShape3D SlideCollider;
public Node3D WeaponRoot;
public WeaponSystem WeaponSystem;
public WallHugSystem WallHugSystem;
public PlayerUi PlayerUi;
@@ -68,7 +67,7 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
[ExportCategory("Combat")]
[ExportGroup("Damage")]
[Export]
public RDamage GetDamageDealt { get; set; }
public RDamage RDamage { get; set; }
[Export]
public CDamageable CDamage { get; set; }
@@ -309,6 +308,8 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
private StateChartState _onWallHanging;
private StateChartState _onWallRunning;
private Transition _onDashEnded;
private Transition _onJumpFromWall;
private Transition _onJumpFromWallFalling;
private Transition _onLeaveWallFromRun;
@@ -338,14 +339,11 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
// Camera stuff
HeadSystem = GetNode<HeadSystem>("HeadSystem");
Bobbing = GetNode<Bobbing>("Bobbing");
FieldOfView = GetNode<FieldOfView>("FieldOfView");
Camera3D camera = GetNode<Camera3D>("HeadSystem/CameraSmooth/Camera3D");
Node3D cameraSmooth = GetNode<Node3D>("HeadSystem/CameraSmooth");
// Movement stuff
WeaponRoot = GetNode<Node3D>("WeaponRoot");
WeaponSystem = GetNode<WeaponSystem>("WeaponRoot/WeaponSystem");
WeaponSystem = GetNode<WeaponSystem>("WeaponSystem");
MantleSystem = GetNode<MantleSystem>("HeadSystem/MantleSystem");
StandingCollider = GetNode<CollisionShape3D>("StandingCollider");
SlideCollider = GetNode<CollisionShape3D>("SlideCollider");
@@ -386,6 +384,7 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
_airGlidingDoubleJump = StateChartState.Of(GetNode("StateChart/Root/Movement/Sliding/AirGlideDoubleJumpEnabled"));
_onGroundSlideJump = Transition.Of(GetNode("StateChart/Root/Movement/Sliding/GroundSlide/OnJump"));
_onAirGlideDoubleJump = Transition.Of(GetNode("StateChart/Root/Movement/Sliding/AirGlideDoubleJumpEnabled/OnJump"));
_onDashEnded = Transition.Of(GetNode("StateChart/Root/Movement/Dashing/OnDashEnded"));
// _actionHanging = StateChartState.Of(GetNode("StateChart/Root/Actions/Hanging"));
_powerExpired = StateChartState.Of(GetNode("StateChart/Root/PowerReserve/Expired"));
@@ -420,8 +419,6 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
// Camera stuff
HeadSystem.Init();
Bobbing.Init(camera);
FieldOfView.Init(camera);
// Movement stuff
// Getting universal setting from GODOT editor to be in sync
@@ -499,6 +496,9 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
_onWallHanging.StatePhysicsProcessing += HandleWallHanging;
_onWallRunning.StatePhysicsProcessing += HandleWallRunning;
_onWallHanging.StateExited += RecoverWeapon;
_onDashEnded.Taken += RecoverWeapon;
_onJumpFromWall.Taken += OnJumpFromWall;
_onJumpFromWallFalling.Taken += OnJumpFromWall;
_onLeaveWallFromRun.Taken += OnLeaveWallFromRun;
@@ -546,9 +546,9 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
if (TutorialDone)
return;
RemoveChild(WeaponRoot);
GetTree().GetRoot().CallDeferred(Node.MethodName.AddChild, WeaponRoot);
WeaponRoot.CallDeferred(Node3D.MethodName.SetGlobalPosition, TutorialWeaponTarget.GlobalPosition);
RemoveChild(WeaponSystem);
GetTree().GetRoot().CallDeferred(Node.MethodName.AddChild, WeaponSystem);
WeaponSystem.CallDeferred(Node3D.MethodName.SetGlobalPosition, TutorialWeaponTarget.GlobalPosition);
WeaponSystem.CallDeferred(WeaponSystem.MethodName.PlaceWeaponForTutorial, TutorialWeaponTarget.GlobalPosition);
}
@@ -809,39 +809,25 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
var lookSensitivity = _isUsingGamepad ? _lookSensitivityMultiplier : _mouseSensitivityMultiplier;
var wallHugContactPoint = _onWallRunning.Active ? _currentWallContactPoint : Vector3.Zero;
var playerVelocity = GetGlobalMoveInput();
HeadSystem.LookAround(delta, inputLookDir, playerVelocity, Velocity, wallHugContactPoint, lookSensitivity, isSliding: _groundSliding.Active);
}
public void RotateWeaponWithPlayer()
{
WeaponRoot.SetRotation(HeadSystem.Rotation);
var moveInput = GetGlobalMoveInput();
var lookAroundInputs = new HeadSystem.CameraParameters(
Delta: delta,
LookDir: inputLookDir,
PlayerInput: moveInput,
PlayerVelocity:Velocity,
WallContactPoint: wallHugContactPoint,
SensitivitMultiplier: lookSensitivity,
WithCameraJitter: _groundSliding.Active,
WithCameraBobbing: _grounded.Active || _onWallRunning.Active,
BobbingMultiplier: _headBobbingMultiplier,
FovMultiplier: _fovChangeMultiplier);
HeadSystem.LookAround(lookAroundInputs);
}
public Vector3 GetGlobalForwardFacingVector()
{
return Transform.Basis * HeadSystem.Transform.Basis * Vector3.Forward;
}
private void CameraModifications(float delta)
{
Bobbing.CameraBobbingParams cameraBobbingParams = new Bobbing.CameraBobbingParams
{
Delta = delta,
IsOnFloorCustom = _grounded.Active || _onWallRunning.Active,
Velocity = Velocity,
SettingsMultiplier = _headBobbingMultiplier
};
Bobbing.PerformCameraBobbing(cameraBobbingParams);
FieldOfView.FovParameters fovParams = new FieldOfView.FovParameters
{
IsCrouchingHeight = false,
Delta = delta,
SprintSpeed = WalkSpeed,
Velocity = Velocity,
FOVMultiplier = _fovChangeMultiplier
};
FieldOfView.PerformFovAdjustment(fovParams);
}
// Horizontal velocity computing
public Vector3 ComputeHVelocity(float delta, float accelerationFactor, float decelerationFactor, Vector3? direction = null)
{
@@ -1568,9 +1554,6 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
}
public void HandleAiming(float delta)
{
if (WeaponSystem.InHandState.Active)
RotateWeaponWithPlayer();
DashIndicatorMeshCylinder.Height = DashSystem.PlannedLocation.DistanceTo(GlobalPosition);
DashIndicatorNode.LookAt(DashSystem.PlannedLocation);
@@ -1638,7 +1621,8 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
public void ThrowWeapon()
{
_playerState.SendEvent("cancel_aim");
RemoveChildNode(WeaponRoot);
RemoveChildNode(WeaponSystem);
HeadSystem.HideWeapon();
var weaponTargetLocation = DashSystem.HasHit ? DashSystem.CollisionPoint : DashSystem.PlannedLocation;
WeaponSystem.ThrowWeapon(
@@ -1649,7 +1633,10 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
}
public void RecoverWeapon()
{
RecoverChildNode(WeaponRoot);
if (WeaponSystem.GetParent() == this) return;
HeadSystem.ShowWeapon();
RecoverChildNode(WeaponSystem);
WeaponSystem.ResetWeapon();
}
@@ -1702,8 +1689,6 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
var isPlantedUnderPlatform = WeaponSystem.IsPlantedUnderPlatform();
var shouldDashToHanging = isPlantedOnWall || isPlantedUnderPlatform;
RecoverWeapon();
var resultingEvent = shouldDashToHanging ? "dash_to_planted" : "dash_finished";
_playerState.SendEvent(resultingEvent);
}
@@ -1716,12 +1701,9 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
if (_currentInputBufferFrames > 0) _currentInputBufferFrames -= 1;
LookAround(delta);
CameraModifications((float) delta);
MoveSlideAndHandleStairs((float) delta);
MantleSystem.ProcessMantle(_grounded.Active);
if (WeaponSystem.InHandState.Active)
RotateWeaponWithPlayer();
if (WeaponSystem.InHandState.Active && !_aiming.Active && TutorialDone)
{
DashIndicatorMesh.Visible = false;
@@ -1735,9 +1717,11 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
}
}
public float TakeDamage(RDamage damage)
public DamageRecord TakeDamage(DamageRecord damageRecord)
{
return CDamage.TakeDamage(damage);
var finalDamage = CDamage.TakeDamage(damageRecord);
DamageTaken?.Invoke(this, finalDamage);
return finalDamage;
}
///////////////////////////
@@ -1755,7 +1739,7 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
foreach (var body in bodies)
{
if(body is IDamageable spawnable)
spawnable.TakeDamage(GetDamageDealt);
spawnable.TakeDamage(new DamageRecord(this, RDamage));
}
}
}

View File

@@ -148,6 +148,7 @@ locale/translations=PackedStringArray("res://addons/maaacks_game_template/base/t
[layer_names]
3d_render/layer_2="FirstPersonView"
3d_physics/layer_1="Player"
3d_physics/layer_2="2"
3d_physics/layer_3="3"

Some files were not shown because too many files have changed in this diff Show More