mirror of
https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
synced 2025-10-22 07:28:14 +00:00
Properly implement the Hammer item (#599)
* Properly implement the Hammer item * Update Boo.gd * Update LongFirebar.tscn
This commit is contained in:

committed by
GitHub

parent
651988bf5e
commit
8474bc3c19
@@ -8,18 +8,26 @@ extends Node
|
||||
signal player_hit(player: Player)
|
||||
signal player_stomped_on(player: Player)
|
||||
signal invincible_player_hit(player: Player)
|
||||
signal hammer_player_hit(player: Player)
|
||||
|
||||
func _ready() -> void:
|
||||
hitbox.area_entered.connect(area_entered)
|
||||
|
||||
func area_entered(area: Area2D) -> void:
|
||||
if area.owner is Player:
|
||||
player_entered(area.owner)
|
||||
if area.name == "HammerHitbox":
|
||||
hammer_entered(area.owner)
|
||||
else:
|
||||
player_entered(area.owner)
|
||||
|
||||
func player_entered(player: Player) -> void:
|
||||
if player.is_invincible or player.has_hammer:
|
||||
if player.is_invincible:
|
||||
invincible_player_hit.emit(player)
|
||||
elif (player.velocity.y >= 15 or (player.global_position.y + height < owner.global_position.y)) and player.in_water == false:
|
||||
player_stomped_on.emit(player)
|
||||
else:
|
||||
player_hit.emit(player)
|
||||
|
||||
func hammer_entered(player: Player) -> void:
|
||||
if player.has_hammer:
|
||||
hammer_player_hit.emit(player)
|
||||
|
@@ -14,6 +14,10 @@ func die() -> void:
|
||||
|
||||
func die_from_object(_node: Node2D) -> void:
|
||||
destroy()
|
||||
|
||||
func die_from_hammer(_node: Node2D) -> void:
|
||||
AudioManager.play_sfx("hammer_hit", global_position)
|
||||
destroy()
|
||||
|
||||
func summon_particle() -> void:
|
||||
var node = BARREL_DESTRUCTION_PARTICLE.instantiate()
|
||||
|
@@ -33,7 +33,7 @@ func handle_movement(delta: float) -> void:
|
||||
|
||||
func on_area_entered(area: Area2D) -> void:
|
||||
if area.owner is Player:
|
||||
if area.owner.is_invincible:
|
||||
if area.owner.is_invincible or area.name == "HammerHitbox":
|
||||
die()
|
||||
else:
|
||||
area.owner.damage()
|
||||
|
@@ -11,7 +11,7 @@ func _physics_process(delta: float) -> void:
|
||||
i.get_node("Sprite").scale.x = sign(get_tree().get_first_node_in_group("Players").global_position.x + 1 - i.global_position.x)
|
||||
|
||||
func on_area_entered(area: Area2D) -> void:
|
||||
if area.owner is Player:
|
||||
if area.owner is Player and area.name != "HammerHitbox":
|
||||
area.owner.damage()
|
||||
|
||||
func flag_die() -> void:
|
||||
|
@@ -22,7 +22,7 @@ func flag_die() -> void:
|
||||
queue_free()
|
||||
|
||||
func on_area_entered(area: Area2D) -> void:
|
||||
if area.owner is Player:
|
||||
if area.owner is Player and area.name != "HammerHitbox":
|
||||
area.owner.damage()
|
||||
|
||||
func play_sfx() -> void:
|
||||
|
@@ -53,3 +53,8 @@ func flag_die() -> void:
|
||||
func die() -> void:
|
||||
killed.emit()
|
||||
queue_free()
|
||||
|
||||
func die_from_hammer() -> void:
|
||||
AudioManager.play_sfx("hammer_hit", global_position)
|
||||
killed.emit()
|
||||
queue_free()
|
||||
|
@@ -37,3 +37,12 @@ func flag_die() -> void:
|
||||
Global.score += 500
|
||||
if score_note_adder != null:
|
||||
score_note_adder.spawn_note(500)
|
||||
|
||||
func die_from_hammer(obj: Node2D) -> void:
|
||||
var dir = sign(global_position.x - obj.global_position.x)
|
||||
if dir == 0:
|
||||
dir = [-1, 1].pick_random()
|
||||
DiscoLevel.combo_amount += 1
|
||||
AudioManager.play_sfx("hammer_hit", global_position)
|
||||
killed.emit(dir)
|
||||
queue_free()
|
||||
|
@@ -21,5 +21,5 @@ func flag_die() -> void:
|
||||
queue_free()
|
||||
|
||||
func on_area_entered(area: Area2D) -> void:
|
||||
if area.owner is Player:
|
||||
if area.owner is Player and area.name != "HammerHitbox":
|
||||
area.owner.damage()
|
||||
|
@@ -14,5 +14,5 @@ func on_body_entered(body: Node2D) -> void:
|
||||
|
||||
|
||||
func on_area_entered(area: Area2D) -> void:
|
||||
if area.owner is Player:
|
||||
if area.owner is Player and area.name != "HammerHitbox":
|
||||
area.owner.damage()
|
||||
|
@@ -43,7 +43,7 @@ func on_area_entered(area: Area2D) -> void:
|
||||
if area.owner.has_node("ShellDetection"):
|
||||
area.owner.die_from_object(self)
|
||||
elif area.owner is Player:
|
||||
if area.owner.is_invincible:
|
||||
if area.owner.is_invincible or area.name == "HammerHitbox":
|
||||
destroy()
|
||||
else:
|
||||
area.owner.damage()
|
||||
|
@@ -330,6 +330,7 @@ func _process(delta: float) -> void:
|
||||
if is_invincible:
|
||||
DiscoLevel.combo_meter = 100
|
||||
%Hammer.visible = has_hammer
|
||||
%HammerHitbox.collision_layer = has_hammer
|
||||
|
||||
func apply_gravity(delta: float) -> void:
|
||||
if in_water or flight_meter > 0:
|
||||
@@ -893,9 +894,6 @@ func hammer_get() -> void:
|
||||
$HammerTimer.start()
|
||||
AudioManager.set_music_override(AudioManager.MUSIC_OVERRIDES.HAMMER, 0, false)
|
||||
|
||||
func on_hammer_area_entered(area: Area2D) -> void:
|
||||
pass
|
||||
|
||||
func wing_get() -> void:
|
||||
AudioManager.set_music_override(AudioManager.MUSIC_OVERRIDES.WING, 0, false, false)
|
||||
flight_meter = 10
|
||||
|
@@ -38,6 +38,7 @@ const DEFAULT_SFX_LIBRARY := {
|
||||
"firework": "res://Assets/Audio/SFX/Firework.wav",
|
||||
"timer_beep": "res://Assets/Audio/SFX/TimerBeep.wav",
|
||||
"hachisuke": "res://Assets/Audio/SFX/Hachisuke.wav",
|
||||
"hammer_hit": "res://Assets/Audio/SFX/HammerHit.wav",
|
||||
"burner": "res://Assets/Audio/SFX/Burner.wav",
|
||||
"rank_up_1": "res://Assets/Audio/SFX/RankUpCBA.wav",
|
||||
"rank_up_2": "res://Assets/Audio/SFX/RankUpSP.wav",
|
||||
|
@@ -1,5 +1,5 @@
|
||||
extends Area2D
|
||||
|
||||
func area_entered(area: Area2D) -> void:
|
||||
if area.owner is Player and area.owner.state_machine.state.name != "Dead":
|
||||
if area.owner is Player and area.name != "HammerHitbox" and area.owner.state_machine.state.name != "Dead":
|
||||
area.owner.die(true)
|
||||
|
Reference in New Issue
Block a user