Compare commits

...

27 Commits

Author SHA1 Message Date
6b97c226f1 setup damage types and modifiers as resources
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 10m48s
2026-01-17 14:32:48 +01:00
b1e78df6c7 some damage interfacing 2026-01-17 11:02:17 +01:00
5908494977 two enemy types, ready to refactor 2026-01-17 10:10:14 +01:00
63529a11ae removed tool script stuff
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 9m57s
2026-01-16 18:36:36 +01:00
255b87f991 basic interface and no success trying to use them in a Tool script 2026-01-16 18:35:58 +01:00
fd3eb35782 added enemy inputs as a resource
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 9m48s
2026-01-16 11:18:57 +01:00
9e75193731 enemies can move, also changed and named a few collision layers
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 10m18s
2026-01-16 11:05:02 +01:00
609078c584 enemy work
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 10m32s
2026-01-15 21:47:17 +01:00
893126ef78 starting on enemies 2026-01-14 18:10:37 +01:00
6737668391 groundslide camera 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 10m16s
2026-01-14 17:21:57 +01:00
ca77579168 ground sliding under stuff 2026-01-14 15:26:41 +01:00
c6559d593a fixed slope ground slide
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 9m32s
2026-01-14 10:21:50 +01:00
e32dac9e6e broken sloped slide
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 9m32s
2026-01-13 23:52:44 +01:00
30b4d1a2eb jumping from slides and some improvement on air gliding 2026-01-13 14:22:26 +01:00
2fa4ce68e7 revamped the dash, fixed an infinite jump issue and fixed buffered inputs
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 10m15s
2026-01-13 11:18:56 +01:00
80e533d98e simple slam and changed wall hugging to only work when input is towards the wall 2026-01-13 09:43:58 +01:00
0e3e258fd3 basic slide and air glide mechanic
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 10m40s
2026-01-12 17:47:32 +01:00
c7991198ea code cleanup 2026-01-12 16:43:52 +01:00
1a4b2f4c19 Ended with remapping and removed old junk
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 10m34s
2026-01-12 15:41:43 +01:00
52a9c3f120 Remapped some inputs and added slide, slam and parry mappings 2026-01-12 14:58:43 +01:00
2301884418 added a wall jump section in the GYM 2026-01-12 12:01:40 +01:00
04054cfeae Added ground-like movement (i.e. air control when close to ground) and wall jumping away from the wall is always possible even when facing it 2026-01-12 11:52:35 +01:00
66be7838bb buffered inputs revamped and added mantle jumps and dashed
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 21s
Create tag and build when new code gets to main / Export (push) Successful in 10m30s
2026-01-11 18:14:53 +01:00
1eb65d1520 some shader work and improved mantle feel 2026-01-11 17:09:58 +01:00
f2a39316ba shader changes that don't do anything
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 9m48s
2026-01-07 17:11:49 +01:00
fffd8c947b implementing jump input buffering on grounded
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 9m47s
2026-01-07 09:58:18 +01:00
a1d57d6a1a some tuto fixing
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 9m49s
2026-01-06 16:35:17 +01:00
71 changed files with 3261 additions and 1895 deletions

1
.gitignore vendored
View File

@@ -10,6 +10,7 @@
.import/
/builds
/communication
# Imported translations (automatically generated from CSV files)
*.translation

View File

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

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -20,6 +20,8 @@ script = ExtResource("2_5i7wx")
material_override = ExtResource("3_u2uhe")
[node name="StaticBody3D" type="StaticBody3D" parent="Cube_279" index="0"]
collision_layer = 256
collision_mask = 65553
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_279/StaticBody3D" index="0"]
shape = SubResource("ConcavePolygonShape3D_5i7wx")
@@ -28,12 +30,15 @@ shape = SubResource("ConcavePolygonShape3D_5i7wx")
material_override = ExtResource("4_jmnc2")
[node name="StaticBody3D" type="StaticBody3D" parent="Cylinder_001" index="0"]
collision_layer = 256
collision_mask = 65553
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cylinder_001/StaticBody3D" index="0"]
shape = SubResource("ConcavePolygonShape3D_wai75")
[node name="Area3D" type="Area3D" parent="." index="2"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -36.343, 0)
collision_layer = 0
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D" index="0"]
shape = SubResource("CylinderShape3D_wai75")

View File

@@ -27,7 +27,7 @@ shader_parameter/floorRoughnessMap = ExtResource("4_rir86")
shader_parameter/floorNormalMap = ExtResource("3_f1b6h")
shader_parameter/floorHeightMap = ExtResource("2_0e3id")
shader_parameter/floorUvScale = 0.5
shader_parameter/enablePom = true
shader_parameter/enablePom = false
shader_parameter/heightMinLayers = 8
shader_parameter/heightMaxLayers = 64
shader_parameter/heightScale = 0.08

View File

@@ -28,6 +28,7 @@ uniform float heightScale = 1.0;
varying vec3 worldPos;
varying vec3 worldNormal;
varying vec3 diffuse;
void vertex() {
@@ -177,12 +178,14 @@ void fragment() {
// sample and output
SPECULAR = specular;
ALBEDO = triplanarSample(texCoordX, texCoordY, texCoordZ, blend, yDot).rgb;
diffuse = ALBEDO;
ROUGHNESS = triplanarRoughness(texCoordX, texCoordY, texCoordZ, blend, yDot).r;
NORMAL = mix(worldNormal, triplanarNormal(yDot, texCoordX, texCoordY, texCoordZ, blend), normalMapStrength);
NORMAL = normalize((VIEW_MATRIX * vec4(NORMAL, 0.0)).xyz);
}
//void light() {
// // Called for every pixel for every light affecting the material.
// // Uncomment to replace the default light processing function with this one.
//}
void light() {
float lambert = clamp(dot(NORMAL, LIGHT), 0.0, 1.0);
float halfLambert = pow(lambert*0.5 + 0.5, 5);
DIFFUSE_LIGHT += halfLambert * ATTENUATION * LIGHT_COLOR / PI;
}

View File

@@ -31,7 +31,7 @@ shader_parameter/floorRoughnessMap = ExtResource("4_4vhk1")
shader_parameter/floorNormalMap = ExtResource("3_ytvoj")
shader_parameter/floorHeightMap = ExtResource("2_4vhk1")
shader_parameter/floorUvScale = 0.5
shader_parameter/enablePom = true
shader_parameter/enablePom = false
shader_parameter/heightMinLayers = 8
shader_parameter/heightMaxLayers = 64
shader_parameter/heightScale = 0.2

View File

@@ -27,7 +27,7 @@ shader_parameter/floorRoughnessMap = ExtResource("4_ob11h")
shader_parameter/floorNormalMap = ExtResource("3_ff2cr")
shader_parameter/floorHeightMap = ExtResource("2_roy1o")
shader_parameter/floorUvScale = 0.5
shader_parameter/enablePom = true
shader_parameter/enablePom = false
shader_parameter/heightMinLayers = 8
shader_parameter/heightMaxLayers = 64
shader_parameter/heightScale = 1.0

Binary file not shown.

Binary file not shown.

View File

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

View File

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

View File

@@ -0,0 +1,8 @@
using Godot;
namespace Movementtests.interfaces;
public interface IDamageable
{
void TakeDamage(RDamage damage);
}

View File

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

6
interfaces/IKillable.cs Normal file
View File

@@ -0,0 +1,6 @@
namespace Movementtests.interfaces;
public interface IKillable
{
}

View File

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

View File

@@ -0,0 +1,6 @@
namespace Movementtests.interfaces;
public interface IKnockbackable
{
}

View File

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

7
interfaces/ISpawnable.cs Normal file
View File

@@ -0,0 +1,7 @@
using Godot;
interface ISpawnable
{
void TestMethod();
}

View File

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

View File

@@ -0,0 +1,12 @@
using Godot;
using System.Linq;
namespace Movementtests.interfaces;
public static class NodeExtensions
{
public static IDamageable[] ToIDamageables(this GodotObject[] nodes)
{
return nodes == null ? System.Array.Empty<IDamageable>() : nodes.OfType<IDamageable>().ToArray();
}
}

View File

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

162
maps/GYMs/enemies.tscn Normal file
View File

@@ -0,0 +1,162 @@
[gd_scene load_steps=19 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.tscn" id="3_3uydm"]
[ext_resource type="Script" uid="uid://b2vdwkiqauhk3" path="res://scenes/enemies/EnemyInitInputs.cs" id="4_nd7vd"]
[ext_resource type="PackedScene" uid="uid://cmlud1hwkd6sv" path="res://scenes/enemies/flying_enemy.tscn" id="5_8fd2t"]
[ext_resource type="Script" uid="uid://do0dic4r3ri0s" path="res://scenes/enemies/FlyingEnemyInputs.cs" id="6_7m3bq"]
[ext_resource type="Resource" uid="uid://otfc2snh8umc" path="res://scenes/enemies/first_enemy_damage.tres" id="6_dmw1t"]
[ext_resource type="Resource" uid="uid://dgo65k2ceqfvy" path="res://scenes/enemies/flying_enemy_damage.tres" id="9_gp7s3"]
[sub_resource type="Resource" id="Resource_gp7s3"]
script = ExtResource("2_sysok")
DamageDealt = 3.0
metadata/_custom_type_script = "uid://jitubgv6judn"
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_0xm2m"]
sky_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)
ground_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)
[sub_resource type="Sky" id="Sky_h2yge"]
sky_material = SubResource("ProceduralSkyMaterial_0xm2m")
[sub_resource type="Environment" id="Environment_1bvp3"]
background_mode = 2
sky = SubResource("Sky_h2yge")
ambient_light_source = 2
ambient_light_color = Color(0.576076, 0.459788, 0.652401, 1)
reflected_light_source = 2
tonemap_mode = 4
tonemap_exposure = 1.32
ssao_enabled = true
ssao_radius = 3.61
ssil_enabled = true
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"
[sub_resource type="Resource" id="Resource_caohq"]
script = ExtResource("6_7m3bq")
Speed = 4.0
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"
[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")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_1bvp3")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(-0.772218, 0.611111, 0.173844, 0.0446935, -0.220691, 0.974319, 0.633783, 0.760157, 0.143109, 0, 0, 0)
shadow_enabled = true
[node name="Greybox" type="CSGCombiner3D" parent="."]
use_collision = true
collision_layer = 256
collision_mask = 65553
[node name="CSGBox3D" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.096, -0.5, -46.329)
use_collision = true
size = Vector3(100, 1, 190.741)
material = ExtResource("2_3uydm")
[node name="CSGBox3D2" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -21.346, 4.5, 2.7915)
use_collision = true
size = Vector3(6.5, 11, 5.5)
material = ExtResource("2_3uydm")
[node name="CSGBox3D6" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(0.70710677, 0, -0.70710677, 0, 1, 0, 0.70710677, 0, 0.70710677, -15.846001, 2.75, 2.0415)
use_collision = true
size = Vector3(6.5, 7.5, 11)
material = ExtResource("2_3uydm")
[node name="CSGBox3D7" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10.346001, 1, 1.0415001)
use_collision = true
size = Vector3(6.5, 4, 17)
material = ExtResource("2_3uydm")
[node name="CSGBox3D8" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(0.81915206, 0, 0.57357645, 0, 1, 0, -0.57357645, 0, 0.81915206, -7.3460007, 0, -3.9585)
use_collision = true
size = Vector3(6.5, 4, 17)
material = ExtResource("2_3uydm")
[node name="CSGBox3D3" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18.154, 4.5, 2.7915)
use_collision = true
size = Vector3(6.5, 11, 5.5)
material = ExtResource("2_3uydm")
[node name="CSGBox3D4" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18.154, 4.5, -14.2085)
use_collision = true
size = Vector3(6.5, 11, 5.5)
material = ExtResource("2_3uydm")
[node name="CSGBox3D5" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.8460007, 4.5, 17.7915)
use_collision = true
size = Vector3(6.5, 11, 5.5)
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")
[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")

View File

@@ -30,6 +30,7 @@ glow_enabled = true
[node name="Player" parent="." instance=ExtResource("1_ig7tw")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.7981, 1.6118, 39.3006)
TutorialDone = true
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_1bvp3")

View File

@@ -46,8 +46,8 @@ visible = false
[node name="Greybox" type="CSGCombiner3D" parent="."]
use_collision = true
collision_layer = 3
collision_mask = 5
collision_layer = 256
collision_mask = 65553
[node name="CSGBox3D" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.096, -0.5, -46.329)
@@ -133,6 +133,21 @@ material = ExtResource("3_vvhq3")
transform = Transform3D(5, 0, 0, 0, -2.18557e-07, 5, 0, -5, -2.18557e-07, 1, 0.1, -9.5)
text = "10m"
[node name="Label3D6" type="Label3D" parent="Greybox/RunningTrack"]
transform = Transform3D(5, 0, 0, 0, -2.18557e-07, 5, 0, -5, -2.18557e-07, 27.5, 0.1, 1)
text = "10deg
"
[node name="Label3D7" type="Label3D" parent="Greybox/RunningTrack"]
transform = Transform3D(5, 0, 0, 0, -2.18557e-07, 5, 0, -5, -2.18557e-07, 30.5, 0.1, 1)
text = "20deg
"
[node name="Label3D8" type="Label3D" parent="Greybox/RunningTrack"]
transform = Transform3D(5, 0, 0, 0, -2.18557e-07, 5, 0, -5, -2.18557e-07, 33.5, 0.1, 1)
text = "30deg
"
[node name="Label3D2" type="Label3D" parent="Greybox/RunningTrack"]
transform = Transform3D(5, 0, 0, 0, -2.18557e-07, 5, 0, -5, -2.18557e-07, 1, 0.1, -19.5)
text = "20m"
@@ -159,6 +174,38 @@ text = "0.5m"
transform = Transform3D(-2.18557e-07, -5, -2.18557e-07, 0, -2.18557e-07, 5, -5, 2.18557e-07, 9.55343e-15, -7, 0.1, -6.5)
text = "1m"
[node name="Label3D22" type="Label3D" parent="Greybox/JumpHeights"]
transform = Transform3D(-2.1855689e-07, 5, 2.18557e-07, 0, -2.18557e-07, 5, 5, 2.1855689e-07, 9.55343e-15, -28.5, 0.1, 1)
text = "1.5m"
[node name="Label3D23" type="Label3D" parent="Greybox/JumpHeights"]
transform = Transform3D(-2.1855689e-07, 5, 2.18557e-07, 0, -2.18557e-07, 5, 5, 2.1855689e-07, 9.55343e-15, -28.5, 0.1, -11)
text = "2m"
[node name="Label3D24" type="Label3D" parent="Greybox/JumpHeights"]
transform = Transform3D(-2.1855689e-07, 5, 2.18557e-07, 0, -2.18557e-07, 5, 5, 2.1855689e-07, 9.55343e-15, -28.5, 0.1, -21.5)
text = "3m"
[node name="Label3D25" type="Label3D" parent="Greybox/JumpHeights"]
transform = Transform3D(-2.1855689e-07, 5, 2.18557e-07, 0, -2.18557e-07, 5, 5, 2.1855689e-07, 9.55343e-15, -28.5, 0.1, -31)
text = "4m"
[node name="Label3D26" type="Label3D" parent="Greybox/JumpHeights"]
transform = Transform3D(-2.1855689e-07, 5, 2.18557e-07, 0, -2.18557e-07, 5, 5, 2.1855689e-07, 9.55343e-15, -28.5, 0.1, -41.5)
text = "5m"
[node name="Label3D27" type="Label3D" parent="Greybox/JumpHeights"]
transform = Transform3D(-2.1855689e-07, 5, 2.18557e-07, 0, -2.18557e-07, 5, 5, 2.1855689e-07, 9.55343e-15, -28.5, 0.1, -51.5)
text = "6m"
[node name="Label3D28" type="Label3D" parent="Greybox/JumpHeights"]
transform = Transform3D(-2.1855689e-07, 5, 2.18557e-07, 0, -2.18557e-07, 5, 5, 2.1855689e-07, 9.55343e-15, -28.5, 0.1, -61)
text = "7m"
[node name="Label3D29" type="Label3D" parent="Greybox/JumpHeights"]
transform = Transform3D(-2.1855689e-07, 5, 2.18557e-07, 0, -2.18557e-07, 5, 5, 2.1855689e-07, 9.55343e-15, -28.5, 0.1, -74.5)
text = "8m"
[node name="Label3D8" type="Label3D" parent="Greybox/JumpHeights"]
transform = Transform3D(-2.18557e-07, -5, -2.18557e-07, 0, -2.18557e-07, 5, -5, 2.18557e-07, 9.55343e-15, -7, 0.1, -11.5)
text = "1.5m"
@@ -324,9 +371,111 @@ size = Vector3(5, 17.5, 5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D29" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10.5, 10, -76.5)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30.25, 10, -40)
use_collision = true
size = Vector3(5, 20, 5)
size = Vector3(0.5, 20, 80)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D33" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -24.75, 10, -5)
use_collision = true
size = Vector3(7.5, 20, 10)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D41" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22.75, 5, -1.5)
use_collision = true
size = Vector3(12.5, 10, 3)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D47" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 0.9848078, 0.17364816, 0, -0.17364816, 0.9848078, 22.75, 0.03095889, -30.695885)
use_collision = true
size = Vector3(12.5, 10, 58)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D48" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 0.9396926, 0.34202012, 0, -0.34202012, 0.9396926, 30.5, 1.5878377, -16.713436)
use_collision = true
size = Vector3(3, 6.5, 31.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D49" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 0.86602545, 0.5, 0, -0.5, 0.86602545, 33.5, 2.5053406, -10.524445)
use_collision = true
size = Vector3(3, 5.5, 20.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D42" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30.5, 5, -1.5)
use_collision = true
size = Vector3(3, 10, 3)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D43" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 33.5, 5, -1.5)
use_collision = true
size = Vector3(3, 10, 3)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D44" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 36.5, 5, -1.5)
use_collision = true
size = Vector3(3, 10, 3)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D45" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 39.5, 5, -1.5)
use_collision = true
size = Vector3(3, 10, 3)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D46" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 42.5, 5, -1.5)
use_collision = true
size = Vector3(3, 10, 3)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D34" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -24.5, 10, -15)
use_collision = true
size = Vector3(7, 20, 10)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D35" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -24, 10, -25)
use_collision = true
size = Vector3(6, 20, 10)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D36" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -23.5, 10, -35)
use_collision = true
size = Vector3(5, 20, 10)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D37" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -23, 10, -45)
use_collision = true
size = Vector3(4, 20, 10)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D38" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22.5, 10, -55)
use_collision = true
size = Vector3(3, 20, 10)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D39" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22, 10, -65)
use_collision = true
size = Vector3(2, 20, 10)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D40" type="CSGBox3D" parent="Greybox/JumpHeights"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -21.5, 10, -75)
use_collision = true
size = Vector3(1, 20, 10)
material = ExtResource("3_vvhq3")
[node name="Passageways" type="CSGCombiner3D" parent="Greybox"]
@@ -357,6 +506,162 @@ use_collision = true
size = Vector3(5, 3, 2)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D38" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 21.5, 2.25, 22.5)
use_collision = true
size = Vector3(5, 5, 5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D39" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 21.25, 0.5, 22.5)
operation = 2
use_collision = true
size = Vector3(5, 3, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D40" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 28.5, 2.25, 22.5)
use_collision = true
size = Vector3(5, 5, 5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D41" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 28.25, 0.25, 22.5)
operation = 2
use_collision = true
size = Vector3(5, 2.5, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D42" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 35.5, 2.25, 22.5)
use_collision = true
size = Vector3(5, 5, 5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D43" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 35.25, -0.5, 22.5)
operation = 2
use_collision = true
size = Vector3(5, 3, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D44" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 42.5, 2.25, 22.5)
use_collision = true
size = Vector3(5, 5, 5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D45" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 42.25, -1, 22.5)
operation = 2
use_collision = true
size = Vector3(5, 3, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D46" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-2.6226834e-08, 0, -1, 0, 1, 0, 0.6, 0, -4.371139e-08, 21.5, 2.25, 31.5)
use_collision = true
size = Vector3(5, 5, 5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D47" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-2.6226834e-08, 0, -1, 0, 1, 0, 0.6, 0, -4.371139e-08, 21.25, 0.5, 31.5)
operation = 2
use_collision = true
size = Vector3(5, 3, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D48" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-2.6226834e-08, 0, -1, 0, 1, 0, 0.6, 0, -4.371139e-08, 28.5, 2.25, 31.5)
use_collision = true
size = Vector3(5, 5, 5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D49" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-2.6226834e-08, 0, -1, 0, 1, 0, 0.6, 0, -4.371139e-08, 28.25, 0.25, 31.5)
operation = 2
use_collision = true
size = Vector3(5, 2.5, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D50" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-2.6226834e-08, 0, -1, 0, 1, 0, 0.6, 0, -4.371139e-08, 35.5, 2.25, 31.5)
use_collision = true
size = Vector3(5, 5, 5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D51" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-2.6226834e-08, 0, -1, 0, 1, 0, 0.6, 0, -4.371139e-08, 35.25, -0.5, 31.5)
operation = 2
use_collision = true
size = Vector3(5, 3, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D52" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-2.6226834e-08, 0, -1, 0, 1, 0, 0.6, 0, -4.371139e-08, 42.5, 2.25, 31.5)
use_collision = true
size = Vector3(5, 5, 5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D53" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-2.6226834e-08, 0, -1, 0, 1, 0, 0.6, 0, -4.371139e-08, 42.25, -1, 31.5)
operation = 2
use_collision = true
size = Vector3(5, 3, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D54" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-7.86805e-09, 0, -1, 0, 1, 0, 0.18, 0, -4.371139e-08, 21.5, 2.25, 39.5)
use_collision = true
size = Vector3(5, 5, 5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D55" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-7.86805e-09, 0, -1, 0, 1, 0, 0.18, 0, -4.371139e-08, 21.25, 0.5, 39.5)
operation = 2
use_collision = true
size = Vector3(5, 3, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D56" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-7.86805e-09, 0, -1, 0, 1, 0, 0.18, 0, -4.371139e-08, 28.5, 2.25, 39.5)
use_collision = true
size = Vector3(5, 5, 5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D57" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-7.86805e-09, 0, -1, 0, 1, 0, 0.18, 0, -4.371139e-08, 28.25, 0.25, 39.5)
operation = 2
use_collision = true
size = Vector3(5, 2.5, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D58" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-7.86805e-09, 0, -1, 0, 1, 0, 0.18, 0, -4.371139e-08, 35.5, 2.25, 39.5)
use_collision = true
size = Vector3(5, 5, 5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D59" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-7.86805e-09, 0, -1, 0, 1, 0, 0.18, 0, -4.371139e-08, 35.25, -0.5, 39.5)
operation = 2
use_collision = true
size = Vector3(5, 3, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D60" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-7.86805e-09, 0, -1, 0, 1, 0, 0.18, 0, -4.371139e-08, 42.5, 2.25, 39.5)
use_collision = true
size = Vector3(5, 5, 5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D61" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(-7.86805e-09, 0, -1, 0, 1, 0, 0.18, 0, -4.371139e-08, 42.25, -1, 39.5)
operation = 2
use_collision = true
size = Vector3(5, 3, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D32" type="CSGBox3D" parent="Greybox/Passageways"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 2.25, -26.5)
use_collision = true
@@ -567,6 +872,12 @@ use_collision = true
size = Vector3(3, 1, 0.25)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D57" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -13, 3.5, -21.629175)
use_collision = true
size = Vector3(5, 1, 0.25)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D54" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.5, 1, 20.125)
use_collision = true

View File

@@ -1,35 +1,36 @@
[gd_scene load_steps=48 format=3 uid="uid://bei4nhkf8lwdo"]
[gd_scene load_steps=58 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="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="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"]
[ext_resource type="Resource" uid="uid://brswsknpgwal2" path="res://systems/inputs/base_mode/move_front.tres" id="7_m8gvy"]
[ext_resource type="Resource" uid="uid://s1l0n1iitc6m" path="res://systems/inputs/base_mode/move_back.tres" id="8_jb43f"]
[ext_resource type="Resource" uid="uid://j1o5ud0plk4" path="res://systems/inputs/base_mode/aim_release.tres" id="8_lhb11"]
[ext_resource type="Script" uid="uid://dd1yrt7eiiyf4" path="res://player_controller/Scripts/CapsuleCollider.cs" id="8_lmtjd"]
[ext_resource type="Resource" uid="uid://c3e0ivgaxrsyb" path="res://systems/inputs/base_mode/aim_down.tres" id="8_obsfv"]
[ext_resource type="PackedScene" uid="uid://wq1okogkhc5l" path="res://systems/mantle/mantle_system.tscn" id="8_qu4wy"]
[ext_resource type="Resource" uid="uid://7wm8ywvujwf" path="res://systems/inputs/base_mode/aim_cancel.tres" id="9_5p2qc"]
[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://b334rau1yxmm7" path="res://systems/inputs/base_mode/empower_down.tres" id="10_nodcl"]
[ext_resource type="Resource" uid="uid://b5gx3q8nvu72e" path="res://systems/inputs/base_mode/hit.tres" id="11_cresl"]
[ext_resource type="Resource" uid="uid://bbce5wfwxpns1" path="res://systems/inputs/base_mode/empower_release.tres" id="11_ruloh"]
[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="Resource" uid="uid://bw5k2gsv3jqcv" path="res://systems/inputs/base_mode/throw.tres" id="16_nob5r"]
[ext_resource type="Script" uid="uid://b5nk6ntlps3x0" path="res://systems/inputs/input_system.gd" id="16_v31n3"]
[ext_resource type="Resource" uid="uid://b334rau1yxmm7" path="res://systems/inputs/base_mode/slide_released.tres" id="17_6lejt"]
[ext_resource type="Resource" uid="uid://htqvokm8mufq" path="res://systems/inputs/base_mode/move.tres" id="17_h6vvl"]
[ext_resource type="PackedScene" uid="uid://cqduhd4opgwvm" path="res://systems/dash/dash_system.tscn" id="18_q5h8a"]
[ext_resource type="Resource" uid="uid://bbce5wfwxpns1" path="res://systems/inputs/base_mode/slide_pressed.tres" id="18_q14ux"]
[ext_resource type="Resource" uid="uid://spo3pbqjx0eb" path="res://systems/inputs/base_mode/parry.tres" id="18_ruloh"]
[ext_resource type="Resource" uid="uid://dxy0071ic1wdj" path="res://systems/inputs/base_mode/slam.tres" id="20_nob5r"]
[ext_resource type="PackedScene" uid="uid://dbe5f0p6lvqtr" path="res://systems/tween_queue/tween_queue_system.tscn" id="22_rpwev"]
[ext_resource type="PackedScene" uid="uid://bcwkugn6v3oy7" path="res://addons/godot_state_charts/utilities/state_chart_debugger.tscn" id="24_q5h8a"]
[ext_resource type="Script" uid="uid://couw105c3bde4" path="res://addons/godot_state_charts/state_chart.gd" id="25_wv70j"]
@@ -44,9 +45,39 @@
[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_q14ux"]
script = ExtResource("5_q7bng")
metadata/_custom_type_script = "uid://b6y3ugfydvch0"
[sub_resource type="Resource" id="Resource_q7bng"]
script = ExtResource("5_q7bng")
DamageType = 1
metadata/_custom_type_script = "uid://b6y3ugfydvch0"
[sub_resource type="Resource" id="Resource_jb43f"]
script = ExtResource("5_q7bng")
DamageType = 2
metadata/_custom_type_script = "uid://b6y3ugfydvch0"
[sub_resource type="Resource" id="Resource_cmijs"]
script = ExtResource("5_q7bng")
DamageType = 3
metadata/_custom_type_script = "uid://b6y3ugfydvch0"
[sub_resource type="CapsuleMesh" id="CapsuleMesh_xc2g5"]
height = 1.7
[sub_resource type="SphereShape3D" id="SphereShape3D_6lejt"]
radius = 0.45
[sub_resource type="SphereShape3D" id="SphereShape3D_q14ux"]
radius = 1.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nodcl"]
transparency = 1
albedo_color = Color(0, 0.627451, 0.6313726, 0.49019608)
@@ -57,43 +88,63 @@ top_radius = 0.2
bottom_radius = 0.2
height = 1.0
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_6lejt"]
radius = 1.0
height = 3.5
[sub_resource type="SphereShape3D" id="SphereShape3D_nob5r"]
radius = 0.4
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_2q0ik"]
blend_mode = 1
[node name="Player" type="CharacterBody3D"]
collision_mask = 272
script = ExtResource("1_poq2x")
GetDamageDealt = SubResource("Resource_m8gvy")
DamageModifiers = Array[Object]([SubResource("Resource_q14ux"), SubResource("Resource_q7bng"), SubResource("Resource_jb43f"), SubResource("Resource_cmijs")])
WalkSpeed = 7.5
AccelerationFloor = 4.0
DecelerationFloor = 3.0
AccelerationAir = 0.8
DecelerationAir = 0.02
Weight = 4.0
MantleTime = 0.3
MantlePath = ExtResource("2_6lejt")
MantleDashStrength = 25.0
MantleJumpStartVelocity = 15.0
CoyoteTime = 0.3
InputBufferFrames = 5
SimpleJumpStartVelocity = 6.0
SimpleJumpHangTimeInFrames = 1
SimpleJumpGravityLesseningFactor = 2.0
DoubleJumpHangTimeInFrames = 3
DoubleJumpGravityLesseningFactor = 1.5
MegaJumpStartVelocity = 30.0
MegaJumpHangTimeInFrames = 12
MegaJumpGravityLesseningFactor = 1.2
WallJumpStartVelocity = 8.0
MaxNumberOfEmpoweredActions = 3
SimpleDashStrength = 15.0
PoweredDashStrength = 30.0
SimpleDashStrength = 18.0
SimpleDashTime = 0.2
AimedDashTime = 0.2
PostDashSpeed = 30.0
SlamSpeed = 80.0
FlatGroundSlideSpeedLossRate = 0.996
GroundSlideJumpMultiplier = 0.1
GroundSlideJumpSpeedFactor = 0.1
GroundSlideDownSlopeAcceleration = 0.2
GroundSlideDownSlopeMaxSpeed = 30.0
AirGlideVSpeed = 4.0
AccelerationAirGlide = 0.4
AirGlideVerticalAcceleration = 8.0
AirGlideJumpMultiplier = 0.1
AirGlideJumpSpeedFactor = 0.05
WallHugGravityLesseningFactor = 15.0
WallHugDownwardMaxSpeed = 8.0
WallHugHorizontalDeceleration = 0.5
WallRunAltitudeLossSpeed = 12.0
WallRunSpeedThreshold = 10.0
WallHugDownwardMaxSpeed = 4.0
WallHugHorizontalDeceleration = 1.0
[node name="WallRunSnapper" type="RayCast3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, 0, 0, 0)
target_position = Vector3(0, 0, -5)
collision_mask = 2
collision_mask = 256
[node name="InputController" type="Node3D" parent="."]
script = ExtResource("16_v31n3")
@@ -103,51 +154,69 @@ move_left = ExtResource("5_q14ux")
move_right = ExtResource("6_q7bng")
move_front = ExtResource("7_m8gvy")
move_back = ExtResource("8_jb43f")
rotate_y = ExtResource("4_rxwoh")
rotate_vertical = ExtResource("4_rxwoh")
rotate_floorplane = ExtResource("5_4u7i3")
aim_down = ExtResource("8_obsfv")
aim_pressed = ExtResource("9_nob5r")
aim_released = ExtResource("8_lhb11")
jump = ExtResource("10_4u7i3")
jump_pressed = ExtResource("13_nob5r")
empower_down = ExtResource("10_nodcl")
empower_released = ExtResource("11_ruloh")
aim_canceled = ExtResource("9_5p2qc")
slide_pressed = ExtResource("18_q14ux")
slide_released = ExtResource("17_6lejt")
hit = ExtResource("11_cresl")
parry = ExtResource("18_ruloh")
dash = ExtResource("12_34snm")
throw = ExtResource("16_nob5r")
slam = ExtResource("20_nob5r")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.85, 0)
visible = false
mesh = SubResource("CapsuleMesh_xc2g5")
[node name="CapsuleCollider" type="CollisionShape3D" parent="."]
[node name="StandingCollider" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.85, 0)
shape = ExtResource("13_r7i3q")
debug_color = Color(0, 0.6, 0.701961, 0.341176)
script = ExtResource("8_lmtjd")
CapsuleDefaultHeight = 1.7
[node name="SlideCollider" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.45, 0)
shape = SubResource("SphereShape3D_6lejt")
disabled = true
debug_color = Color(0, 0.6, 0.701961, 0.341176)
[node name="HeadSystem" parent="." instance=ExtResource("11_rxwoh")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.6, 0)
CameraInclineAcceleration = 20.0
GroundedCameraIncline = 3.0
SlidingJitterAmplitude = 0.2
[node name="MantleSystem" parent="HeadSystem" instance=ExtResource("8_qu4wy")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.6, 0)
MantleEndLocationDistanceFromWall = 0.3
MantleHeightCastStart = 2.5
[node name="WeaponHitbox" type="Area3D" parent="HeadSystem"]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.6, 0)
collision_layer = 0
collision_mask = 16
monitorable = false
[node name="CollisionShape3D" type="CollisionShape3D" parent="HeadSystem/WeaponHitbox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, -1.5)
shape = SubResource("SphereShape3D_q14ux")
[node name="StairsSystem" type="Node3D" parent="."]
script = ExtResource("7_bmt5a")
[node name="StairsAheadRayCast3D" type="RayCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, -0.828)
target_position = Vector3(0, -0.55, 0)
collision_mask = 256
[node name="StairsBelowRayCast3D" type="RayCast3D" parent="."]
target_position = Vector3(0, -0.75, 0)
collision_mask = 256
[node name="Bobbing" type="Node3D" parent="."]
script = ExtResource("10_7wk1w")
@@ -161,60 +230,63 @@ visible = false
[node name="HeadCollisionDetector0" type="RayCast3D" parent="HeadCollisionDetectors"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.4, -0.210707)
target_position = Vector3(0, 1, 0)
collision_mask = 256
[node name="HeadCollisionDetector1" type="RayCast3D" parent="HeadCollisionDetectors"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.4, 0.23061)
target_position = Vector3(0, 1, 0)
collision_mask = 256
[node name="HeadCollisionDetector2" type="RayCast3D" parent="HeadCollisionDetectors"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.296, 1.4, 0)
target_position = Vector3(0, 1, 0)
collision_mask = 256
[node name="HeadCollisionDetector3" type="RayCast3D" parent="HeadCollisionDetectors"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.296, 1.4, 0)
target_position = Vector3(0, 1, 0)
collision_mask = 256
[node name="TweenQueueSystem" parent="." instance=ExtResource("22_rpwev")]
[node name="WallHugSystem" type="Node3D" parent="."]
visible = false
script = ExtResource("27_n7qhm")
[node name="back" type="RayCast3D" parent="WallHugSystem"]
target_position = Vector3(0, 0, 1)
collision_mask = 2
collision_mask = 256
[node name="back2" type="RayCast3D" parent="WallHugSystem"]
transform = Transform3D(0.70710677, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, 0.70710677, 0, 0, 0)
target_position = Vector3(0, 0, 1)
collision_mask = 2
collision_mask = 256
[node name="front" type="RayCast3D" parent="WallHugSystem"]
target_position = Vector3(0, 0, -1)
collision_mask = 2
collision_mask = 256
[node name="front2" type="RayCast3D" parent="WallHugSystem"]
transform = Transform3D(0.70710677, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, 0.70710677, 0, 0, 0)
target_position = Vector3(0, 0, -1)
collision_mask = 2
collision_mask = 256
[node name="right" type="RayCast3D" parent="WallHugSystem"]
target_position = Vector3(1, 0, 0)
collision_mask = 2
collision_mask = 256
[node name="right2" type="RayCast3D" parent="WallHugSystem"]
transform = Transform3D(0.70710677, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, 0.70710677, 0, 0, 0)
target_position = Vector3(1, 0, 0)
collision_mask = 2
collision_mask = 256
[node name="left" type="RayCast3D" parent="WallHugSystem"]
target_position = Vector3(-1, 0, 0)
collision_mask = 2
collision_mask = 256
[node name="left2" type="RayCast3D" parent="WallHugSystem"]
transform = Transform3D(0.70710677, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, 0.70710677, 0, 0, 0)
target_position = Vector3(-1, 0, 0)
collision_mask = 2
collision_mask = 256
[node name="DashSystem" parent="." instance=ExtResource("18_q5h8a")]
DashSpeed = 0.2
@@ -234,6 +306,21 @@ visible = false
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 0, -1)
mesh = SubResource("CylinderMesh_nodcl")
[node name="GroundDetector" type="ShapeCast3D" parent="."]
shape = SubResource("CapsuleShape3D_6lejt")
collision_mask = 256
[node name="CeilingDetector" type="ShapeCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9, 0)
enabled = false
shape = SubResource("SphereShape3D_nob5r")
target_position = Vector3(0, 0.4, 0)
collision_mask = 256
[node name="DirectGroundDetector" type="RayCast3D" parent="."]
target_position = Vector3(0, -2, 0)
collision_mask = 256
[node name="DashCooldown" type="Timer" parent="."]
wait_time = 0.8
one_shot = true
@@ -256,10 +343,10 @@ 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="."]
visible = false
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
@@ -387,28 +474,6 @@ delay_in_seconds = "0.0"
[node name="Canceled" type="Node" parent="StateChart/Root/Aim"]
script = ExtResource("27_34snm")
[node name="Empower" type="Node" parent="StateChart/Root"]
script = ExtResource("26_infe6")
initial_state = NodePath("Off")
[node name="Off" type="Node" parent="StateChart/Root/Empower"]
script = ExtResource("27_34snm")
[node name="ToOn" type="Node" parent="StateChart/Root/Empower/Off"]
script = ExtResource("28_n7qhm")
to = NodePath("../../On")
event = &"empower_down"
delay_in_seconds = "0.0"
[node name="On" type="Node" parent="StateChart/Root/Empower"]
script = ExtResource("27_34snm")
[node name="ToOff" type="Node" parent="StateChart/Root/Empower/On"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Off")
event = &"empower_released"
delay_in_seconds = "0.0"
[node name="PowerReserve" type="Node" parent="StateChart/Root"]
script = ExtResource("26_infe6")
initial_state = NodePath("Full")
@@ -496,6 +561,33 @@ to = NodePath("../OnWall/Hanging")
event = &"to_planted"
delay_in_seconds = "0.0"
[node name="Grounded" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("27_34snm")
[node name="OnDash" type="Node" parent="StateChart/Root/Movement/Grounded"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Dashing/Dash")
event = &"dash"
delay_in_seconds = "0.0"
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/Grounded"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Jump/SimpleJump")
event = &"jump"
delay_in_seconds = "0.0"
[node name="OnAirborne" type="Node" parent="StateChart/Root/Movement/Grounded"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Airborne/CoyoteEnabled")
event = &"start_falling"
delay_in_seconds = "0.0"
[node name="OnSlide" type="Node" parent="StateChart/Root/Movement/Grounded"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Sliding/GroundSlide")
event = &"slide"
delay_in_seconds = "0.0"
[node name="Mantling" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("27_34snm")
@@ -505,10 +597,31 @@ to = NodePath("../../Grounded")
event = &"grounded"
delay_in_seconds = "0.0"
[node name="OnMantleOtherSide" type="Node" parent="StateChart/Root/Movement/Mantling"]
script = ExtResource("28_n7qhm")
to = NodePath("../../OnWall/Hugging")
event = &"on_wall"
delay_in_seconds = "0.0"
[node name="Slamming" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("27_34snm")
[node name="OnSlamEnded" type="Node" parent="StateChart/Root/Movement/Slamming"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Grounded")
event = &"grounded"
delay_in_seconds = "0.0"
[node name="Jump" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("26_infe6")
initial_state = NodePath("SimpleJump")
[node name="OnDash" type="Node" parent="StateChart/Root/Movement/Jump"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Dashing/Dash")
event = &"dash"
delay_in_seconds = "0.0"
[node name="OnMantle" type="Node" parent="StateChart/Root/Movement/Jump"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Mantling")
@@ -524,10 +637,10 @@ to = NodePath("../../../Airborne/DoubleJumpEnabled")
event = &"jump_ended"
delay_in_seconds = "0.0"
[node name="OnMegajump" type="Node" parent="StateChart/Root/Movement/Jump/SimpleJump"]
[node name="OnSlide" type="Node" parent="StateChart/Root/Movement/Jump/SimpleJump"]
script = ExtResource("28_n7qhm")
to = NodePath("../../MegaJump")
event = &"megajump"
to = NodePath("../../../Sliding/AirGlideDoubleJumpEnabled")
event = &"slide"
delay_in_seconds = "0.0"
[node name="DoubleJump" type="Node" parent="StateChart/Root/Movement/Jump"]
@@ -539,19 +652,22 @@ to = NodePath("../../../Airborne/Falling")
event = &"jump_ended"
delay_in_seconds = "0.0"
[node name="OnMegajump" type="Node" parent="StateChart/Root/Movement/Jump/DoubleJump"]
[node name="OnSlide" type="Node" parent="StateChart/Root/Movement/Jump/DoubleJump"]
script = ExtResource("28_n7qhm")
to = NodePath("../../MegaJump")
event = &"megajump"
to = NodePath("../../../Sliding/AirGlide")
event = &"slide"
delay_in_seconds = "0.0"
[node name="MegaJump" type="Node" parent="StateChart/Root/Movement/Jump"]
script = ExtResource("27_34snm")
[node name="Dashing" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("26_infe6")
initial_state = NodePath("Dash")
[node name="OnDashEndedGrounded" type="Node" parent="StateChart/Root/Movement/Dashing"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Grounded")
event = &"grounded"
delay_in_seconds = "0.0"
[node name="OnDashEnded" type="Node" parent="StateChart/Root/Movement/Dashing"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Airborne/Reset")
@@ -576,33 +692,112 @@ script = ExtResource("27_34snm")
[node name="ToWeaponDash" type="Node" parent="StateChart/Root/Movement/Dashing"]
script = ExtResource("27_34snm")
[node name="Grounded" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("27_34snm")
[node name="Sliding" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("26_infe6")
initial_state = NodePath("GroundSlide")
[node name="OnDash" type="Node" parent="StateChart/Root/Movement/Grounded"]
[node name="OnDash" type="Node" parent="StateChart/Root/Movement/Sliding"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Dashing/Dash")
event = &"dash"
event = &"actually_no_dash"
delay_in_seconds = "0.0"
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/Grounded"]
[node name="OnMantle" type="Node" parent="StateChart/Root/Movement/Sliding"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Jump/SimpleJump")
to = NodePath("../../Mantling")
event = &"mantle"
delay_in_seconds = "0.0"
[node name="GroundSlide" type="Node" parent="StateChart/Root/Movement/Sliding"]
script = ExtResource("27_34snm")
[node name="OnSlideReleased" type="Node" parent="StateChart/Root/Movement/Sliding/GroundSlide"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Grounded")
event = &"slide_released"
delay_in_seconds = "0.0"
[node name="OnAirborne" type="Node" parent="StateChart/Root/Movement/Sliding/GroundSlide"]
script = ExtResource("28_n7qhm")
to = NodePath("../../AirGlideDoubleJumpEnabled")
event = &"start_falling"
delay_in_seconds = "0.0"
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/Sliding/GroundSlide"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/SimpleJump")
event = &"jump"
delay_in_seconds = "0.0"
[node name="OnMegajump" type="Node" parent="StateChart/Root/Movement/Grounded"]
[node name="OnCancel" type="Node" parent="StateChart/Root/Movement/Sliding/GroundSlide"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Jump/MegaJump")
event = &"megajump"
to = NodePath("../../SlideCanceled")
event = &"slide_canceled"
delay_in_seconds = "0.0"
[node name="OnAirborne" type="Node" parent="StateChart/Root/Movement/Grounded"]
[node name="AirGlideDoubleJumpEnabled" type="Node" parent="StateChart/Root/Movement/Sliding"]
script = ExtResource("27_34snm")
[node name="OnSlideReleased" type="Node" parent="StateChart/Root/Movement/Sliding/AirGlideDoubleJumpEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Airborne/CoyoteEnabled")
to = NodePath("../../../Airborne/Reset")
event = &"slide_released"
delay_in_seconds = "0.0"
[node name="OnGrounded" type="Node" parent="StateChart/Root/Movement/Sliding/AirGlideDoubleJumpEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../GroundSlide")
event = &"grounded"
delay_in_seconds = "0.0"
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/Sliding/AirGlideDoubleJumpEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/DoubleJump")
event = &"jump"
delay_in_seconds = "0.0"
[node name="AirGlide" type="Node" parent="StateChart/Root/Movement/Sliding"]
script = ExtResource("27_34snm")
[node name="OnSlideReleased" type="Node" parent="StateChart/Root/Movement/Sliding/AirGlide"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Airborne/Reset")
event = &"slide_released"
delay_in_seconds = "0.0"
[node name="OnGrounded" type="Node" parent="StateChart/Root/Movement/Sliding/AirGlide"]
script = ExtResource("28_n7qhm")
to = NodePath("../../GroundSlide")
event = &"grounded"
delay_in_seconds = "0.0"
[node name="SlideCanceled" type="Node" parent="StateChart/Root/Movement/Sliding"]
script = ExtResource("27_34snm")
[node name="OnAirborne" type="Node" parent="StateChart/Root/Movement/Sliding/SlideCanceled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Airborne/CoyoteEnabled")
event = &"start_falling"
delay_in_seconds = "0.0"
[node name="OnDash" type="Node" parent="StateChart/Root/Movement/Sliding/SlideCanceled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Dashing/Dash")
event = &"dash"
delay_in_seconds = "0.0"
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/Sliding/SlideCanceled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/SimpleJump")
event = &"jump"
delay_in_seconds = "0.0"
[node name="OnSlideReleased" type="Node" parent="StateChart/Root/Movement/Sliding/SlideCanceled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Grounded")
event = &"slide_released"
delay_in_seconds = "0.0"
[node name="Airborne" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("26_infe6")
initial_state = NodePath("CoyoteEnabled")
@@ -629,13 +824,19 @@ to = NodePath("../../Grounded")
event = &"grounded"
delay_in_seconds = "0.0"
[node name="OnSlam" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Slamming")
event = &"slam"
delay_in_seconds = "0.0"
[node name="CoyoteEnabled" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("27_34snm")
[node name="OnMegajump" type="Node" parent="StateChart/Root/Movement/Airborne/CoyoteEnabled"]
[node name="OnSlide" type="Node" parent="StateChart/Root/Movement/Airborne/CoyoteEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/MegaJump")
event = &"megajump"
to = NodePath("../../../Sliding/AirGlideDoubleJumpEnabled")
event = &"slide"
delay_in_seconds = "0.0"
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/Airborne/CoyoteEnabled"]
@@ -653,16 +854,16 @@ delay_in_seconds = "0.0"
[node name="DoubleJumpEnabled" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("27_34snm")
[node name="OnWallHug" type="Node" parent="StateChart/Root/Movement/Airborne/DoubleJumpEnabled"]
[node name="OnSlide" type="Node" parent="StateChart/Root/Movement/Airborne/DoubleJumpEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../OnWall/HuggingCoyoteEnabled")
event = &"wall_hug"
to = NodePath("../../../Sliding/AirGlideDoubleJumpEnabled")
event = &"slide"
delay_in_seconds = "0.0"
[node name="OnMegajump" type="Node" parent="StateChart/Root/Movement/Airborne/DoubleJumpEnabled"]
[node name="OnWallHug" type="Node" parent="StateChart/Root/Movement/Airborne/DoubleJumpEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/MegaJump")
event = &"megajump"
to = NodePath("../../../OnWall/Hugging")
event = &"wall_hug"
delay_in_seconds = "0.0"
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/Airborne/DoubleJumpEnabled"]
@@ -674,6 +875,12 @@ delay_in_seconds = "0.0"
[node name="Falling" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("27_34snm")
[node name="OnSlide" type="Node" parent="StateChart/Root/Movement/Airborne/Falling"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Sliding/AirGlide")
event = &"slide"
delay_in_seconds = "0.0"
[node name="OnWallHug" type="Node" parent="StateChart/Root/Movement/Airborne/Falling"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../OnWall/Hugging")
@@ -686,28 +893,22 @@ to = NodePath("../../DoubleJumpEnabled")
event = &"enable_double_jump"
delay_in_seconds = "0.0"
[node name="OnWallJump" type="Node" parent="StateChart/Root/Movement/Airborne/Falling"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/DoubleJump")
event = &"wall_jump"
delay_in_seconds = "0.0"
[node name="OnWall" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("26_infe6")
initial_state = NodePath("Hugging")
[node name="OnDash" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Dashing/Dash")
event = &"dash"
delay_in_seconds = "0.0"
[node name="OnGrounded" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Grounded")
event = &"grounded"
delay_in_seconds = "0.0"
[node name="OnMegajump" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Jump/MegaJump")
event = &"megajump"
delay_in_seconds = "0.0"
[node name="OnLeaveWall" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Airborne/Reset")
@@ -720,90 +921,54 @@ to = NodePath("../../Mantling")
event = &"mantle"
delay_in_seconds = "0.0"
[node name="HuggingCoyoteEnabled" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("27_34snm")
[node name="OnExpiration" type="Node" parent="StateChart/Root/Movement/OnWall/HuggingCoyoteEnabled"]
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Hugging")
event = &"coyote_expired"
delay_in_seconds = "0.0"
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall/HuggingCoyoteEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/DoubleJump")
to = NodePath("../../Jump/SimpleJump")
event = &"jump"
delay_in_seconds = "0.0"
[node name="Hugging" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("27_34snm")
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall/Hugging"]
[node name="OnDash" type="Node" parent="StateChart/Root/Movement/OnWall/Hugging"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/DoubleJump")
event = &"jump"
to = NodePath("../../../Dashing/Dash")
event = &"dash"
delay_in_seconds = "0.0"
[node name="Hanging" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("27_34snm")
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall/Hanging"]
[node name="OnDash" type="Node" parent="StateChart/Root/Movement/OnWall/Hanging"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/DoubleJump")
event = &"jump"
delay_in_seconds = "0.0"
[node name="RunningCoyoteEnabled" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("27_34snm")
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall/RunningCoyoteEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/DoubleJump")
event = &"jump"
delay_in_seconds = "0.0"
[node name="OnExpiration" type="Node" parent="StateChart/Root/Movement/OnWall/RunningCoyoteEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Running")
event = &"coyote_expired"
delay_in_seconds = "0.0"
[node name="OnLeaveWall" type="Node" parent="StateChart/Root/Movement/OnWall/RunningCoyoteEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Airborne/CoyoteEnabled")
event = &"start_falling"
to = NodePath("../../../Dashing/Dash")
event = &"dash"
delay_in_seconds = "0.0"
[node name="Running" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("27_34snm")
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall/Running"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/SimpleJump")
event = &"jump"
delay_in_seconds = "0.0"
[node name="OnLeaveWall" type="Node" parent="StateChart/Root/Movement/OnWall/Running"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Airborne/CoyoteEnabled")
event = &"start_falling"
delay_in_seconds = "0.0"
[connection signal="input_aim_canceled" from="InputController" to="." method="OnInputAimCanceled"]
[connection signal="input_aim_down" from="InputController" to="." method="OnInputAimDown"]
[connection signal="input_aim_pressed" from="InputController" to="." method="OnInputAimPressed"]
[connection signal="input_aim_released" from="InputController" to="." method="OnInputAimReleased"]
[connection signal="input_dash" from="InputController" to="." method="OnInputDashPressed"]
[connection signal="input_device_changed" from="InputController" to="." method="InputDeviceChanged"]
[connection signal="input_empower_down" from="InputController" to="." method="OnInputEmpowerDown"]
[connection signal="input_empower_released" from="InputController" to="." method="OnInputEmpowerReleased"]
[connection signal="input_hit" from="InputController" to="." method="OnInputHitPressed"]
[connection signal="input_jump_ended" from="InputController" to="." method="OnInputJumpEnded"]
[connection signal="input_jump_ongoing" from="InputController" to="." method="OnInputJumpOngoing"]
[connection signal="input_jump_started" from="InputController" to="." method="OnInputJumpStarted"]
[connection signal="input_move" from="InputController" to="." method="OnInputMove"]
[connection signal="input_move_keyboard" from="InputController" to="." method="OnInputMoveKeyboard"]
[connection signal="input_parry" from="InputController" to="." method="OnInputParryPressed"]
[connection signal="input_rotate_floorplane" from="InputController" to="." method="OnInputRotateFloorplane"]
[connection signal="input_rotate_y" from="InputController" to="." method="OnInputRotateY"]
[connection signal="input_throw" from="InputController" to="." method="OnInputThrowPressed"]
[connection signal="input_slam" from="InputController" to="." method="OnInputSlamPressed"]
[connection signal="input_slide_ended" from="InputController" to="." method="OnInputSlideEnded"]
[connection signal="input_slide_started" from="InputController" to="." method="OnInputSlideStarted"]
[connection signal="WallDetected" from="WallHugSystem" to="." method="OnWallDetected"]

View File

@@ -40,17 +40,13 @@ public partial class CapsuleCollider : CollisionShape3D
return Mathf.IsEqualApprox(_shape.Height, CapsuleCrouchHeight);
}
public void Crouch(float delta, float crouchTransitionSpeed)
public void Crouch()
{
_shape.Height -= delta * crouchTransitionSpeed;
_shape.Height = Mathf.Clamp(_shape.Height, CapsuleCrouchHeight, CapsuleDefaultHeight);
_shape.Height = CapsuleCrouchHeight;
}
public void UndoCrouching(float delta, float crouchTransitionSpeed)
public void Uncrouch()
{
_shape.Height += delta * crouchTransitionSpeed;
_shape.Height = Mathf.Clamp(_shape.Height, CapsuleCrouchHeight, CapsuleDefaultHeight);
_shape.Height = CapsuleDefaultHeight;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -146,6 +146,16 @@ aim_dash={
locale/translations=PackedStringArray("res://addons/maaacks_game_template/base/translations/menus_translations.en.translation", "res://addons/maaacks_game_template/base/translations/menus_translations.fr.translation")
[layer_names]
3d_physics/layer_1="Player"
3d_physics/layer_2="2"
3d_physics/layer_3="3"
3d_physics/layer_4="4"
3d_physics/layer_5="enemies"
3d_physics/layer_9="terrain"
3d_physics/layer_17="weapon"
[maaacks_game_template]
disable_update_check=false
@@ -154,6 +164,7 @@ copy_path="res://scenes"
[physics]
3d/run_on_separate_thread=true
common/physics_jitter_fix=0.0
3d/physics_engine="Jolt Physics"
common/physics_interpolation=true
@@ -161,5 +172,6 @@ common/physics_interpolation=true
[rendering]
textures/vram_compression/import_etc2_astc=true
lights_and_shadows/directional_shadow/soft_shadow_filter_quality=5
environment/volumetric_fog/volume_size=256
environment/volumetric_fog/volume_depth=256

View File

@@ -0,0 +1,24 @@
using Godot;
using System;
using Movementtests.systems.damage;
[GlobalClass]
public partial class RDamage : Resource
{
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float DamageDealt = 1.0f;
[Export]
public EDamageTypes DamageType = EDamageTypes.Normal;
public RDamage()
{
DamageDealt = 1.0f;
DamageType = EDamageTypes.Normal;
}
public RDamage(float damageDealt, EDamageTypes damageType)
{
DamageDealt = damageDealt;
DamageType = damageType;
}
}

View File

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

View File

@@ -0,0 +1,37 @@
using Godot;
using System;
using Movementtests.interfaces;
using Movementtests.systems.damage;
[GlobalClass]
public partial class RDamageModifier : Resource, IDamageable
{
[Signal]
delegate void DamageTakenEventHandler(float damage);
[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 void TakeDamage(RDamage damage)
{
if (damage.DamageType != DamageType) return;
var finalDamage = damage.DamageDealt * Modifier;
var message = $"Damage of type {DamageType} taken: {finalDamage}";
GD.Print(message);
EmitSignalDamageTaken(finalDamage);
}
}

View File

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

View File

@@ -0,0 +1,18 @@
using Godot;
using System;
[GlobalClass]
public partial class EnemyInitInputs : Resource
{
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float Speed;
public EnemyInitInputs()
{
Speed = 5.0f;
}
public EnemyInitInputs(float speed)
{
Speed = speed;
}
}

View File

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

View File

@@ -0,0 +1,61 @@
using Godot;
using System;
using Movementtests.interfaces;
[GlobalClass]
public partial class FirstEnemy : CharacterBody3D, IDamageable, IKillable, IKnockbackable, IDamageMaker
{
[Export]
public Node3D Target { get; set; }
[Export]
public EnemyInitInputs Inputs;
[Export]
public RDamage GetDamageDealt { get; set; }
[Export]
public RDamageModifier[] DamageModifiers { get; set; }
private RayCast3D _wallInFrontRayCast;
private Area3D _damageBox;
public override void _Ready()
{
_wallInFrontRayCast = GetNode<RayCast3D>("WallInFrontRayCast");
_damageBox = GetNode<Area3D>("DamageBox");
_damageBox.BodyEntered += OnDamageBoxTriggered;
}
public override void _PhysicsProcess(double delta)
{
var target = Target.GlobalPosition;
var direction = (target - GlobalPosition).Normalized();
var targetPlane = new Vector3(target.X, GlobalPosition.Y, target.Z);
LookAt(targetPlane);
var velocity = Velocity;
velocity.X = direction.X * Inputs.Speed;
velocity.Z = direction.Z * Inputs.Speed;
if (_wallInFrontRayCast.IsColliding())
velocity.Y = Inputs.Speed;
else if (!IsOnFloor())
velocity += GetGravity() * (float)delta;
Velocity = velocity;
MoveAndSlide();
}
public void OnDamageBoxTriggered(Node3D body)
{
if(body is IDamageable damageable) damageable.TakeDamage(GetDamageDealt);
}
public void TakeDamage(RDamage damage)
{
foreach (var damageable in DamageModifiers.ToIDamageables())
damageable.TakeDamage(damage);
}
}

View File

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

View File

@@ -0,0 +1,92 @@
using Godot;
using System;
using Movementtests.interfaces;
[GlobalClass]
public partial class FlyingEnemy : CharacterBody3D, IDamageable, IKillable, IKnockbackable, IDamageMaker
{
[Export]
public Node3D Target { get; set; }
[Export]
public FlyingEnemyInputs Inputs { get; set; }
[Export]
public RDamage GetDamageDealt { get; set; }
[Export]
public RDamageModifier[] DamageModifiers { get; set; }
private RayCast3D _groundDistanceRaycast;
private Area3D _damageBox;
private bool _movingToDesiredHeight = true;
private Vector3 _randomDirection;
public override void _Ready()
{
_groundDistanceRaycast = GetNode<RayCast3D>("GroundDistance");
_groundDistanceRaycast.TargetPosition = new Vector3(0, 0, 0);
_damageBox = GetNode<Area3D>("DamageBox");
_damageBox.BodyEntered += OnDamageBoxTriggered;
_randomDirection = new Vector3(GD.RandRange(-1, 1), 1, GD.RandRange(-1, 1)).Normalized();
}
public override void _PhysicsProcess(double delta)
{
var spaceState = GetWorld3D().DirectSpaceState;
var target = Target.GlobalPosition;
var direction = (target - GlobalPosition).Normalized();
Vector3 velocity = Velocity;
LookAt(target);
// Check if we have a direct line of sight to the player
if (!_movingToDesiredHeight)
{
velocity = direction * Inputs.Speed;
var query = PhysicsRayQueryParameters3D.Create(GlobalPosition, target, _groundDistanceRaycast.CollisionMask);
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 = _randomDirection * Inputs.Speed;
var groundQuery = PhysicsRayQueryParameters3D.Create(GlobalPosition, GlobalPosition+Vector3.Down*Inputs.TargetHeight, _groundDistanceRaycast.CollisionMask);
var groundResult = spaceState.IntersectRay(groundQuery);
if (groundResult.Count == 0)
{
velocity.Y = 0;
var query = PhysicsRayQueryParameters3D.Create(GlobalPosition, target, _groundDistanceRaycast.CollisionMask);
var result = spaceState.IntersectRay(query);
if (result.Count == 0)
{
_movingToDesiredHeight = false;
}
}
}
Velocity = velocity;
MoveAndSlide();
}
public void OnDamageBoxTriggered(Node3D body)
{
if(body is IDamageable damageable) damageable.TakeDamage(GetDamageDealt);
}
public void TakeDamage(RDamage damage)
{
foreach (var damageable in DamageModifiers.ToIDamageables())
damageable.TakeDamage(damage);
}
}

View File

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

View File

@@ -0,0 +1,23 @@
using Godot;
using System;
[GlobalClass]
public partial class FlyingEnemyInputs : Resource
{
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float Speed;
[Export(PropertyHint.Range, "0,100,1,or_greater")]
public float TargetHeight;
public FlyingEnemyInputs()
{
Speed = 5.0f;
TargetHeight = 50.0f;
}
public FlyingEnemyInputs(float speed, float targetHeight)
{
Speed = speed;
TargetHeight = targetHeight;
}
}

View File

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

View File

@@ -0,0 +1,68 @@
[gd_scene load_steps=9 format=3 uid="uid://dxt0e2ugmttqq"]
[ext_resource type="Script" uid="uid://bn7sc6id7n166" path="res://scenes/enemies/FirstEnemy.cs" id="1_4yfjf"]
[ext_resource type="Script" uid="uid://b6y3ugfydvch0" path="res://resource_definitions/RDamageModifier.cs" id="2_ylcc3"]
[sub_resource type="Resource" id="Resource_gsmti"]
script = ExtResource("2_ylcc3")
metadata/_custom_type_script = "uid://b6y3ugfydvch0"
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_62kkh"]
[sub_resource type="CapsuleMesh" id="CapsuleMesh_3uydm"]
[sub_resource type="SphereMesh" id="SphereMesh_4yfjf"]
radius = 0.05
height = 0.1
radial_segments = 4
rings = 4
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4yfjf"]
albedo_color = Color(0.06469653, 0.06469653, 0.06469653, 1)
[sub_resource type="BoxShape3D" id="BoxShape3D_4yfjf"]
size = Vector3(1, 2, 2)
[node name="FirstEnemy" type="CharacterBody3D"]
collision_layer = 16
collision_mask = 273
script = ExtResource("1_4yfjf")
DamageModifiers = Array[Object]([SubResource("Resource_gsmti")])
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
shape = SubResource("CapsuleShape3D_62kkh")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
layers = 33
mesh = SubResource("CapsuleMesh_3uydm")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.2, 1.5, -0.5)
layers = 33
cast_shadow = 0
ignore_occlusion_culling = true
mesh = SubResource("SphereMesh_4yfjf")
surface_material_override/0 = SubResource("StandardMaterial3D_4yfjf")
[node name="MeshInstance3D3" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.2, 1.5, -0.5)
layers = 33
cast_shadow = 0
ignore_occlusion_culling = true
mesh = SubResource("SphereMesh_4yfjf")
surface_material_override/0 = SubResource("StandardMaterial3D_4yfjf")
[node name="WallInFrontRayCast" type="RayCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0)
target_position = Vector3(0, 0, -1.5)
collision_mask = 272
[node name="DamageBox" type="Area3D" parent="."]
collision_layer = 0
monitorable = false
[node name="CollisionShape3D" type="CollisionShape3D" parent="DamageBox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, -0.5)
shape = SubResource("BoxShape3D_4yfjf")

View File

@@ -0,0 +1,8 @@
[gd_resource type="Resource" script_class="RDamage" load_steps=2 format=3 uid="uid://otfc2snh8umc"]
[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://resource_definitions/RDamage.cs" id="1_y415a"]
[resource]
script = ExtResource("1_y415a")
DamageDealt = 2.0
metadata/_custom_type_script = "uid://jitubgv6judn"

View File

@@ -0,0 +1,72 @@
[gd_scene load_steps=10 format=3 uid="uid://cmlud1hwkd6sv"]
[ext_resource type="Script" uid="uid://cmvep0qi7qlvf" path="res://scenes/enemies/FlyingEnemy.cs" id="1_b46rq"]
[ext_resource type="Script" uid="uid://b6y3ugfydvch0" path="res://resource_definitions/RDamageModifier.cs" id="2_1bsgx"]
[sub_resource type="Resource" id="Resource_2pnje"]
script = ExtResource("2_1bsgx")
metadata/_custom_type_script = "uid://b6y3ugfydvch0"
[sub_resource type="Resource" id="Resource_1bsgx"]
script = ExtResource("2_1bsgx")
DamageType = 1
Modifier = 2.0
metadata/_custom_type_script = "uid://b6y3ugfydvch0"
[sub_resource type="SphereShape3D" id="SphereShape3D_b46rq"]
[sub_resource type="SphereMesh" id="SphereMesh_1bsgx"]
[sub_resource type="SphereMesh" id="SphereMesh_4yfjf"]
radius = 0.05
height = 0.1
radial_segments = 4
rings = 4
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4yfjf"]
albedo_color = Color(0.06469653, 0.06469653, 0.06469653, 1)
[sub_resource type="BoxShape3D" id="BoxShape3D_4yfjf"]
size = Vector3(1, 1, 1.5)
[node name="FlyingEnemy" type="CharacterBody3D"]
collision_layer = 16
collision_mask = 273
motion_mode = 1
script = ExtResource("1_b46rq")
DamageModifiers = Array[Object]([SubResource("Resource_2pnje"), SubResource("Resource_1bsgx")])
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("SphereShape3D_b46rq")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
layers = 33
mesh = SubResource("SphereMesh_1bsgx")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.2, 0, -0.5)
layers = 33
cast_shadow = 0
ignore_occlusion_culling = true
mesh = SubResource("SphereMesh_4yfjf")
surface_material_override/0 = SubResource("StandardMaterial3D_4yfjf")
[node name="MeshInstance3D3" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.2, 0, -0.5)
layers = 33
cast_shadow = 0
ignore_occlusion_culling = true
mesh = SubResource("SphereMesh_4yfjf")
surface_material_override/0 = SubResource("StandardMaterial3D_4yfjf")
[node name="GroundDistance" type="RayCast3D" parent="."]
target_position = Vector3(0, 0, 0)
collision_mask = 272
[node name="DamageBox" type="Area3D" parent="."]
collision_layer = 0
monitorable = false
[node name="CollisionShape3D" type="CollisionShape3D" parent="DamageBox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.75)
shape = SubResource("BoxShape3D_4yfjf")

View File

@@ -0,0 +1,8 @@
[gd_resource type="Resource" script_class="RDamage" load_steps=2 format=3 uid="uid://dgo65k2ceqfvy"]
[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://resource_definitions/RDamage.cs" id="1_h6law"]
[resource]
script = ExtResource("1_h6law")
DamageType = 3
metadata/_custom_type_script = "uid://jitubgv6judn"

View File

@@ -20,6 +20,6 @@ public partial class Path : Path3D
public void Teardown()
{
QueueFree();
if (!IsQueuedForDeletion()) QueueFree();
}
}

View File

@@ -0,0 +1,61 @@
using Godot;
using System;
public partial class Spawner : Node3D
{
[Export(PropertyHint.NodeType)]
public PackedScene SceneToSpawn { get; set; }
[Export]
public Resource Inputs;
[Export]
public Node3D Target { get; set; }
[Export(PropertyHint.Range, "0.1, 100, 0.1, or_greater")]
public float SpawnInterval { get; set; } = 1.0f;
[Export]
public bool IsActiveOnStart { get; set; } = true;
private float _spawnTimer;
private bool _isActive;
public override void _Ready()
{
_isActive = IsActiveOnStart;
_spawnTimer = SpawnInterval;
}
public override void _Process(double delta)
{
if (!_isActive) return;
_spawnTimer -= (float) delta;
if (_spawnTimer <= 0) Spawn();
}
public void Spawn()
{
if (SceneToSpawn == null || !SceneToSpawn.CanInstantiate()) return;
var spawnedInstance = SceneToSpawn.Instantiate() as FirstEnemy;
if (spawnedInstance == null) return;
spawnedInstance.Inputs = Inputs as EnemyInitInputs;
spawnedInstance.Target = Target;
GetTree().GetCurrentScene().AddChild(spawnedInstance);
spawnedInstance.GlobalPosition = GlobalPosition;
_spawnTimer = SpawnInterval;
}
public void StartSpawning()
{
_isActive = true;
_spawnTimer = SpawnInterval;
}
public void StopSpawning()
{
_isActive = false;
}
}

View File

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

View File

@@ -0,0 +1,10 @@
[gd_scene load_steps=3 format=3 uid="uid://c305mfrtumcyq"]
[ext_resource type="Script" uid="uid://djyspwixi01j5" path="res://scenes/spawners/Spawner.cs" id="1_2otbo"]
[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/first_enemy.tscn" id="2_2otbo"]
[node name="Spawner" type="Node3D"]
script = ExtResource("1_2otbo")
SceneToSpawn = ExtResource("2_2otbo")
[node name="Marker3D" type="Marker3D" parent="."]

View File

@@ -10,7 +10,6 @@ font_size = 30
[node name="TutoTrigger" type="Area3D"]
collision_layer = 0
collision_mask = 16
script = ExtResource("1_w8mpv")
[node name="Control" type="Control" parent="."]

View File

@@ -0,0 +1,9 @@
namespace Movementtests.systems.damage;
public enum EDamageTypes
{
Normal,
Fire,
Ice,
Explosion,
}

View File

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

View File

@@ -28,7 +28,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.6, 0)
shape = SubResource("SphereShape3D_jngg2")
target_position = Vector3(0, 0, -12)
max_results = 1
collision_mask = 2
collision_mask = 256
debug_shape_custom_color = Color(0.911631, 0.11884, 0.656218, 1)
[node name="DashCastDrop" type="ShapeCast3D" parent="."]
@@ -36,7 +36,7 @@ transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 1
shape = SubResource("SphereShape3D_jngg2")
target_position = Vector3(0, 0, -50)
max_results = 1
collision_mask = 2
collision_mask = 256
debug_shape_custom_color = Color(0.911631, 0.11884, 0.656218, 1)
[node name="DashTarget" type="MeshInstance3D" parent="."]

View File

@@ -22,12 +22,26 @@ public partial class HeadSystem : Node3D
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float GroundedCameraIncline { get; set; } = 5f;
[Export(PropertyHint.Range, "0,2,0.1,or_greater")]
public float SlidingCameraHeightOffset { get; set; } = 1.0f;
[Export(PropertyHint.Range, "0,1,0.01,or_greater")]
public float SlidingJitterFrequency { get; set; } = 0.01f;
[Export(PropertyHint.Range, "0,1,0.01,or_greater")]
public float SlidingJitterAmplitude { get; set; } = 0.1f;
private FastNoiseLite _slidingNoise = new FastNoiseLite();
public void Init()
{
Input.SetMouseMode(Input.MouseModeEnum.Captured);
_camera = GetNode<Camera3D>("CameraSmooth/Camera3D");
_cameraAnchor = GetNode<Marker3D>("CameraAnchor");
_animationPlayer = GetNode<AnimationPlayer>("AnimationPlayer");
_slidingNoise.NoiseType = FastNoiseLite.NoiseTypeEnum.Perlin;
_slidingNoise.SetFrequency(SlidingJitterFrequency);
}
public void OnMantle()
@@ -35,7 +49,7 @@ public partial class HeadSystem : Node3D
_animationPlayer.Play("mantle");
}
public void LookAround(double delta, Vector2 lookDir, Vector3 playerVelocity, Vector3? wallContactPoint = null, float sensitivitMultiplier = 1f)
public void LookAround(double delta, Vector2 lookDir, Vector3 playerInput, Vector3 playerVelocity, Vector3? wallContactPoint = null, float sensitivitMultiplier = 1f, bool isSliding = false)
{
// Horizontal movement of head
float angleForHorizontalRotation = lookDir.X * LookSensitivity * sensitivitMultiplier;
@@ -46,8 +60,9 @@ public partial class HeadSystem : Node3D
currentCameraRotation.X += Convert.ToSingle(lookDir.Y * LookSensitivity * sensitivitMultiplier);
currentCameraRotation.X = Mathf.Clamp(currentCameraRotation.X, Mathf.DegToRad(-90f), Mathf.DegToRad(90f));
// Camera incline on Wall and more
var isWallRunning = wallContactPoint.HasValue && wallContactPoint.Value.Length() > Mathf.Epsilon;
var cameraIncline = 0f;
float cameraIncline;
if (isWallRunning)
{
var directionToWall = (wallContactPoint.Value - GlobalPosition).Normalized();
@@ -56,11 +71,23 @@ public partial class HeadSystem : Node3D
}
else
{
var cameraInclineFactor = ComputeCameraInclineFactor(playerVelocity);
var cameraInclineFactor = ComputeCameraInclineFactor(playerInput);
cameraIncline = Mathf.DegToRad(GroundedCameraIncline * cameraInclineFactor * -1.0f);
}
currentCameraRotation.Z = (float) Mathf.Lerp(currentCameraRotation.Z, cameraIncline, delta * CameraInclineAcceleration);
_cameraAnchor.Rotation = currentCameraRotation;
if (isSliding)
{
_cameraAnchor.Position = Vector3.Down*SlidingCameraHeightOffset;
float noise1D = _slidingNoise.GetNoise1D(Time.GetTicksMsec());
float noiseAmplitude = SlidingJitterAmplitude*Mathf.Clamp(playerVelocity.Length(), 0f, 1f);
_cameraAnchor.Position += Vector3.Up*noise1D*noiseAmplitude;
}
else
{
_cameraAnchor.Position = Vector3.Zero;
}
_camera.GlobalTransform = _cameraAnchor.GetGlobalTransformInterpolated();
}

View File

@@ -69,10 +69,6 @@ transform = Transform3D(1, 0, 0, 0, 0.99999994, 0, 0, 0, 0.99999994, 0, 0, 0)
current = true
fov = 90.0
[node name="RayCast3D" type="RayCast3D" parent="CameraSmooth/Camera3D"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, -0.64723)
visible = false
[node name="CameraAnchor" type="Marker3D" parent="."]
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]

View File

@@ -1,14 +0,0 @@
[gd_resource type="Resource" script_class="GUIDEAction" load_steps=2 format=3 uid="uid://7wm8ywvujwf"]
[ext_resource type="Script" uid="uid://cluhc11vixkf1" path="res://addons/guide/guide_action.gd" id="1_36r6u"]
[resource]
script = ExtResource("1_36r6u")
name = &""
action_value_type = 0
block_lower_priority_actions = true
emit_as_godot_actions = false
is_remappable = false
display_name = ""
display_category = ""
metadata/_custom_type_script = "uid://cluhc11vixkf1"

View File

@@ -1,4 +1,4 @@
[gd_resource type="Resource" script_class="GUIDEMappingContext" load_steps=155 format=3 uid="uid://bl5crtu1gkrtr"]
[gd_resource type="Resource" script_class="GUIDEMappingContext" load_steps=161 format=3 uid="uid://bl5crtu1gkrtr"]
[ext_resource type="Script" uid="uid://cpplm41b5bt6m" path="res://addons/guide/guide_action_mapping.gd" id="1_qmhk6"]
[ext_resource type="Resource" uid="uid://htqvokm8mufq" path="res://systems/inputs/base_mode/move.tres" id="2_g6bbx"]
@@ -18,22 +18,22 @@
[ext_resource type="Script" uid="uid://b52rqq28tuqpg" path="res://addons/guide/triggers/guide_trigger_pressed.gd" id="15_fykw6"]
[ext_resource type="Script" uid="uid://b4cdrn4paoj3i" path="res://addons/guide/triggers/guide_trigger_down.gd" id="15_g6bbx"]
[ext_resource type="Script" uid="uid://cgy4anjdob2tp" path="res://addons/guide/modifiers/guide_modifier_window_relative.gd" id="15_rvpjj"]
[ext_resource type="Resource" uid="uid://b334rau1yxmm7" path="res://systems/inputs/base_mode/empower_down.tres" id="16_0qat1"]
[ext_resource type="Resource" uid="uid://bebstkm608wxx" path="res://systems/inputs/base_mode/aim_pressed.tres" id="16_li5ak"]
[ext_resource type="Resource" uid="uid://j1o5ud0plk4" path="res://systems/inputs/base_mode/aim_release.tres" id="16_rvpjj"]
[ext_resource type="Script" uid="uid://vgjlx6p007lp" path="res://addons/guide/inputs/guide_input_mouse_button.gd" id="17_kxb2c"]
[ext_resource type="Script" uid="uid://biiggjw6tv4uq" path="res://addons/guide/triggers/guide_trigger_released.gd" id="17_s8kjn"]
[ext_resource type="Resource" uid="uid://7wm8ywvujwf" path="res://systems/inputs/base_mode/aim_cancel.tres" id="18_vibkn"]
[ext_resource type="Resource" uid="uid://bbce5wfwxpns1" path="res://systems/inputs/base_mode/empower_release.tres" id="19_li5ak"]
[ext_resource type="Script" uid="uid://rvttn472ix6v" path="res://addons/guide/inputs/guide_input_joy_button.gd" id="19_qkgmj"]
[ext_resource type="Resource" uid="uid://bdit2jy5gbpts" path="res://systems/inputs/base_mode/jump.tres" id="21_818lq"]
[ext_resource type="Resource" uid="uid://b5gx3q8nvu72e" path="res://systems/inputs/base_mode/hit.tres" id="22_2hs2y"]
[ext_resource type="Resource" uid="uid://d2r0ur8k3cuu3" path="res://systems/inputs/base_mode/dash.tres" id="23_g6bbx"]
[ext_resource type="Script" uid="uid://dsa1dnifd6w32" path="res://addons/guide/guide_mapping_context.gd" id="23_llfhp"]
[ext_resource type="Resource" uid="uid://bw5k2gsv3jqcv" path="res://systems/inputs/base_mode/throw.tres" id="24_yp12v"]
[ext_resource type="Resource" uid="uid://bbce5wfwxpns1" path="res://systems/inputs/base_mode/slide_pressed.tres" id="23_rvpjj"]
[ext_resource type="Resource" uid="uid://b334rau1yxmm7" path="res://systems/inputs/base_mode/slide_released.tres" id="25_rvpjj"]
[ext_resource type="Resource" uid="uid://55b0dsvioj08" path="res://systems/inputs/base_mode/jump_pressed.tres" id="25_si4d4"]
[ext_resource type="Resource" uid="uid://dgluj0ql5vth7" path="res://systems/inputs/base_mode/pause.tres" id="29_q86qg"]
[ext_resource type="Script" uid="uid://cw71o87tvdx3q" path="res://addons/guide/inputs/guide_input_key.gd" id="30_cvxqo"]
[ext_resource type="Resource" uid="uid://spo3pbqjx0eb" path="res://systems/inputs/base_mode/parry.tres" id="30_rvpjj"]
[ext_resource type="Resource" uid="uid://dxy0071ic1wdj" path="res://systems/inputs/base_mode/slam.tres" id="32_s8kjn"]
[ext_resource type="Resource" uid="uid://s1l0n1iitc6m" path="res://systems/inputs/base_mode/move_back.tres" id="33_fykw6"]
[ext_resource type="Resource" uid="uid://brswsknpgwal2" path="res://systems/inputs/base_mode/move_front.tres" id="34_rvpjj"]
[ext_resource type="Resource" uid="uid://f3vs6l4m623s" path="res://systems/inputs/base_mode/move_left.tres" id="35_s8kjn"]
@@ -229,57 +229,65 @@ action = ExtResource("16_rvpjj")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_bkx7d"), SubResource("Resource_yxj6r")])
metadata/_guide_input_mappings_collapsed = false
[sub_resource type="Resource" id="Resource_fykw6"]
script = ExtResource("10_cvxqo")
axis = 5
[sub_resource type="Resource" id="Resource_rvpjj"]
script = ExtResource("15_fykw6")
[sub_resource type="Resource" id="Resource_s8kjn"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_fykw6")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_rvpjj")])
metadata/_guide_triggers_collapsed = false
[sub_resource type="Resource" id="Resource_vibkn"]
script = ExtResource("1_qmhk6")
action = ExtResource("16_0qat1")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_s8kjn")])
[sub_resource type="Resource" id="Resource_qkgmj"]
script = ExtResource("10_cvxqo")
axis = 5
[sub_resource type="Resource" id="Resource_st2ej"]
script = ExtResource("15_g6bbx")
[sub_resource type="Resource" id="Resource_s8kjn"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_qkgmj")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_st2ej")])
metadata/_guide_triggers_collapsed = false
[sub_resource type="Resource" id="Resource_wcvib"]
script = ExtResource("30_cvxqo")
key = 4194326
[sub_resource type="Resource" id="Resource_8ifoc"]
script = ExtResource("15_g6bbx")
[sub_resource type="Resource" id="Resource_imjft"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_wcvib")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_8ifoc")])
metadata/_guide_triggers_collapsed = false
[sub_resource type="Resource" id="Resource_vibkn"]
script = ExtResource("1_qmhk6")
action = ExtResource("23_rvpjj")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_s8kjn"), SubResource("Resource_imjft")])
[sub_resource type="Resource" id="Resource_f3pn5"]
script = ExtResource("10_cvxqo")
axis = 5
[sub_resource type="Resource" id="Resource_rvpjj"]
script = ExtResource("17_s8kjn")
[sub_resource type="Resource" id="Resource_818lq"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_qkgmj")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_st2ej")])
input = SubResource("Resource_f3pn5")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_rvpjj")])
[sub_resource type="Resource" id="Resource_qksfw"]
script = ExtResource("30_cvxqo")
key = 4194326
[sub_resource type="Resource" id="Resource_bhf7o"]
script = ExtResource("17_s8kjn")
[sub_resource type="Resource" id="Resource_woy8j"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_qksfw")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_bhf7o")])
[sub_resource type="Resource" id="Resource_2hs2y"]
script = ExtResource("1_qmhk6")
action = ExtResource("19_li5ak")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_818lq")])
[sub_resource type="Resource" id="Resource_lfx76"]
script = ExtResource("19_qkgmj")
button = 2
[sub_resource type="Resource" id="Resource_oruo7"]
script = ExtResource("15_fykw6")
[sub_resource type="Resource" id="Resource_4ee3d"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_lfx76")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_oruo7")])
[sub_resource type="Resource" id="Resource_0s4kt"]
script = ExtResource("1_qmhk6")
action = ExtResource("18_vibkn")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_4ee3d")])
action = ExtResource("25_rvpjj")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_818lq"), SubResource("Resource_woy8j")])
[sub_resource type="Resource" id="Resource_1fkas"]
script = ExtResource("19_qkgmj")
@@ -359,6 +367,35 @@ script = ExtResource("1_qmhk6")
action = ExtResource("22_2hs2y")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_500v3"), SubResource("Resource_a8sqk")])
[sub_resource type="Resource" id="Resource_kx31q"]
script = ExtResource("19_qkgmj")
button = 9
[sub_resource type="Resource" id="Resource_oux88"]
script = ExtResource("15_fykw6")
[sub_resource type="Resource" id="Resource_b7w5s"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_kx31q")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_oux88")])
[sub_resource type="Resource" id="Resource_jk2g8"]
script = ExtResource("30_cvxqo")
key = 70
[sub_resource type="Resource" id="Resource_y7p41"]
script = ExtResource("15_fykw6")
[sub_resource type="Resource" id="Resource_3uxou"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_jk2g8")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_y7p41")])
[sub_resource type="Resource" id="Resource_3frwi"]
script = ExtResource("1_qmhk6")
action = ExtResource("30_rvpjj")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_b7w5s"), SubResource("Resource_3uxou")])
[sub_resource type="Resource" id="Resource_g6bbx"]
script = ExtResource("19_qkgmj")
button = 1
@@ -383,52 +420,40 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_xbeov")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_rt8uw")])
[sub_resource type="Resource" id="Resource_jk2g8"]
script = ExtResource("30_cvxqo")
key = 70
[sub_resource type="Resource" id="Resource_wcvib"]
script = ExtResource("15_fykw6")
[sub_resource type="Resource" id="Resource_imjft"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_jk2g8")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_wcvib")])
[sub_resource type="Resource" id="Resource_kx31q"]
script = ExtResource("30_cvxqo")
key = 4194326
[sub_resource type="Resource" id="Resource_oux88"]
script = ExtResource("15_fykw6")
[sub_resource type="Resource" id="Resource_b7w5s"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_kx31q")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_oux88")])
[sub_resource type="Resource" id="Resource_0qat1"]
script = ExtResource("1_qmhk6")
action = ExtResource("23_g6bbx")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_1rw8g"), SubResource("Resource_hj46p"), SubResource("Resource_imjft"), SubResource("Resource_b7w5s")])
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_1rw8g"), SubResource("Resource_hj46p")])
metadata/_guide_input_mappings_collapsed = false
[sub_resource type="Resource" id="Resource_j3axn"]
[sub_resource type="Resource" id="Resource_o5yys"]
script = ExtResource("19_qkgmj")
button = 3
button = 2
[sub_resource type="Resource" id="Resource_kxb2c"]
script = ExtResource("15_fykw6")
[sub_resource type="Resource" id="Resource_06f1o"]
script = ExtResource("15_g6bbx")
[sub_resource type="Resource" id="Resource_v2ywt"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_j3axn")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_kxb2c")])
input = SubResource("Resource_o5yys")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_06f1o")])
[sub_resource type="Resource" id="Resource_qpgnj"]
script = ExtResource("30_cvxqo")
key = 69
[sub_resource type="Resource" id="Resource_g5tel"]
script = ExtResource("15_g6bbx")
[sub_resource type="Resource" id="Resource_s6d3g"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_qpgnj")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_g5tel")])
[sub_resource type="Resource" id="Resource_vtk18"]
script = ExtResource("1_qmhk6")
action = ExtResource("24_yp12v")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_v2ywt")])
action = ExtResource("32_s8kjn")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_v2ywt"), SubResource("Resource_s6d3g")])
[sub_resource type="Resource" id="Resource_s4bc4"]
script = ExtResource("30_cvxqo")
@@ -526,5 +551,5 @@ input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_7io5e")])
[resource]
script = ExtResource("23_llfhp")
mappings = Array[ExtResource("1_qmhk6")]([SubResource("Resource_88x08"), SubResource("Resource_tgr2g"), SubResource("Resource_iarn8"), SubResource("Resource_cvxqo"), SubResource("Resource_tb8ii"), SubResource("Resource_iihs4"), SubResource("Resource_vibkn"), SubResource("Resource_2hs2y"), SubResource("Resource_0s4kt"), SubResource("Resource_d2r0d"), SubResource("Resource_xt1x5"), SubResource("Resource_ew1hw"), SubResource("Resource_0qat1"), SubResource("Resource_vtk18"), SubResource("Resource_weyro"), SubResource("Resource_fjku4"), SubResource("Resource_odnhd"), SubResource("Resource_0eff7"), SubResource("Resource_gt77e")])
mappings = Array[ExtResource("1_qmhk6")]([SubResource("Resource_88x08"), SubResource("Resource_tgr2g"), SubResource("Resource_iarn8"), SubResource("Resource_cvxqo"), SubResource("Resource_tb8ii"), SubResource("Resource_iihs4"), SubResource("Resource_vibkn"), SubResource("Resource_2hs2y"), SubResource("Resource_d2r0d"), SubResource("Resource_xt1x5"), SubResource("Resource_ew1hw"), SubResource("Resource_3frwi"), SubResource("Resource_0qat1"), SubResource("Resource_vtk18"), SubResource("Resource_weyro"), SubResource("Resource_fjku4"), SubResource("Resource_odnhd"), SubResource("Resource_0eff7"), SubResource("Resource_gt77e")])
metadata/_custom_type_script = "uid://dsa1dnifd6w32"

View File

@@ -0,0 +1,7 @@
[gd_resource type="Resource" script_class="GUIDEAction" load_steps=2 format=3 uid="uid://spo3pbqjx0eb"]
[ext_resource type="Script" uid="uid://cluhc11vixkf1" path="res://addons/guide/guide_action.gd" id="1_hlutc"]
[resource]
script = ExtResource("1_hlutc")
metadata/_custom_type_script = "uid://cluhc11vixkf1"

View File

@@ -0,0 +1,7 @@
[gd_resource type="Resource" script_class="GUIDEAction" load_steps=2 format=3 uid="uid://dxy0071ic1wdj"]
[ext_resource type="Script" uid="uid://cluhc11vixkf1" path="res://addons/guide/guide_action.gd" id="1_6evmc"]
[resource]
script = ExtResource("1_6evmc")
metadata/_custom_type_script = "uid://cluhc11vixkf1"

View File

@@ -1,14 +0,0 @@
[gd_resource type="Resource" script_class="GUIDEAction" load_steps=2 format=3 uid="uid://bw5k2gsv3jqcv"]
[ext_resource type="Script" uid="uid://cluhc11vixkf1" path="res://addons/guide/guide_action.gd" id="1_7f0q6"]
[resource]
script = ExtResource("1_7f0q6")
name = &""
action_value_type = 0
block_lower_priority_actions = true
emit_as_godot_actions = false
is_remappable = false
display_name = ""
display_category = ""
metadata/_custom_type_script = "uid://cluhc11vixkf1"

View File

@@ -10,7 +10,7 @@ class_name InputController
@export var move_right:GUIDEAction
@export var move_front:GUIDEAction
@export var move_back:GUIDEAction
@export var rotate_y:GUIDEAction
@export var rotate_vertical:GUIDEAction
@export var rotate_floorplane:GUIDEAction
@export_group("Trigger actions")
@@ -21,13 +21,14 @@ class_name InputController
@export_subgroup("Jump")
@export var jump:GUIDEAction
@export var jump_pressed:GUIDEAction
@export_subgroup("Slide")
@export var slide_pressed:GUIDEAction
@export var slide_released:GUIDEAction
@export_subgroup("Other")
@export var empower_down:GUIDEAction
@export var empower_released:GUIDEAction
@export var aim_canceled:GUIDEAction
@export var hit:GUIDEAction
@export var parry:GUIDEAction
@export var dash:GUIDEAction
@export var throw:GUIDEAction
@export var slam:GUIDEAction
signal input_device_changed(is_gamepad: bool)
var _using_gamepad = false
@@ -46,13 +47,13 @@ signal input_aim_pressed
signal input_aim_down
signal input_aim_released
signal input_empower_down
signal input_empower_released
signal input_aim_canceled
signal input_slide_started
signal input_slide_ended
signal input_hit
signal input_parry
signal input_dash
signal input_throw
signal input_slam
func _ready() -> void:
GUIDE.enable_mapping_context(base_mode)
@@ -60,53 +61,47 @@ func _ready() -> void:
aim_down.triggered.connect(on_input_aim_down)
aim_pressed.triggered.connect(on_input_aim_pressed)
aim_released.triggered.connect(on_input_aim_released)
empower_down.triggered.connect(on_input_empower_down)
empower_released.triggered.connect(on_input_empower_released)
aim_canceled.triggered.connect(on_input_aim_canceled)
jump_pressed.triggered.connect(on_input_jump_started)
jump.triggered.connect(on_input_jump_ongoing)
jump.completed.connect(on_input_jump_ended)
hit.triggered.connect(on_input_hit)
dash.triggered.connect(on_input_dash)
throw.triggered.connect(on_input_throw)
func on_input_dash():
input_dash.emit()
slide_pressed.triggered.connect(on_input_slide_started)
slide_released.triggered.connect(on_input_slide_ended)
func on_input_throw():
input_throw.emit()
hit.triggered.connect(on_input_hit)
parry.triggered.connect(on_input_parry)
dash.triggered.connect(on_input_dash)
slam.triggered.connect(on_input_slam)
func on_input_hit():
input_hit.emit()
func on_input_parry():
input_parry.emit()
func on_input_dash():
input_dash.emit()
func on_input_slam():
input_slam.emit()
func on_input_jump_started():
input_jump_started.emit()
func on_input_jump_ongoing():
input_jump_ongoing.emit()
func on_input_jump_ended():
input_jump_ended.emit()
func on_input_aim_down():
input_aim_down.emit()
func on_input_aim_pressed():
input_aim_pressed.emit()
func on_input_aim_released():
input_aim_released.emit()
func on_input_empower_down():
input_empower_down.emit()
func on_input_empower_released():
input_empower_released.emit()
func on_input_aim_canceled():
input_aim_canceled.emit()
func on_input_slide_started():
input_slide_started.emit()
func on_input_slide_ended():
input_slide_ended.emit()
func _input(event: InputEvent) -> void:
if event is InputEventKey:
@@ -130,5 +125,5 @@ func _process(_delta: float) -> void:
input_move_keyboard.emit(keyboard_input_vector)
input_move.emit(move.value_axis_3d)
input_rotate_y.emit(rotate_y.value_axis_1d)
input_rotate_y.emit(rotate_vertical.value_axis_1d)
input_rotate_floorplane.emit(rotate_floorplane.value_axis_1d)

View File

@@ -21,6 +21,8 @@ public partial class MantleSystem: Node3D
public Vector3 FirstMantleProfilePoint { get; private set; } = Vector3.Zero;
public bool IsMantlePossible { get; private set; } = false;
public bool EndedOnOtherSideOfWall { get; private set; } = false;
public bool FoundGround { get; private set; } = false;
public const int WallProfileCastCount = 7;
private ShapeCast3D[] _wallProfileShapecasts = new ShapeCast3D[WallProfileCastCount];
@@ -55,6 +57,8 @@ public partial class MantleSystem: Node3D
// Reset state
IsMantlePossible = false;
EndedOnOtherSideOfWall = false;
FoundGround = false;
if (!isColliding) return;
// Check if face something wall-like that should be climbable
@@ -62,6 +66,7 @@ public partial class MantleSystem: Node3D
if (collisionNormal.Y > 0.7f) return;
var spaceState = GetWorld3D().DirectSpaceState;
MantleCurve = new Curve3D();
MantleCurve.AddPoint(Vector3.Zero);
var hasFirstProfileHit = false;
@@ -76,7 +81,6 @@ public partial class MantleSystem: Node3D
// Got to the other side of the wall, we stop there
if (!wallProfileShapecast.IsColliding())
{
// MantleCurve.AddPoint(ToLocal(globalTargetPosition));
break;
}

View File

@@ -28,7 +28,7 @@ visible = false
shape = SubResource("CapsuleShape3D_4coqe")
target_position = Vector3(0, 0, 0)
max_results = 1
collision_mask = 2
collision_mask = 256
debug_shape_custom_color = Color(1, 0, 0, 1)
[node name="WallInFrontCast3D" type="ShapeCast3D" parent="."]
@@ -37,20 +37,20 @@ visible = false
shape = SubResource("SphereShape3D_2oobp")
target_position = Vector3(0, 0, -1.5)
max_results = 1
collision_mask = 2
collision_mask = 256
debug_shape_custom_color = Color(0.911631, 0.11884, 0.656218, 1)
[node name="InAirWallDetect" type="ShapeCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.01, 0)
shape = SubResource("CapsuleShape3D_2oobp")
target_position = Vector3(0, 0, -2)
collision_mask = 2
collision_mask = 256
[node name="GroundedWallDetect" type="ShapeCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.26, 0)
shape = SubResource("CapsuleShape3D_i32qj")
target_position = Vector3(0, 0, -2)
collision_mask = 2
collision_mask = 256
[node name="WallProfileShapeCasts" type="Node3D" parent="."]
@@ -59,46 +59,46 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, -0.5)
enabled = false
shape = SubResource("SphereShape3D_i32qj")
target_position = Vector3(0, -2.125, 0)
collision_mask = 2
collision_mask = 256
[node name="ShapeCast2" type="ShapeCast3D" parent="WallProfileShapeCasts"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, -0.75)
enabled = false
shape = SubResource("SphereShape3D_i32qj")
target_position = Vector3(0, -2.125, 0)
collision_mask = 2
collision_mask = 256
[node name="ShapeCast3" type="ShapeCast3D" parent="WallProfileShapeCasts"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, -1)
enabled = false
shape = SubResource("SphereShape3D_i32qj")
target_position = Vector3(0, -2.125, 0)
collision_mask = 2
collision_mask = 256
[node name="ShapeCast4" type="ShapeCast3D" parent="WallProfileShapeCasts"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, -1.25)
enabled = false
shape = SubResource("SphereShape3D_i32qj")
target_position = Vector3(0, -2.125, 0)
collision_mask = 2
collision_mask = 256
[node name="ShapeCast5" type="ShapeCast3D" parent="WallProfileShapeCasts"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, -1.5)
enabled = false
shape = SubResource("SphereShape3D_i32qj")
target_position = Vector3(0, -2.125, 0)
collision_mask = 2
collision_mask = 256
[node name="ShapeCast6" type="ShapeCast3D" parent="WallProfileShapeCasts"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, -1.75)
enabled = false
shape = SubResource("SphereShape3D_i32qj")
target_position = Vector3(0, -2.125, 0)
collision_mask = 2
collision_mask = 256
[node name="ShapeCast7" type="ShapeCast3D" parent="WallProfileShapeCasts"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, -2)
enabled = false
shape = SubResource("SphereShape3D_i32qj")
target_position = Vector3(0, -2.125, 0)
collision_mask = 2
collision_mask = 256

View File

@@ -1,221 +0,0 @@
using Godot;
using Movementtests.player_controller.Scripts;
using RustyOptions;
namespace Movementtests.systems;
public partial class MoveSystem : Node3D
{
public enum JumpTypes
{
SimpleJump,
DoubleJump,
JumpFromDash,
JumpFromWall
}
public record MoveSystemParameters(
CharacterBody3D Parent,
Gravity Gravity,
MantleSystem MantleSystem,
TweenQueueSystem TweenQueueSystem,
HeadSystem HeadSystem,
CapsuleCollider CapsuleCollider);
public record MoveAroundParameters(
double Delta,
Vector3 MovementDirection,
bool IsOnFloor,
bool IsDead,
bool IsHeadTouchingCeiling,
bool isHanging,
bool isWallHugging
);
[Export(PropertyHint.Range, "0,20,0.1,or_greater")]
public float WalkSpeed { get; set; } = 5.0f;
[Export(PropertyHint.Range, "0,20,0.1,or_greater")]
public float SprintSpeed { get; set; } = 7.2f;
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float CrouchSpeed { get; set; } = 2.5f;
[Export(PropertyHint.Range, "0,100,0.1,or_greater")]
public float _currentSpeed;
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float AccelerationSpeedFactorFloor = 5.0f;
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float DecelerationSpeedFactorFloor = 5.0f;
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float DecelerationSpeedFactorAir = 1.0f;
[Export(PropertyHint.Range, "0,1,0.01,or_greater")]
public float ApexHoldTime = 0.0f;
private float _timeLeftAtApex = 0.0f;
private bool _wasGoingUpLastFrame = false;
public float CrouchTransitionSpeed { get; set; } = 20.0f;
[Export(PropertyHint.Range, "0,5,0.1,or_greater")]
public float WallHugGravityReducingFactor { get; set; } = 0.1f;
private Gravity _gravity;
private CharacterBody3D _parent;
private MantleSystem _mantleSystem;
private TweenQueueSystem _tweenQueueSystem;
private CapsuleCollider _capsuleCollider;
private HeadSystem _headSystem;
public void Init(MoveSystemParameters parameters)
{
_parent = parameters.Parent;
_gravity = parameters.Gravity;
_mantleSystem = parameters.MantleSystem;
_tweenQueueSystem = parameters.TweenQueueSystem;
_capsuleCollider = parameters.CapsuleCollider;
_headSystem = parameters.HeadSystem;
_currentSpeed = WalkSpeed;
}
private bool IsGoingUp()
{
return _parent.Velocity.Y > 0;
}
public void MoveAround(MoveAroundParameters param)
{
var (delta, movementDirection, isOnFloor, isDead, isHeadTouchingCeiling, isHanging, isWallHugging) = param;
var doesCapsuleHaveCrouchingHeight = _capsuleCollider.IsCrouchingHeight();
var doesCapsuleHaveDefaultHeight = _capsuleCollider.IsDefaultHeight();
if (IsGoingUp() || isOnFloor)
{
_wasGoingUpLastFrame = true;
_timeLeftAtApex = ApexHoldTime;
}
if (isHanging)
{
_parent.Velocity = Vector3.Zero;
_parent.MoveAndSlide();
return;
}
if (isWallHugging)
{
_parent.Velocity = new Vector3(
x: _parent.Velocity.X,
y: _parent.Velocity.Y - _gravity.CalculateGravityForce() * (float)delta * WallHugGravityReducingFactor,
z: _parent.Velocity.Z);
return;
}
// Adding the gravity
if (!isOnFloor)
{
if (!IsGoingUp() && _wasGoingUpLastFrame && _timeLeftAtApex > 0)
{
_parent.Velocity = new Vector3(
x: _parent.Velocity.X,
y: 0,
z: _parent.Velocity.Z);
_timeLeftAtApex -= (float) delta;
}
else
{
_parent.Velocity = new Vector3(
x: _parent.Velocity.X,
y: _parent.Velocity.Y - (_gravity.CalculateGravityForce() * (float)delta),
z: _parent.Velocity.Z);
}
}
// The code below is required to quickly adjust player's position on Y-axis when there's a ceiling on the
// trajectory of player's jump and player is standing
if (isHeadTouchingCeiling && doesCapsuleHaveDefaultHeight)
{
_parent.Velocity = new Vector3(
x: _parent.Velocity.X,
y: _parent.Velocity.Y - 2.0f,
z: _parent.Velocity.Z);
}
if (!isDead)
{
// Used both for detecting the moment when we enter into crouching mode and the moment when we're already
// in the crouching mode
if (Input.IsActionPressed("crouch") ||
(doesCapsuleHaveCrouchingHeight && isHeadTouchingCeiling))
{
_capsuleCollider.Crouch((float)delta, CrouchTransitionSpeed);
_currentSpeed = CrouchSpeed;
}
// Used both for the moment when we exit the crouching mode and for the moment when we just walk
else
{
_capsuleCollider.UndoCrouching((float)delta, CrouchTransitionSpeed);
_currentSpeed = WalkSpeed;
}
}
// Each component of the boolean statement for sprinting is required
if (Input.IsActionPressed("sprint") && !isHeadTouchingCeiling &&
!doesCapsuleHaveCrouchingHeight && !isDead)
{
_currentSpeed = SprintSpeed;
}
// Basis is a 3x4 matrix. It contains information about scaling and rotation of head.
// By multiplying our Vector3 by this matrix we're doing multiple things:
// a) We start to operate in global space;
// b) We're applying to Vector3 the current rotation of "head" object;
// c) We're applying to Vector3 the current scaling of "head" object;
Vector3 direction = _headSystem.Transform.Basis * movementDirection;
if (isDead)
{
direction = Vector3.Zero;
}
var accelerationFloorFactor = direction.Length() > 0 ? AccelerationSpeedFactorFloor : DecelerationSpeedFactorFloor;
var accelerationFactor = isOnFloor ? accelerationFloorFactor : DecelerationSpeedFactorAir;
float xAcceleration = Mathf.Lerp(_parent.Velocity.X, direction.X * _currentSpeed,
(float)delta * accelerationFactor);
float zAcceleration = Mathf.Lerp(_parent.Velocity.Z, direction.Z * _currentSpeed,
(float)delta * accelerationFactor);
_parent.Velocity = new Vector3(xAcceleration, _parent.Velocity.Y, zAcceleration);
if (isDead)
{
_parent.MoveAndSlide();
}
}
public void Jump(JumpTypes jumpType, Vector3? jumpDirection = null, float boost = 1.0f)
{
var effectiveJumpDirection = jumpDirection ?? Vector3.Up;
var jumpForce = 0.0f;
switch (jumpType)
{
case JumpTypes.DoubleJump:
jumpForce = _gravity.CalculateDoubleJumpForce();
break;
case JumpTypes.SimpleJump:
jumpForce = _gravity.CalculateJumpForce();
break;
case JumpTypes.JumpFromDash:
jumpForce = _gravity.CalculateJumpFromDashForce();
break;
case JumpTypes.JumpFromWall:
jumpForce = _gravity.CalculateJumpFromWallForce();
break;
default:
jumpForce = _gravity.CalculateJumpForce();
break;
}
var currentHorizontalVelocity = new Vector3(_parent.Velocity.X, 0, _parent.Velocity.Z);
var jumpVelocity = jumpForce * effectiveJumpDirection * boost;
_parent.Velocity = currentHorizontalVelocity + jumpVelocity;
}
}

View File

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

View File

@@ -1,5 +0,0 @@
[gd_resource type="Curve" format=3 uid="uid://buxwd3wd0nln5"]
[resource]
_data = [Vector2(0, 0), 0.0, 3.01651, 0, 0, Vector2(0.996169, 1), 0.0, 0.0, 0, 0]
point_count = 2

View File

@@ -40,7 +40,7 @@ public partial class WallHugSystem : Node3D
{
foreach (RayCast3D raycast in _raycasts)
{
if (raycast.IsColliding())
if (raycast.IsColliding() && Math.Abs(raycast.GetCollisionNormal().Y) < 0.3f)
{
WallHugLocation = raycast.GetCollisionPoint().Some();
WallHugNormal = raycast.GetCollisionNormal().Some();

View File

@@ -37,8 +37,8 @@ stencil_outline_thickness = 0.1
material = SubResource("StandardMaterial3D_m0v1h")
[node name="Weapon" type="RigidBody3D"]
collision_layer = 4
collision_mask = 2
collision_layer = 65536
collision_mask = 256
continuous_cd = true
contact_monitor = true
max_contacts_reported = 1