extends Control class_name DemoGame signal own_played_card(card: Card) signal opponent_played_card(card: Card) signal own_played_rts(move: String) signal opponent_played_rts(move: String) @export var player_1_deck: Array[Card] @export var player_2_deck: Array[Card] @onready var match_manager: MatchManager = $MatchManager @onready var own_side = $Own @onready var opponent_side = $Opponent @onready var start_game_btn = $StartGameButton var id_to_card: Dictionary = {} var player_action_queue: Dictionary var player_1_action: Action: get: return player_action_queue.get(own_side.player_id) set(value): player_action_queue[own_side.player_id] = value var player_2_action: Action: get: return player_action_queue.get(opponent_side.player_id) set(value): player_action_queue[opponent_side.player_id] = value var id var signal_connected := false func _ready() -> void: _update_phase_info(Match.Phase.PREGAME) func init(player_id: int) -> void: id = player_id own_side.player_id = player_id opponent_side.player_id = MatchManager.PLAYER_2_ID if player_id == MatchManager.PLAYER_1_ID else MatchManager.PLAYER_1_ID id_to_card.clear() var cards = player_1_deck.duplicate() cards.append_array(player_2_deck) for card in cards: if card.id not in id_to_card: id_to_card[card.id] = card print(match_manager.phase) match_manager.init({ MatchManager.PLAYER_1_ID: player_1_deck, MatchManager.PLAYER_2_ID: player_2_deck }, own_side.player_id, opponent_side.player_id) own_side.attach(match_manager, true) opponent_side.attach(match_manager, false) if !signal_connected: match_manager.state_transitioned.connect(_on_match_manager_state_transitioned) signal_connected = true var transition_history: Array[PhaseTransition] = [] func _on_match_manager_state_transitioned(transition: PhaseTransition): start_game_btn.visible = match_manager.phase == Match.Phase.PREGAME transition_history.append(transition) _update_phase_info(transition.to) print("Phase: ", Match.phase_to_str(transition.from), " -> ", Match.phase_to_str(transition.to)) func _on_start_game_button_button_up() -> void: #match_manager.resolve({}) pass func rpc_start_game() -> void: match_manager.resolve({}) func _on_own_play_card(card: Card) -> void: if card: player_1_action = ActionPlayCard.new(card) own_played_card.emit(card) else: player_1_action = ActionSkipCard.new() own_played_card.emit(null) print(id, " _on_own_play_card", player_1_action, player_2_action) if player_2_action: match_manager.resolve(player_action_queue) player_action_queue.clear() func rpc_opponent_play_card(id: String) -> void: if !id.is_empty(): var card = id_to_card[id] player_2_action = ActionPlayCard.new(card) else: player_2_action = ActionSkipCard.new() print(self.id , " rpc_opponent_play_card", player_1_action, player_2_action) if player_1_action: match_manager.resolve(player_action_queue) player_action_queue.clear() func _on_own_rps_move(move: String) -> void: player_1_action = ActionRPSMove.new(move) own_played_rts.emit(move) print(id, " _on_own_rps_move", player_1_action, player_2_action, move) if player_2_action: match_manager.resolve(player_action_queue) player_action_queue.clear() func rpc_opponent_rps_move(move: String) -> void: player_2_action = ActionRPSMove.new(move) print(id, " rpc_opponent_rps_move", player_1_action, player_2_action, move) if player_1_action: match_manager.resolve(player_action_queue) player_action_queue.clear() func _update_phase_info(phase: Match.Phase): var phaseHeaders: Container = get_node("%PhaseInfo/PhaseHeader") for child: Label in phaseHeaders.get_children(): child.modulate = Color.DIM_GRAY var target = phaseHeaders.get_node(Match.phase_to_str(phase)) phaseHeaders.visible = target != null if target: target.modulate = Color.WHITE