diff --git a/scripts/camera_2d.gd b/scripts/camera_2d.gd index 98d4441..890df14 100644 --- a/scripts/camera_2d.gd +++ b/scripts/camera_2d.gd @@ -2,7 +2,7 @@ extends Camera2D var shake_tween: Tween -func shake(duration: float, intensity: float) -> void: +func shake(duration: float, intensity: float, constant: bool = false) -> void: if shake_tween and shake_tween.is_valid(): shake_tween.kill() @@ -10,14 +10,15 @@ func shake(duration: float, intensity: float) -> void: shake_tween = create_tween() shake_tween.set_pause_mode(Tween.TWEEN_PAUSE_PROCESS) - var steps = 20 - var step_duration = duration / steps + var step_duration := 0.05 + var steps := maxi(1, int(duration / step_duration)) for i in steps: - var t = float(i) / float(steps) - var decay = 1.0 - t - var si = intensity * decay - var target = Vector2( + var t := float(i) / float(steps) + var si := intensity + if not constant: + si *= 1.0 - t + var target := Vector2( randf_range(-si, si), randf_range(-si, si) ) diff --git a/scripts/purge.gd b/scripts/purge.gd index ba76cab..a2d7026 100644 --- a/scripts/purge.gd +++ b/scripts/purge.gd @@ -2,31 +2,20 @@ extends Node2D const ELITE_DAMAGE_PCT := 0.75 const FLASH_FADE_DURATION := 0.6 -const SUMMON_SHAKE := 2.0 @onready var summon_circle: AnimatedSprite2D = $SummonCircle/AnimatedSprite2D @onready var camera = get_node("/root/Game/Camera2D") -var is_summoning := true - func _ready() -> void: summon_circle.sprite_frames = summon_circle.sprite_frames.duplicate() summon_circle.sprite_frames.set_animation_loop("default", false) summon_circle.animation_finished.connect(_unleash) summon_circle.play("default") - -func _process(delta: float) -> void: - if is_summoning: - camera.offset = Vector2( - randf_range(-SUMMON_SHAKE, SUMMON_SHAKE), - randf_range(-SUMMON_SHAKE, SUMMON_SHAKE) - ) + camera.shake(6.0, 1.5, true) func _unleash() -> void: - is_summoning = false - set_process(false) - camera.offset = Vector2.ZERO - camera.shake(0.2, 6.0) + camera.shake(0.3, 8.0) + await get_tree().create_timer(0.1).timeout for enemy in get_tree().get_nodes_in_group("enemies"): if not is_instance_valid(enemy): diff --git a/scripts/witch.gd b/scripts/witch.gd index cc8428c..8c4f914 100644 --- a/scripts/witch.gd +++ b/scripts/witch.gd @@ -125,7 +125,6 @@ func shoot_purge(): var pg = purge.instantiate() pg.global_position = global_position get_parent().add_child(pg) - camera.shake(0.3, 0.8) func take_damage(amount: int, attacker = null) -> void: if is_invincible: