this is so easy to develop there must be a catch
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=23 format=3 uid="uid://q7uc1h2jpbd2"]
|
[gd_scene load_steps=21 format=3 uid="uid://q7uc1h2jpbd2"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://player_controller/PlayerController.tscn" id="1_62kkh"]
|
[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="Material" uid="uid://31aulub2nqov" path="res://assets/greybox/m_greybox.tres" id="2_3uydm"]
|
||||||
@@ -6,7 +6,6 @@
|
|||||||
[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/grounded_enemy/grounded_enemy.tscn" id="3_3uydm"]
|
[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/grounded_enemy/grounded_enemy.tscn" id="3_3uydm"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cmlud1hwkd6sv" path="res://scenes/enemies/flying_enemy/flying_enemy.tscn" id="5_8fd2t"]
|
[ext_resource type="PackedScene" uid="uid://cmlud1hwkd6sv" path="res://scenes/enemies/flying_enemy/flying_enemy.tscn" id="5_8fd2t"]
|
||||||
[ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://components/movement/RMovement.cs" id="5_ybosk"]
|
[ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://components/movement/RMovement.cs" id="5_ybosk"]
|
||||||
[ext_resource type="Script" uid="uid://b44cse62qru7j" path="res://components/knockback/RKnockback.cs" id="6_1hrkh"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://c305mfrtumcyq" path="res://scenes/spawners/spawner.tscn" id="6_7m3bq"]
|
[ext_resource type="PackedScene" uid="uid://c305mfrtumcyq" path="res://scenes/spawners/spawner.tscn" id="6_7m3bq"]
|
||||||
[ext_resource type="Resource" uid="uid://bqq6uukbdfysr" path="res://scenes/enemies/grounded_enemy/grounded_enemy_movement.tres" id="7_caohq"]
|
[ext_resource type="Resource" uid="uid://bqq6uukbdfysr" path="res://scenes/enemies/grounded_enemy/grounded_enemy_movement.tres" id="7_caohq"]
|
||||||
[ext_resource type="Script" uid="uid://baiapod3csndf" path="res://components/health/RHealth.cs" id="9_2e4ci"]
|
[ext_resource type="Script" uid="uid://baiapod3csndf" path="res://components/health/RHealth.cs" id="9_2e4ci"]
|
||||||
@@ -43,10 +42,6 @@ ssil_radius = 8.4
|
|||||||
sdfgi_use_occlusion = true
|
sdfgi_use_occlusion = true
|
||||||
glow_enabled = true
|
glow_enabled = true
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_q21h6"]
|
|
||||||
script = ExtResource("6_1hrkh")
|
|
||||||
metadata/_custom_type_script = "uid://b44cse62qru7j"
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_5fa36"]
|
[sub_resource type="Resource" id="Resource_5fa36"]
|
||||||
script = ExtResource("5_ybosk")
|
script = ExtResource("5_ybosk")
|
||||||
GravityModifier = 5.0
|
GravityModifier = 5.0
|
||||||
@@ -142,7 +137,6 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 3.5, 2.5)
|
|||||||
[node name="Enemy" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("3_3uydm")]
|
[node name="Enemy" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("3_3uydm")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.5, 2.5, -8.336809)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.5, 2.5, -8.336809)
|
||||||
Target = NodePath("../Player")
|
Target = NodePath("../Player")
|
||||||
RKnockback = SubResource("Resource_q21h6")
|
|
||||||
RMovement = SubResource("Resource_5fa36")
|
RMovement = SubResource("Resource_5fa36")
|
||||||
|
|
||||||
[node name="Enemy2" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("3_3uydm")]
|
[node name="Enemy2" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("3_3uydm")]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=65 format=3 uid="uid://bei4nhkf8lwdo"]
|
[gd_scene load_steps=66 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="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="PackedScene" uid="uid://cf3rrgr1imvv4" path="res://scenes/path/path.tscn" id="2_6lejt"]
|
||||||
@@ -99,6 +99,9 @@ height = 3.5
|
|||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_nob5r"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_nob5r"]
|
||||||
radius = 0.4
|
radius = 0.4
|
||||||
|
|
||||||
|
[sub_resource type="SphereShape3D" id="SphereShape3D_ue7xq"]
|
||||||
|
radius = 1.5
|
||||||
|
|
||||||
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_2q0ik"]
|
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_2q0ik"]
|
||||||
blend_mode = 1
|
blend_mode = 1
|
||||||
|
|
||||||
@@ -355,6 +358,16 @@ collision_mask = 256
|
|||||||
target_position = Vector3(0, -2, 0)
|
target_position = Vector3(0, -2, 0)
|
||||||
collision_mask = 256
|
collision_mask = 256
|
||||||
|
|
||||||
|
[node name="SlidingEnemyDetector" type="Area3D" parent="."]
|
||||||
|
collision_layer = 0
|
||||||
|
collision_mask = 16
|
||||||
|
monitoring = false
|
||||||
|
monitorable = false
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="SlidingEnemyDetector"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||||
|
shape = SubResource("SphereShape3D_ue7xq")
|
||||||
|
|
||||||
[node name="InvincibilityTime" type="Timer" parent="."]
|
[node name="InvincibilityTime" type="Timer" parent="."]
|
||||||
one_shot = true
|
one_shot = true
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,9 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
public RayCast3D DirectGroundDetector;
|
public RayCast3D DirectGroundDetector;
|
||||||
public Area3D WeaponHitbox;
|
public Area3D WeaponHitbox;
|
||||||
public AudioStreamPlayer3D SfxPlayer;
|
public AudioStreamPlayer3D SfxPlayer;
|
||||||
|
|
||||||
public ShapeCast3D DashDamageDetector;
|
public ShapeCast3D DashDamageDetector;
|
||||||
|
public Area3D SlidingEnemyDetector;
|
||||||
|
|
||||||
// Inspector stuff
|
// Inspector stuff
|
||||||
[Export] public Marker3D TutorialWeaponTarget;
|
[Export] public Marker3D TutorialWeaponTarget;
|
||||||
@@ -393,6 +395,7 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
CeilingDetector = GetNode<ShapeCast3D>("CeilingDetector");
|
CeilingDetector = GetNode<ShapeCast3D>("CeilingDetector");
|
||||||
DirectGroundDetector = GetNode<RayCast3D>("DirectGroundDetector");
|
DirectGroundDetector = GetNode<RayCast3D>("DirectGroundDetector");
|
||||||
DashDamageDetector = GetNode<ShapeCast3D>("DashDamage");
|
DashDamageDetector = GetNode<ShapeCast3D>("DashDamage");
|
||||||
|
SlidingEnemyDetector = GetNode<Area3D>("SlidingEnemyDetector");
|
||||||
RayCast3D stairsBelowRayCast3D = GetNode<RayCast3D>("StairsBelowRayCast3D");
|
RayCast3D stairsBelowRayCast3D = GetNode<RayCast3D>("StairsBelowRayCast3D");
|
||||||
RayCast3D stairsAheadRayCast3D = GetNode<RayCast3D>("StairsAheadRayCast3D");
|
RayCast3D stairsAheadRayCast3D = GetNode<RayCast3D>("StairsAheadRayCast3D");
|
||||||
_headCollisionDetectors = new RayCast3D[NUM_OF_HEAD_COLLISION_DETECTORS];
|
_headCollisionDetectors = new RayCast3D[NUM_OF_HEAD_COLLISION_DETECTORS];
|
||||||
@@ -547,6 +550,7 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
|
|
||||||
_weaponDash.StateExited += OnWeaponDashFinished;
|
_weaponDash.StateExited += OnWeaponDashFinished;
|
||||||
|
|
||||||
|
SlidingEnemyDetector.BodyEntered += EnemyHitWhileSliding;
|
||||||
_sliding.StateEntered += SlideStarted;
|
_sliding.StateEntered += SlideStarted;
|
||||||
_sliding.StateExited += SlideEnded;
|
_sliding.StateExited += SlideEnded;
|
||||||
_slideCanceled.StateEntered += OnSlideCanceled;
|
_slideCanceled.StateEntered += OnSlideCanceled;
|
||||||
@@ -1413,8 +1417,11 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
public void SlideStarted()
|
public void SlideStarted()
|
||||||
{
|
{
|
||||||
_targetSpeed = Velocity.Length();
|
_targetSpeed = Velocity.Length();
|
||||||
SetupSlideCollision();
|
|
||||||
_audioStream!.SwitchToClipByName("glide");
|
_audioStream!.SwitchToClipByName("glide");
|
||||||
|
SetupSlideCollision();
|
||||||
|
|
||||||
|
SlidingEnemyDetector.Monitoring = true;
|
||||||
|
_isInvincible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanStandUpFromSlide()
|
public bool CanStandUpFromSlide()
|
||||||
@@ -1540,11 +1547,22 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
}
|
}
|
||||||
public void SlideEnded()
|
public void SlideEnded()
|
||||||
{
|
{
|
||||||
_audioStream!.SwitchToClipByName("footsteps");
|
SlidingEnemyDetector.Monitoring = false;
|
||||||
|
_isInvincible = false;
|
||||||
|
|
||||||
SetupStandingCollision();
|
SetupStandingCollision();
|
||||||
|
_audioStream!.SwitchToClipByName("footsteps");
|
||||||
_targetSpeed = WalkSpeed;
|
_targetSpeed = WalkSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void EnemyHitWhileSliding(Node enemy)
|
||||||
|
{
|
||||||
|
if(enemy is not IDamageable damageable)
|
||||||
|
return;
|
||||||
|
_hitEnemies.Add(damageable);
|
||||||
|
TriggerDamage();
|
||||||
|
}
|
||||||
|
|
||||||
public void JumpFromGroundSlide()
|
public void JumpFromGroundSlide()
|
||||||
{
|
{
|
||||||
_jumpStrengthMultiplier = GroundSlideJumpMultiplier + Velocity.Length()*GroundSlideJumpSpeedFactor;
|
_jumpStrengthMultiplier = GroundSlideJumpMultiplier + Velocity.Length()*GroundSlideJumpSpeedFactor;
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
using System;
|
using System;
|
||||||
using Godot;
|
using Godot;
|
||||||
using GodotStateCharts;
|
using GodotStateCharts;
|
||||||
|
using Movementtests.interfaces;
|
||||||
|
using Movementtests.systems.damage;
|
||||||
|
|
||||||
namespace Movementtests.systems;
|
namespace Movementtests.systems;
|
||||||
|
|
||||||
public partial class WeaponSystem : RigidBody3D
|
public partial class WeaponSystem : RigidBody3D, IDamageDealer
|
||||||
{
|
{
|
||||||
[Signal]
|
[Signal]
|
||||||
public delegate void WeaponThrownEventHandler();
|
public delegate void WeaponThrownEventHandler();
|
||||||
@@ -12,6 +14,8 @@ public partial class WeaponSystem : RigidBody3D
|
|||||||
[Signal]
|
[Signal]
|
||||||
public delegate void WeaponRetrievedEventHandler();
|
public delegate void WeaponRetrievedEventHandler();
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public RDamage RDamage { get; set; }
|
||||||
[Export(PropertyHint.Range, "0,100,1,or_greater")]
|
[Export(PropertyHint.Range, "0,100,1,or_greater")]
|
||||||
public float ThrowForce { get; set; } = 1f;
|
public float ThrowForce { get; set; } = 1f;
|
||||||
[Export(PropertyHint.Range, "0,0.2,0.01,or_greater")]
|
[Export(PropertyHint.Range, "0,0.2,0.01,or_greater")]
|
||||||
@@ -107,6 +111,17 @@ public partial class WeaponSystem : RigidBody3D
|
|||||||
tween.Finished += ThrowWeaponOnCurve;
|
tween.Finished += ThrowWeaponOnCurve;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void PlantInEnemy(Node3D enemy)
|
||||||
|
{
|
||||||
|
GetTree().GetRoot().CallDeferred(Node.MethodName.RemoveChild, this);
|
||||||
|
enemy.CallDeferred(Node.MethodName.AddChild, this);
|
||||||
|
|
||||||
|
if (enemy is IDamageable damageable)
|
||||||
|
{
|
||||||
|
damageable.TakeDamage(new DamageRecord(this, RDamage));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void RethrowWeapon()
|
public void RethrowWeapon()
|
||||||
{
|
{
|
||||||
_weaponState.SendEvent("throw");
|
_weaponState.SendEvent("throw");
|
||||||
@@ -130,8 +145,7 @@ public partial class WeaponSystem : RigidBody3D
|
|||||||
// WeaponLocationIndicatorMaterial.StencilColor = new Color(1f, 0.2f, 0.2f);
|
// WeaponLocationIndicatorMaterial.StencilColor = new Color(1f, 0.2f, 0.2f);
|
||||||
if (PlantObject is Node3D node)
|
if (PlantObject is Node3D node)
|
||||||
{
|
{
|
||||||
GetTree().GetRoot().CallDeferred(Node.MethodName.RemoveChild, this);
|
PlantInEnemy(node);
|
||||||
node.CallDeferred(Node.MethodName.AddChild, this);
|
|
||||||
}
|
}
|
||||||
CallDeferred(Node3D.MethodName.SetGlobalPosition, PlantLocation);
|
CallDeferred(Node3D.MethodName.SetGlobalPosition, PlantLocation);
|
||||||
CallDeferred(Node3D.MethodName.LookAt, GlobalTransform.Origin + PlantNormal, Vector3.Up, true);
|
CallDeferred(Node3D.MethodName.LookAt, GlobalTransform.Origin + PlantNormal, Vector3.Up, true);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
[gd_scene load_steps=12 format=3 uid="uid://ckm3d6k08a72u"]
|
[gd_scene load_steps=14 format=3 uid="uid://ckm3d6k08a72u"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://iii3wfto4t5b" path="res://systems/weapon/WeaponSystem.cs" id="1_csqwk"]
|
[ext_resource type="Script" uid="uid://iii3wfto4t5b" path="res://systems/weapon/WeaponSystem.cs" id="1_csqwk"]
|
||||||
|
[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://components/damage/RDamage.cs" id="2_m0v1h"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dbe5f0p6lvqtr" path="res://systems/tween_queue/tween_queue_system.tscn" id="2_x1nha"]
|
[ext_resource type="PackedScene" uid="uid://dbe5f0p6lvqtr" path="res://systems/tween_queue/tween_queue_system.tscn" id="2_x1nha"]
|
||||||
[ext_resource type="Script" uid="uid://couw105c3bde4" path="res://addons/godot_state_charts/state_chart.gd" id="3_5owyf"]
|
[ext_resource type="Script" uid="uid://couw105c3bde4" path="res://addons/godot_state_charts/state_chart.gd" id="3_5owyf"]
|
||||||
[ext_resource type="ArrayMesh" uid="uid://cho5fixitrbds" path="res://assets/swords/resources/sword23.tres" id="3_svc06"]
|
[ext_resource type="ArrayMesh" uid="uid://cho5fixitrbds" path="res://assets/swords/resources/sword23.tres" id="3_svc06"]
|
||||||
@@ -8,6 +9,11 @@
|
|||||||
[ext_resource type="Script" uid="uid://cytafq8i1y8qm" path="res://addons/godot_state_charts/atomic_state.gd" id="5_m0v1h"]
|
[ext_resource type="Script" uid="uid://cytafq8i1y8qm" path="res://addons/godot_state_charts/atomic_state.gd" id="5_m0v1h"]
|
||||||
[ext_resource type="Script" uid="uid://cf1nsco3w0mf6" path="res://addons/godot_state_charts/transition.gd" id="6_jpdh0"]
|
[ext_resource type="Script" uid="uid://cf1nsco3w0mf6" path="res://addons/godot_state_charts/transition.gd" id="6_jpdh0"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_jpdh0"]
|
||||||
|
script = ExtResource("2_m0v1h")
|
||||||
|
DamageDealt = 2.0
|
||||||
|
metadata/_custom_type_script = "uid://jitubgv6judn"
|
||||||
|
|
||||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_avini"]
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_avini"]
|
||||||
height = 1.0
|
height = 1.0
|
||||||
radius = 0.1
|
radius = 0.1
|
||||||
@@ -43,6 +49,7 @@ continuous_cd = true
|
|||||||
contact_monitor = true
|
contact_monitor = true
|
||||||
max_contacts_reported = 1
|
max_contacts_reported = 1
|
||||||
script = ExtResource("1_csqwk")
|
script = ExtResource("1_csqwk")
|
||||||
|
RDamage = SubResource("Resource_jpdh0")
|
||||||
|
|
||||||
[node name="TweenQueueSystem" parent="." instance=ExtResource("2_x1nha")]
|
[node name="TweenQueueSystem" parent="." instance=ExtResource("2_x1nha")]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user