Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 46 additions & 3 deletions scenes/game_elements/props/projectile/components/projectile.gd
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,13 @@ extends RigidBody2D

var _trail_particles: GPUParticles2D

#Attributes that control the blinking effect
var time_passed: float = 0.0
var time_to_dissapear: float = 0.0
var is_dissapearing: bool = false
var blink_effect: bool = true
var blink_timer: Timer

@onready var visible_things: Node2D = %VisibleThings
@onready var animated_sprite_2d: AnimatedSprite2D = %AnimatedSprite2D
@onready var trail_fx_marker: Marker2D = %TrailFXMarker
Expand Down Expand Up @@ -111,7 +118,19 @@ func _ready() -> void:
duration_timer.start()
var impulse: Vector2 = direction * speed
apply_impulse(impulse)


##the effect will start when the projectile has spent 70% of its lifetime
time_to_dissapear = duration * 0.7

blink_timer = Timer.new()
#each 0.25 seconds the blink effect will show
blink_timer.wait_time = 0.25
blink_timer.one_shot = false
blink_timer.timeout.connect(_on_blink_timer_timeout)

add_child(blink_timer)



func _process(_delta: float) -> void:
visible_things.rotation = linear_velocity.angle()
Expand All @@ -121,6 +140,12 @@ func _process(_delta: float) -> void:
)
var force: Vector2 = direction_to_target * speed
constant_force = force

time_passed += _delta
if time_passed >= time_to_dissapear && not is_dissapearing:
is_dissapearing = true
blink_timer.start()



## Add a small effect scene to the current scene in the current position.
Expand All @@ -136,7 +161,12 @@ func add_small_fx() -> void:

func _on_body_entered(body: Node2D) -> void:
add_small_fx()
duration_timer.start()

# Logic for the dissapear animation
# When the proyectile is dissapearing, the duration_timer will not reset
if not is_dissapearing:
duration_timer.start()
time_passed = 0.0

# Logic for Fragile Barrel
# We must check for the specific subclass first because it inherits from FillingBarrel
Expand All @@ -157,7 +187,12 @@ func _on_body_entered(body: Node2D) -> void:
## enters the repel area.
func got_repelled(repel_direction: Vector2) -> void:
add_small_fx()
duration_timer.start()

# When the proyectile is dissapearing, the duration_timer will not reset
if not is_dissapearing:
duration_timer.start()
time_passed = 0.0

var hit_vector: Vector2 = repel_direction * hit_speed
hit_sound.play()
animated_sprite_2d.speed_scale = 2
Expand Down Expand Up @@ -186,3 +221,11 @@ func _on_duration_timer_timeout() -> void:
func remove() -> void:
await get_tree().create_timer(randf_range(0., 3.)).timeout
explode()

func _on_blink_timer_timeout() -> void:
if blink_effect:
animated_sprite_2d.modulate.a = 0.2
blink_effect = false
else:
animated_sprite_2d.modulate.a = 0.8
blink_effect = true
Loading