From 27dff96fe5970200605186eb4fc022eca5d8a34e Mon Sep 17 00:00:00 2001 From: iBerserker89 Date: Wed, 19 Nov 2025 16:34:12 -0300 Subject: [PATCH 1/4] a mina pode causar dano no player [issue: #97] --- scenes/game/bullet_3.tscn | 2 +- scripts/game/bullet_3.gd | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/scenes/game/bullet_3.tscn b/scenes/game/bullet_3.tscn index b200848..75f5162 100644 --- a/scenes/game/bullet_3.tscn +++ b/scenes/game/bullet_3.tscn @@ -176,7 +176,7 @@ animations = [{ radius = 49.0 [node name="Bullet_3" type="Area2D"] -collision_mask = 2 +collision_mask = 3 script = ExtResource("1_8iyde") [node name="MineSprite" type="Sprite2D" parent="."] diff --git a/scripts/game/bullet_3.gd b/scripts/game/bullet_3.gd index a71690d..d0e9b5d 100644 --- a/scripts/game/bullet_3.gd +++ b/scripts/game/bullet_3.gd @@ -8,6 +8,7 @@ class_name Bullet3 extends Area2D var lifetime_seconds: float = 3.0 var insta_kill_amount: float = 99999.0 +var can_hit_player: bool = false ## Inicializa o timer e configura a mina para começar ativa e monitorando colisões. @@ -20,10 +21,22 @@ func _ready() -> void: explosion_animation.hide() if not vanish_timer.timeout.is_connected(_on_vanish_timer_timeout): vanish_timer.timeout.connect(_on_vanish_timer_timeout) + await get_tree().create_timer(0.2).timeout + can_hit_player = true ## Detecta colisão com um corpo e aplica dano. func _on_body_entered(body: Node) -> void: + # Player: dano baseado na velocidade (mesma lógica da colisão com asteroide) + if body.has_method("is_player"): + if not can_hit_player: + return + var damage = body.acceleration / 30.0 + if damage <= 10.0: + damage = 10.0 + body.health -= damage + _explode() + #return if body.has_method("take_damage"): body.take_damage(insta_kill_amount, 1.0) _explode() From 9ffdf12bf3801c43b57259571e3610e392362f16 Mon Sep 17 00:00:00 2001 From: iBerserker89 Date: Mon, 24 Nov 2025 14:20:07 -0300 Subject: [PATCH 2/4] =?UTF-8?q?remover=20coment=C3=A1rio=20desnecess=C3=A1?= =?UTF-8?q?rio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/game/bullet_3.gd | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/game/bullet_3.gd b/scripts/game/bullet_3.gd index d0e9b5d..81033bb 100644 --- a/scripts/game/bullet_3.gd +++ b/scripts/game/bullet_3.gd @@ -27,7 +27,6 @@ func _ready() -> void: ## Detecta colisão com um corpo e aplica dano. func _on_body_entered(body: Node) -> void: - # Player: dano baseado na velocidade (mesma lógica da colisão com asteroide) if body.has_method("is_player"): if not can_hit_player: return @@ -36,7 +35,6 @@ func _on_body_entered(body: Node) -> void: damage = 10.0 body.health -= damage _explode() - #return if body.has_method("take_damage"): body.take_damage(insta_kill_amount, 1.0) _explode() From 180cd995b13182b05c844ec55413ca2945430586 Mon Sep 17 00:00:00 2001 From: iBerserker89 Date: Tue, 20 Jan 2026 17:01:15 -0300 Subject: [PATCH 3/4] =?UTF-8?q?ajustar=20modo=20de=20dano=20=C3=A0=20mina?= =?UTF-8?q?=20e=20separar=20fun=C3=A7=C3=B5es=20de=20dano=20=C3=A0=20mina?= =?UTF-8?q?=20e=20ao=20player?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/game/bullet_3.gd | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/scripts/game/bullet_3.gd b/scripts/game/bullet_3.gd index 81033bb..0a3f1bf 100644 --- a/scripts/game/bullet_3.gd +++ b/scripts/game/bullet_3.gd @@ -7,8 +7,8 @@ class_name Bullet3 extends Area2D @onready var explosion_sound: AudioStreamPlayer2D = $AudioStreamPlayer2D var lifetime_seconds: float = 3.0 -var insta_kill_amount: float = 99999.0 var can_hit_player: bool = false +var damage : float = 0.0 ## Inicializa o timer e configura a mina para começar ativa e monitorando colisões. @@ -27,21 +27,39 @@ func _ready() -> void: ## Detecta colisão com um corpo e aplica dano. func _on_body_entered(body: Node) -> void: - if body.has_method("is_player"): + damage_enemy(body) + damage_player(body) + + +## Aplica dano ao Player somente se a mina estiver autorizada a atingi-lo. +## O dano é calculado com base na aceleração atual do Player, +## Após aplicar o dano, a mina explode. +func damage_player(body: Node) -> void: + if body is Player: if not can_hit_player: return - var damage = body.acceleration / 30.0 + damage = body.acceleration / 30.0 if damage <= 10.0: damage = 10.0 body.health -= damage - _explode() + explode() + + +## Aplica dano a inimigos que implementam `take_damage`. +## O dano é calculado a partir da velocidade do corpo, +## Explode a mina após o impacto. +func damage_enemy(body: Node) -> void: if body.has_method("take_damage"): - body.take_damage(insta_kill_amount, 1.0) - _explode() + damage = body.velocity.length() / 7.0 + if damage <= 10.0: + damage = 10.0 + body.take_damage(damage, 1.0) + print("ASTEROID damaged: ", snapped(damage, 0.01)) + explode() ## Executa a animação e o som da explosão e desativa colisões. -func _explode() -> void: +func explode() -> void: collision_shape.set_deferred("disabled", true) set_deferred("monitoring", false) vanish_timer.stop() @@ -58,4 +76,4 @@ func _on_explosion_finished() -> void: func _on_vanish_timer_timeout() -> void: - _explode() + explode() From cfb633ebc40b5a98f441a3b9c4ce8e016a722a72 Mon Sep 17 00:00:00 2001 From: iBerserker89 Date: Thu, 22 Jan 2026 13:20:26 -0300 Subject: [PATCH 4/4] refatorar --- scripts/game/bullet_3.gd | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/scripts/game/bullet_3.gd b/scripts/game/bullet_3.gd index 0a3f1bf..9433359 100644 --- a/scripts/game/bullet_3.gd +++ b/scripts/game/bullet_3.gd @@ -27,14 +27,6 @@ func _ready() -> void: ## Detecta colisão com um corpo e aplica dano. func _on_body_entered(body: Node) -> void: - damage_enemy(body) - damage_player(body) - - -## Aplica dano ao Player somente se a mina estiver autorizada a atingi-lo. -## O dano é calculado com base na aceleração atual do Player, -## Após aplicar o dano, a mina explode. -func damage_player(body: Node) -> void: if body is Player: if not can_hit_player: return @@ -42,24 +34,17 @@ func damage_player(body: Node) -> void: if damage <= 10.0: damage = 10.0 body.health -= damage - explode() - - -## Aplica dano a inimigos que implementam `take_damage`. -## O dano é calculado a partir da velocidade do corpo, -## Explode a mina após o impacto. -func damage_enemy(body: Node) -> void: if body.has_method("take_damage"): damage = body.velocity.length() / 7.0 if damage <= 10.0: damage = 10.0 body.take_damage(damage, 1.0) print("ASTEROID damaged: ", snapped(damage, 0.01)) - explode() + _explode() ## Executa a animação e o som da explosão e desativa colisões. -func explode() -> void: +func _explode() -> void: collision_shape.set_deferred("disabled", true) set_deferred("monitoring", false) vanish_timer.stop() @@ -76,4 +61,4 @@ func _on_explosion_finished() -> void: func _on_vanish_timer_timeout() -> void: - explode() + _explode()