instanciating explosion on slam
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Has been cancelled
Create tag and build when new code gets to main / Test (push) Has been cancelled
Create tag and build when new code gets to main / Export (push) Has been cancelled

This commit is contained in:
2026-01-26 16:34:18 +01:00
parent d79ca44972
commit 2fdc9c7ca8
13 changed files with 122 additions and 32 deletions

View File

@@ -94,7 +94,7 @@ public partial class Enemy : CharacterBody3D,
{
// Anonymous function call to erase return values of ReduceHealth
CDamageable.DamageTaken += (source, record) => ReduceHealth(source, record);
CDamageable.DamageTaken += RegisterKnockback;
CDamageable.DamageTaken += (source, record) => RegisterKnockback(new KnockbackRecord(record));
CHealth.HealthDepleted += Kill;
HealthChanged += (source, record) => _healthbar.OnHealthChanged(record);
}
@@ -127,7 +127,7 @@ public partial class Enemy : CharacterBody3D,
foreach (var body in bodies)
{
if(body is IDamageable spawnable)
spawnable.TakeDamage(new DamageRecord(this, RDamage));
spawnable.TakeDamage(new DamageRecord(GlobalPosition, RDamage));
}
}
@@ -184,10 +184,10 @@ public partial class Enemy : CharacterBody3D,
CallDeferred(Node.MethodName.QueueFree);
}
public void RegisterKnockback(IDamageable source, DamageRecord damageRecord)
public void RegisterKnockback(KnockbackRecord knockbackRecord)
{
if (CKnockback is null) return;
CKnockback.RegisterKnockback(source, damageRecord);
CKnockback.RegisterKnockback(knockbackRecord);
}
public Vector3 ComputeKnockback()

View File

@@ -0,0 +1,36 @@
using Godot;
using System;
using Movementtests.interfaces;
[GlobalClass]
public partial class Explosion : Area3D, IDamageDealer
{
[Export] public RDamage RDamage { get; set;}
[Export] public float Radius { get; set;}
[Export] public float ExplosionTime { get; set; } = 0.2f;
public override void _Ready()
{
var sphereShape = GetNode<CollisionShape3D>("CollisionShape3D").Shape as SphereShape3D;
sphereShape!.Radius = Radius;
var sphereMesh = GetNode<MeshInstance3D>("MeshInstance3D").Mesh as SphereMesh;
sphereMesh!.Radius = Radius;
sphereMesh!.Height = Radius*2f;
GetTree().CreateTimer(ExplosionTime).Timeout += TriggerExplosion;
}
public void TriggerExplosion()
{
var bodies = GetOverlappingBodies();
foreach (var body in bodies)
{
if (body is IDamageable damageable)
damageable.TakeDamage(new DamageRecord(GlobalPosition, RDamage));
if (body is IStunnable stunnable)
stunnable.Stun();
}
QueueFree();
}
}

View File

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

View File

@@ -0,0 +1,34 @@
[gd_scene load_steps=7 format=3 uid="uid://duju3atqgltkg"]
[ext_resource type="Script" uid="uid://cnlu64l7oxvv3" path="res://scenes/enemies/Explosion.cs" id="1_82hkh"]
[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://components/damage/RDamage.cs" id="2_hys74"]
[sub_resource type="Resource" id="Resource_ffdh3"]
script = ExtResource("2_hys74")
DamageDealt = 5.0
DamageType = 3
metadata/_custom_type_script = "uid://jitubgv6judn"
[sub_resource type="SphereShape3D" id="SphereShape3D_82hkh"]
radius = 1.0
[sub_resource type="SphereMesh" id="SphereMesh_82hkh"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_hys74"]
transparency = 1
cull_mode = 2
albedo_color = Color(0.9607843, 0.27058825, 0, 0.7176471)
[node name="Explosion" type="Area3D"]
collision_layer = 0
collision_mask = 16
monitorable = false
script = ExtResource("1_82hkh")
RDamage = SubResource("Resource_ffdh3")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("SphereShape3D_82hkh")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
mesh = SubResource("SphereMesh_82hkh")
surface_material_override/0 = SubResource("StandardMaterial3D_hys74")

View File

@@ -19,7 +19,8 @@ metadata/_custom_type_script = "uid://b6y3ugfydvch0"
[sub_resource type="Resource" id="Resource_53j1c"]
script = ExtResource("2_1bsgx")
DamageType = 1
DamageType = 3
Modifier = 1.0
metadata/_custom_type_script = "uid://b6y3ugfydvch0"
[sub_resource type="Resource" id="Resource_on7rt"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=20 format=3 uid="uid://dxt0e2ugmttqq"]
[gd_scene load_steps=21 format=3 uid="uid://dxt0e2ugmttqq"]
[ext_resource type="Script" uid="uid://bn7sc6id7n166" path="res://scenes/enemies/Enemy.cs" id="1_r6506"]
[ext_resource type="Resource" uid="uid://otfc2snh8umc" path="res://scenes/enemies/grounded_enemy/grounded_enemy_damage.tres" id="2_bn56u"]
@@ -18,6 +18,12 @@ script = ExtResource("2_r3cnf")
Modifier = 1.0
metadata/_custom_type_script = "uid://b6y3ugfydvch0"
[sub_resource type="Resource" id="Resource_18xwy"]
script = ExtResource("2_r3cnf")
DamageType = 3
Modifier = 1.0
metadata/_custom_type_script = "uid://b6y3ugfydvch0"
[sub_resource type="Resource" id="Resource_6d4gl"]
script = ExtResource("8_6d4gl")
Speed = 5.0
@@ -60,7 +66,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.2, 0)
[node name="CDamageable" type="Node" parent="."]
script = ExtResource("7_1tw73")
DamageModifiers = Array[Object]([SubResource("Resource_qj0ob")])
DamageModifiers = Array[Object]([SubResource("Resource_qj0ob"), SubResource("Resource_18xwy")])
metadata/_custom_type_script = "uid://b0u23nkpaimyc"
[node name="CMovement" parent="." node_paths=PackedStringArray("WallInFrontRayCast") instance=ExtResource("7_qyswd")]
@@ -68,6 +74,7 @@ RMovement = SubResource("Resource_6d4gl")
WallInFrontRayCast = NodePath("../WallInFrontRayCast")
[node name="CKnockback" parent="." instance=ExtResource("10_jqqi6")]
RKnockback = ExtResource("11_8k3xb")
[node name="CTarget" type="Marker3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)