feat: more multiplayer
This commit is contained in:
parent
3981646279
commit
6c6e1b3289
9 changed files with 429 additions and 104 deletions
112
demo_game.gd
112
demo_game.gd
|
|
@ -1,4 +1,10 @@
|
|||
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]
|
||||
|
|
@ -7,6 +13,8 @@ extends Control
|
|||
@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:
|
||||
|
|
@ -19,14 +27,30 @@ var player_2_action: Action:
|
|||
set(value):
|
||||
player_action_queue[MatchManager.PLAYER_2_ID] = value
|
||||
|
||||
func _ready() -> void:
|
||||
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
|
||||
|
||||
match_manager.init({
|
||||
MatchManager.PLAYER_1_ID: player_1_deck,
|
||||
MatchManager.PLAYER_2_ID: player_2_deck
|
||||
})
|
||||
own_side.attach(match_manager)
|
||||
opponent_side.attach(match_manager)
|
||||
match_manager.state_transitioned.connect(_on_match_manager_state_transitioned)
|
||||
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
|
||||
|
||||
var transition_history: Array[PhaseTransition] = []
|
||||
func _on_match_manager_state_transitioned(transition: PhaseTransition):
|
||||
|
|
@ -35,28 +59,100 @@ func _on_match_manager_state_transitioned(transition: PhaseTransition):
|
|||
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:
|
||||
player_1_action = ActionPlayCard.new(card)
|
||||
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()
|
||||
|
||||
func _on_opponent_play_card(card: Card) -> void:
|
||||
player_2_action = ActionPlayCard.new(card)
|
||||
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_opponent_play_card(card: Card) -> void:
|
||||
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)
|
||||
|
||||
if player_1_action:
|
||||
match_manager.resolve(player_action_queue)
|
||||
player_action_queue.clear()
|
||||
|
||||
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()
|
||||
|
||||
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 _on_opponent_rps_move(move: String) -> void:
|
||||
player_2_action = ActionRPSMove.new(move)
|
||||
opponent_played_rts.emit(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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue