Added ExplosionParticles

This commit is contained in:
2025-11-24 16:40:43 +03:00
parent ce33ff76e8
commit 98294afeab
9 changed files with 216 additions and 18 deletions
@@ -18,18 +18,21 @@ const OFF_TIMES = [
const ON_TIME = 0.05
enum Sprite {
enum SpriteState {
ON,
OFF,
Disabled,
}
var _bodies_inside: Array[Node2D] = []
var current_off_time_index := 0
var _current_off_time_index := 0
var _current_sprite_state : SpriteState:
set = _switch_sprite
func _ready() -> void:
_switch_sprite(Sprite.OFF)
_current_sprite_state = SpriteState.OFF
super._ready()
@@ -52,7 +55,7 @@ func _on_livetime_timer_timeout() -> void:
func _on_blast_body_entered(body: Node2D) -> void:
_bodies_inside.append(body)
_switch_sprite(Sprite.ON)
_current_sprite_state = SpriteState.ON
if sprite_on_timer.is_stopped() and sprite_off_timer.is_stopped():
sprite_on_timer.start(ON_TIME)
@@ -67,33 +70,55 @@ func _on_blast_body_exited(body: Node2D) -> void:
func _on_sprite_on_timer_timeout() -> void:
current_off_time_index += 1
_current_off_time_index += 1
if current_off_time_index >= OFF_TIMES.size():
if _current_off_time_index >= OFF_TIMES.size():
_try_to_damage_by_blast()
_process_hit_for_projectile(null)
else:
_switch_sprite(Sprite.OFF)
sprite_off_timer.start(OFF_TIMES[current_off_time_index])
_current_sprite_state = SpriteState.OFF
sprite_off_timer.start(OFF_TIMES[_current_off_time_index])
func _on_sprite_off_timer_timeout() -> void:
_switch_sprite(Sprite.ON)
_current_sprite_state = SpriteState.ON
sprite_on_timer.start(ON_TIME)
func _reset() -> void:
_switch_sprite(Sprite.OFF)
_current_sprite_state = SpriteState.OFF
sprite_on_timer.stop()
sprite_off_timer.stop()
current_off_time_index = 0
_current_off_time_index = 0
func _switch_sprite(sprite: Sprite) -> void:
match sprite:
Sprite.ON:
func _switch_sprite(new_state_state: SpriteState) -> void:
if _current_sprite_state == SpriteState.Disabled: return
_current_sprite_state = new_state_state
match _current_sprite_state:
SpriteState.ON:
sprite_on.show()
sprite_off.hide()
Sprite.OFF:
SpriteState.OFF:
sprite_on.hide()
sprite_off.show()
SpriteState.Disabled:
sprite_on.hide()
sprite_off.hide()
@onready var sprite : Sprite2D = $Sprite2D
@onready var explosion_particles : ExplosionParticles = $ExplosionParticles
func _process_hit_for_projectile(_collided_body: Node2D) -> void:
_current_sprite_state = SpriteState.Disabled
explosion_particles.emitting = true
set_physics_process(false)
collision_mask = 0
blast.collision_mask = 0
func _on_explosion_particles_finished() -> void:
queue_free()
@@ -1,9 +1,10 @@
[gd_scene load_steps=10 format=3 uid="uid://4mkklqt1g14f"]
[gd_scene load_steps=12 format=3 uid="uid://4mkklqt1g14f"]
[ext_resource type="PackedScene" uid="uid://betr5ry5tc75e" path="res://game/entities/weapons/blast_projectile.tscn" id="1_ufc4r"]
[ext_resource type="Script" uid="uid://76swcukelnii" path="res://game/entities/weapons/minelayer/minelayer_projectile.gd" id="2_hwwfa"]
[ext_resource type="Script" uid="uid://dftb7hg5f06b5" path="res://game/health_system/damage/explosion_damage.gd" id="3_hll7s"]
[ext_resource type="Texture2D" uid="uid://oj86smpsipw4" path="res://images/projectiles.png" id="4_px1i2"]
[ext_resource type="PackedScene" uid="uid://bhxib2ltpkcbf" path="res://game/entities/other/explosion_particles.tscn" id="5_ckqco"]
[sub_resource type="AtlasTexture" id="AtlasTexture_ckqco"]
atlas = ExtResource("4_px1i2")
@@ -24,6 +25,18 @@ metadata/_custom_type_script = "uid://dftb7hg5f06b5"
[sub_resource type="CircleShape2D" id="CircleShape2D_px1i2"]
radius = 48.0
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_ckqco"]
lifetime_randomness = 0.2
particle_flag_disable_z = true
emission_shape = 1
emission_sphere_radius = 48.0
angle_min = -179.99998
angle_max = 180.00002
spread = 180.0
gravity = Vector3(0, 0, 0)
turbulence_enabled = true
turbulence_noise_speed = Vector3(0.1, 0.1, 0.1)
[node name="MinelayerProjectile" instance=ExtResource("1_ufc4r")]
collision_layer = 0
collision_mask = 0
@@ -57,8 +70,13 @@ one_shot = true
[node name="SpriteOffTimer" type="Timer" parent="." index="7"]
one_shot = true
[node name="ExplosionParticles" parent="." index="8" instance=ExtResource("5_ckqco")]
process_material = SubResource("ParticleProcessMaterial_ckqco")
amount_ratio = 0.5
[connection signal="body_entered" from="Blast" to="." method="_on_blast_body_entered"]
[connection signal="body_exited" from="Blast" to="." method="_on_blast_body_exited"]
[connection signal="timeout" from="LivetimeTimer" to="." method="_on_livetime_timer_timeout"]
[connection signal="timeout" from="SpriteOnTimer" to="." method="_on_sprite_on_timer_timeout"]
[connection signal="timeout" from="SpriteOffTimer" to="." method="_on_sprite_off_timer_timeout"]
[connection signal="finished" from="ExplosionParticles" to="." method="_on_explosion_particles_finished"]