tcg/demo_game.gd

159 lines
4.5 KiB
GDScript3
Raw Normal View History

2025-01-25 11:57:55 +07:00
extends Control
2025-01-25 18:47:56 +07:00
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)
2025-01-25 11:57:55 +07:00
@export var player_1_deck: Array[Card]
@export var player_2_deck: Array[Card]
@onready var match_manager = $MatchManager
@onready var own_side = $Own
@onready var opponent_side = $Opponent
@onready var start_game_btn = $StartGameButton
2025-01-25 18:47:56 +07:00
var id_to_card: Dictionary = {}
2025-01-25 11:57:55 +07:00
var player_action_queue: Dictionary
var player_1_action: Action:
get:
return player_action_queue.get(MatchManager.PLAYER_1_ID)
set(value):
player_action_queue[MatchManager.PLAYER_1_ID] = value
var player_2_action: Action:
get:
return player_action_queue.get(MatchManager.PLAYER_2_ID)
set(value):
player_action_queue[MatchManager.PLAYER_2_ID] = value
2025-01-25 18:47:56 +07:00
var id
var signal_connected := false
func init(player_id: int) -> void:
id = player_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
2025-01-25 11:57:55 +07:00
match_manager.init({
MatchManager.PLAYER_1_ID: player_1_deck,
MatchManager.PLAYER_2_ID: player_2_deck
})
2025-01-25 18:47:56 +07:00
own_side.attach(match_manager, player_id == MatchManager.PLAYER_1_ID)
opponent_side.attach(match_manager, player_id == MatchManager.PLAYER_2_ID)
if !signal_connected:
match_manager.state_transitioned.connect(_on_match_manager_state_transitioned)
signal_connected = true
2025-01-25 11:57:55 +07:00
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)
2025-01-25 15:07:03 +07:00
print("Phase: ", Match.phase_to_str(transition.from), " -> ", Match.phase_to_str(transition.to))
2025-01-25 11:57:55 +07:00
func _on_start_game_button_button_up() -> void:
2025-01-25 18:47:56 +07:00
#match_manager.resolve({})
pass
func rpc_start_game() -> void:
2025-01-25 11:57:55 +07:00
match_manager.resolve({})
2025-01-25 18:47:56 +07:00
func rpc_own_play_card(id: String) -> void:
if !id.is_empty():
var card = id_to_card[id]
player_1_action = ActionPlayCard.new(card)
else:
player_1_action = ActionSkipCard.new()
print(self.id, " rpc_own_play_card", player_1_action, player_2_action)
if player_2_action:
match_manager.resolve(player_action_queue)
player_action_queue.clear()
2025-01-25 11:57:55 +07:00
func _on_own_play_card(card: Card) -> void:
2025-01-25 18:47:56 +07:00
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)
2025-01-25 11:57:55 +07:00
if player_2_action:
match_manager.resolve(player_action_queue)
player_action_queue.clear()
2025-01-25 18:47:56 +07:00
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()
2025-01-25 11:57:55 +07:00
func _on_opponent_play_card(card: Card) -> void:
2025-01-25 18:47:56 +07:00
if card:
player_2_action = ActionPlayCard.new(card)
opponent_played_card.emit(card)
else:
player_2_action = ActionSkipCard.new()
opponent_played_card.emit(null)
print(id, " _on_opponent_play_card", player_1_action, player_2_action)
2025-01-25 11:57:55 +07:00
if player_1_action:
match_manager.resolve(player_action_queue)
player_action_queue.clear()
2025-01-25 18:47:56 +07:00
func rpc_own_rps_move(move: String) -> void:
player_1_action = ActionRPSMove.new(move)
print(id, " rpc_own_rps_move", player_1_action, player_2_action, move)
if player_2_action:
match_manager.resolve(player_action_queue)
player_action_queue.clear()
2025-01-25 11:57:55 +07:00
func _on_own_rps_move(move: String) -> void:
player_1_action = ActionRPSMove.new(move)
2025-01-25 18:47:56 +07:00
own_played_rts.emit(move)
print(id, " _on_own_rps_move", player_1_action, player_2_action, move)
2025-01-25 11:57:55 +07:00
if player_2_action:
match_manager.resolve(player_action_queue)
player_action_queue.clear()
2025-01-25 18:47:56 +07:00
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()
2025-01-25 11:57:55 +07:00
func _on_opponent_rps_move(move: String) -> void:
player_2_action = ActionRPSMove.new(move)
2025-01-25 18:47:56 +07:00
opponent_played_rts.emit(move)
print(id, " rpc_opponent_rps_move", player_1_action, player_2_action, move)
2025-01-25 11:57:55 +07:00
if player_1_action:
match_manager.resolve(player_action_queue)
player_action_queue.clear()