sunder/scenes/multiplayer/match/scripts/modes/rabbit.gd
2026-02-18 18:33:17 -05:00

42 lines
1.5 KiB
GDScript

extends "res://scenes/multiplayer/match/scripts/mode.gd"
var match:Match
func setup(p_match:Match) -> void:
var flag:Flag = Flag.instantiate()
p_match.objective_spawner.add_child(flag)
var spawn := p_match.map.get_spawn_position("objectives")
flag.global_position = spawn
flag.respawn_timer.timeout.connect(func() -> void:
if spawn:
flag.waypoint.text = ""
flag.global_position = spawn
flag.state = flag.FlagState.ON_STAND
)
p_match.teams.add_teams(["rabbit", "chasers"])
flag.grabbed.connect(
func(carry:FlagHolder) -> void:
carry.owner.hud.objective_label.set_visible(true)
p_match.switch_team(carry.owner.peer_id, "rabbit")
flag.respawn_timer.stop()
)
flag.dropped.connect(
func(carry:FlagHolder) -> void:
carry.owner.hud.objective_label.set_visible(false)
p_match.switch_team(carry.owner.peer_id, "chasers")
flag.respawn_timer.start()
)
p_match.scoreboard.add_child(
RabbitScoringComponent.new(p_match.scoreboard, flag))
p_match.scoreboard.add_child(
DeathmatchScoringComponent.new(p_match.scoreboard, p_match.player_spawner))
p_match.player_spawner.child_entered_tree.connect(func(player:Player) -> void:
p_match.teams["chasers"].add(player.peer_id, player.username)
player.damage.connect(_rabbit_damage_handler)
)
func _rabbit_damage_handler(source: Node, target: Node, amount: float) -> void:
assert(target.find_children("*", "Health"))
if source == target or source.team_id != target.team_id:
target.health.damage.rpc(amount, source.peer_id)