From 8e875985e0405a25828ff2b2fc745b22b196c6a2 Mon Sep 17 00:00:00 2001 From: Squinternator Date: Thu, 11 Apr 2024 17:44:13 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20explosion=20bugs=20and=20c?= =?UTF-8?q?leanup=20logic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- characters/player/player.gd | 2 +- components/area_damage_component.tscn | 8 +------ components/health_component.gd | 4 ++-- weapons/space_gun/projectile.gd | 1 - weapons/space_gun/projectile_explosion.gd | 24 ++++++++++----------- weapons/space_gun/projectile_explosion.tscn | 8 ++++++- 6 files changed, 22 insertions(+), 25 deletions(-) diff --git a/characters/player/player.gd b/characters/player/player.gd index f3e78f0..fc567e5 100644 --- a/characters/player/player.gd +++ b/characters/player/player.gd @@ -89,7 +89,7 @@ func _handle_jetpack(delta, direction): energy = clamp(energy, 0, max_energy) energy_changed.emit(energy) -func _process(delta): +func _process(_delta): if player_state == PlayerState.PLAYER_DEAD: return %SpringArm3D.global_transform.basis = Basis.from_euler(Vector3(input.camera_rotation.y, input.camera_rotation.x, 0.0)) diff --git a/components/area_damage_component.tscn b/components/area_damage_component.tscn index 129ac1e..0c59149 100644 --- a/components/area_damage_component.tscn +++ b/components/area_damage_component.tscn @@ -1,13 +1,7 @@ -[gd_scene load_steps=3 format=3 uid="uid://ds1hekx1dq1bg"] +[gd_scene load_steps=2 format=3 uid="uid://ds1hekx1dq1bg"] [ext_resource type="Script" path="res://components/area_damage_component.gd" id="1_hn2e3"] -[sub_resource type="SphereShape3D" id="SphereShape3D_080vi"] -radius = 5.0 - [node name="AreaDamage" type="Area3D"] collision_layer = 4 script = ExtResource("1_hn2e3") - -[node name="CollisionShape3D" type="CollisionShape3D" parent="."] -shape = SubResource("SphereShape3D_080vi") diff --git a/components/health_component.gd b/components/health_component.gd index f29b2d8..0b4adb2 100644 --- a/components/health_component.gd +++ b/components/health_component.gd @@ -1,8 +1,8 @@ extends Area3D class_name HealthComponent -@export var max_health : int = 100 -@export var health : int = 100: +@export var max_health : float = 100.0 +@export var health : float = 100.0: set(value): health = value health_changed.emit(value) diff --git a/weapons/space_gun/projectile.gd b/weapons/space_gun/projectile.gd index 96dece8..1997cca 100644 --- a/weapons/space_gun/projectile.gd +++ b/weapons/space_gun/projectile.gd @@ -24,7 +24,6 @@ func explode(spawn_location): var spawned_explosion = EXPLOSION.instantiate() spawned_explosion.position = spawn_location game.add_child(spawned_explosion) - spawned_explosion.explode() queue_free() func _physics_process(delta): diff --git a/weapons/space_gun/projectile_explosion.gd b/weapons/space_gun/projectile_explosion.gd index b7c4158..3cb878d 100644 --- a/weapons/space_gun/projectile_explosion.gd +++ b/weapons/space_gun/projectile_explosion.gd @@ -1,24 +1,22 @@ extends Node3D @onready var fire = $Fire -@onready var explosion_area : AreaDamageComponent = $AreaDamageComponent +@onready var area_damage : AreaDamageComponent = $AreaDamageComponent var explosion_effect_pending : bool = false const impulse_force = 1000; -func explode(): - explosion_effect_pending = true +func _ready(): fire.emitting = true func _physics_process(_delta): - if explosion_effect_pending: - var bodies = explosion_area.get_overlapping_bodies() + var bodies = area_damage.get_overlapping_bodies() + for body in bodies: + if body is RigidBody3D: + var direction = (body.global_position - global_position).normalized() + body.apply_central_impulse(direction * impulse_force) - for body in bodies: - if body is RigidBody3D: - var direction = (body.global_position - global_position).normalized() - body.apply_central_impulse(direction * impulse_force) - - explosion_effect_pending = false - await get_tree().create_timer(1.0).timeout - queue_free() + area_damage.monitorable = false + area_damage.monitoring = false + await get_tree().create_timer(1.0).timeout + queue_free() diff --git a/weapons/space_gun/projectile_explosion.tscn b/weapons/space_gun/projectile_explosion.tscn index b2ac328..382028d 100644 --- a/weapons/space_gun/projectile_explosion.tscn +++ b/weapons/space_gun/projectile_explosion.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=8 format=3 uid="uid://8atq41j7wd55"] +[gd_scene load_steps=9 format=3 uid="uid://8atq41j7wd55"] [ext_resource type="Script" path="res://weapons/space_gun/projectile_explosion.gd" id="1_fp5td"] [ext_resource type="PackedScene" uid="uid://ds1hekx1dq1bg" path="res://components/area_damage_component.tscn" id="2_reyvo"] @@ -25,6 +25,9 @@ emission_energy_multiplier = 4.0 [sub_resource type="SphereMesh" id="SphereMesh_k3pnh"] material = SubResource("StandardMaterial3D_wpu51") +[sub_resource type="SphereShape3D" id="SphereShape3D_mlo2k"] +radius = 5.0 + [node name="ProjectileExplosion" type="Node3D"] script = ExtResource("1_fp5td") @@ -40,3 +43,6 @@ draw_pass_1 = SubResource("SphereMesh_k3pnh") [node name="AreaDamageComponent" parent="." instance=ExtResource("2_reyvo")] damage = 35 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="AreaDamageComponent"] +shape = SubResource("SphereShape3D_mlo2k")