mirror of
https://gitlab.com/open-fpsz/open-fpsz.git
synced 2026-07-16 00:44:50 +00:00
Merge branch 'cleanup/explosions' into 'develop'
🐛 Fix explosion bugs and cleanup logic See merge request open-fpsz/open-fpsz!21
This commit is contained in:
commit
7771d9db54
6 changed files with 22 additions and 25 deletions
|
|
@ -89,7 +89,7 @@ func _handle_jetpack(delta, direction):
|
||||||
energy = clamp(energy, 0, max_energy)
|
energy = clamp(energy, 0, max_energy)
|
||||||
energy_changed.emit(energy)
|
energy_changed.emit(energy)
|
||||||
|
|
||||||
func _process(delta):
|
func _process(_delta):
|
||||||
if player_state == PlayerState.PLAYER_DEAD:
|
if player_state == PlayerState.PLAYER_DEAD:
|
||||||
return
|
return
|
||||||
%SpringArm3D.global_transform.basis = Basis.from_euler(Vector3(input.camera_rotation.y, input.camera_rotation.x, 0.0))
|
%SpringArm3D.global_transform.basis = Basis.from_euler(Vector3(input.camera_rotation.y, input.camera_rotation.x, 0.0))
|
||||||
|
|
|
||||||
|
|
@ -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"]
|
[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"]
|
[node name="AreaDamage" type="Area3D"]
|
||||||
collision_layer = 4
|
collision_layer = 4
|
||||||
script = ExtResource("1_hn2e3")
|
script = ExtResource("1_hn2e3")
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
|
||||||
shape = SubResource("SphereShape3D_080vi")
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
extends Area3D
|
extends Area3D
|
||||||
class_name HealthComponent
|
class_name HealthComponent
|
||||||
|
|
||||||
@export var max_health : int = 100
|
@export var max_health : float = 100.0
|
||||||
@export var health : int = 100:
|
@export var health : float = 100.0:
|
||||||
set(value):
|
set(value):
|
||||||
health = value
|
health = value
|
||||||
health_changed.emit(value)
|
health_changed.emit(value)
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,6 @@ func explode(spawn_location):
|
||||||
var spawned_explosion = EXPLOSION.instantiate()
|
var spawned_explosion = EXPLOSION.instantiate()
|
||||||
spawned_explosion.position = spawn_location
|
spawned_explosion.position = spawn_location
|
||||||
game.add_child(spawned_explosion)
|
game.add_child(spawned_explosion)
|
||||||
spawned_explosion.explode()
|
|
||||||
queue_free()
|
queue_free()
|
||||||
|
|
||||||
func _physics_process(delta):
|
func _physics_process(delta):
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,22 @@
|
||||||
extends Node3D
|
extends Node3D
|
||||||
|
|
||||||
@onready var fire = $Fire
|
@onready var fire = $Fire
|
||||||
@onready var explosion_area : AreaDamageComponent = $AreaDamageComponent
|
@onready var area_damage : AreaDamageComponent = $AreaDamageComponent
|
||||||
var explosion_effect_pending : bool = false
|
var explosion_effect_pending : bool = false
|
||||||
|
|
||||||
const impulse_force = 1000;
|
const impulse_force = 1000;
|
||||||
|
|
||||||
func explode():
|
func _ready():
|
||||||
explosion_effect_pending = true
|
|
||||||
fire.emitting = true
|
fire.emitting = true
|
||||||
|
|
||||||
func _physics_process(_delta):
|
func _physics_process(_delta):
|
||||||
if explosion_effect_pending:
|
var bodies = area_damage.get_overlapping_bodies()
|
||||||
var bodies = explosion_area.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:
|
area_damage.monitorable = false
|
||||||
if body is RigidBody3D:
|
area_damage.monitoring = false
|
||||||
var direction = (body.global_position - global_position).normalized()
|
await get_tree().create_timer(1.0).timeout
|
||||||
body.apply_central_impulse(direction * impulse_force)
|
queue_free()
|
||||||
|
|
||||||
explosion_effect_pending = false
|
|
||||||
await get_tree().create_timer(1.0).timeout
|
|
||||||
queue_free()
|
|
||||||
|
|
|
||||||
|
|
@ -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="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"]
|
[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"]
|
[sub_resource type="SphereMesh" id="SphereMesh_k3pnh"]
|
||||||
material = SubResource("StandardMaterial3D_wpu51")
|
material = SubResource("StandardMaterial3D_wpu51")
|
||||||
|
|
||||||
|
[sub_resource type="SphereShape3D" id="SphereShape3D_mlo2k"]
|
||||||
|
radius = 5.0
|
||||||
|
|
||||||
[node name="ProjectileExplosion" type="Node3D"]
|
[node name="ProjectileExplosion" type="Node3D"]
|
||||||
script = ExtResource("1_fp5td")
|
script = ExtResource("1_fp5td")
|
||||||
|
|
||||||
|
|
@ -40,3 +43,6 @@ draw_pass_1 = SubResource("SphereMesh_k3pnh")
|
||||||
|
|
||||||
[node name="AreaDamageComponent" parent="." instance=ExtResource("2_reyvo")]
|
[node name="AreaDamageComponent" parent="." instance=ExtResource("2_reyvo")]
|
||||||
damage = 35
|
damage = 35
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="AreaDamageComponent"]
|
||||||
|
shape = SubResource("SphereShape3D_mlo2k")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue