tcg/player_side.gd

82 lines
2.7 KiB
GDScript3
Raw Normal View History

2025-01-25 11:57:55 +07:00
extends Control
signal play_card(card: Card)
signal rps_move(move: String)
@export var player_id: int
@export var deck: Container
@export var monster_name_label: Label
@export var monster_health_label: Label
@export var incoming_damage_label: Label
@export var energy_label: Label
var match_manager: MatchManager
2025-01-25 18:47:56 +07:00
var show_buttons: bool
var signal_connected: bool
2025-01-25 11:57:55 +07:00
2025-01-25 18:47:56 +07:00
func attach(match_manager: MatchManager, show_buttons: bool = true):
self.show_buttons = show_buttons
2025-01-25 11:57:55 +07:00
self.match_manager = match_manager
2025-01-25 18:47:56 +07:00
if !signal_connected:
match_manager.state_transitioned.connect(_on_update)
signal_connected = true
2025-01-25 11:57:55 +07:00
func _on_update(transition):
for child in deck.get_children():
child.queue_free()
var player: MatchPlayer = match_manager.players.get(player_id) as MatchPlayer
if not player:
return
energy_label.text = "Energy: " + str(player.energy)
var monster = player.monster
if monster:
monster_name_label.text = "Name: " + monster.card.id
monster_health_label.text = "Health: " + str(monster.health)
2025-01-25 15:07:03 +07:00
incoming_damage_label.text = "Incoming Damage: " + str(monster.health_delta)
2025-01-25 11:57:55 +07:00
if match_manager.phase in [Match.Phase.SUMMON, Match.Phase.SUPPORT_1, Match.Phase.SUPPORT_2]:
2025-01-25 18:47:56 +07:00
if (
match_manager.phase != Match.Phase.SUMMON && show_buttons
) or (
match_manager.phase == Match.Phase.SUMMON and player.monster and player.monster.health > 0 && show_buttons
):
var skip_btn = Button.new()
skip_btn.text = "Skip"
skip_btn.button_up.connect(func (): play_card.emit(null))
deck.add_child(skip_btn)
2025-01-25 11:57:55 +07:00
for card: Card in player.hand:
2025-01-25 18:47:56 +07:00
#if match_manager.phase == Match.Phase.SUMMON and card is not MonsterCard:
#continue
#if (match_manager.phase == Match.Phase.SUPPORT_1 or match_manager.phase == Match.Phase.SUPPORT_2) and card is not SupportCard:
#continue
#if match_manager.phase == Match.Phase.SUPPORT_1 and card.type == "red":
#continue
if !show_buttons :
2025-01-25 11:57:55 +07:00
continue
2025-01-25 18:47:56 +07:00
2025-01-25 11:57:55 +07:00
var btn = Button.new()
btn.text = card.id
btn.button_up.connect(func (): play_card.emit(card))
btn.disabled = (
card is MonsterCard and match_manager.phase != Match.Phase.SUMMON
) or (
card is SupportCard and match_manager.phase != Match.Phase.SUPPORT_1 and match_manager.phase != Match.Phase.SUPPORT_2
) or (
card is SupportCard and card.type == "red" and match_manager.phase != Match.Phase.SUPPORT_2
2025-01-25 18:47:56 +07:00
) or (
card is MonsterCard and match_manager.phase == Match.Phase.SUMMON and player.monster and player.monster.health > 0
2025-01-25 11:57:55 +07:00
)
deck.add_child(btn)
if match_manager.phase == Match.Phase.RPS:
for move in ["rock", "paper", "scissors"]:
2025-01-25 18:47:56 +07:00
if !show_buttons:
continue
2025-01-25 11:57:55 +07:00
var btn = Button.new()
btn.text = move
btn.button_up.connect(func (): rps_move.emit(move))
deck.add_child(btn)