chore: 搭建GameLoopManager架构

This commit is contained in:
2026-05-25 17:40:53 +08:00
parent 28780e3303
commit ed598d837c
+54 -2
View File
@@ -9,14 +9,19 @@ var players_data: Dictionary[int, Dictionary]
var reaction_area: Dictionary[int, Array]
var card_order: Array[int]
var deck_cards: Dictionary[String, int]
var deck_cards_keys: Array[String] = deck_cards.keys()
var max_hp: int
var game_started: bool
var game_round: int
func create_server(playern: int) -> void:
max_player_num = playern
player_num = 1
if peer.create_server(GameManager.port, playern) != OK:
return
setup_multiplayer()
add_player(1)
func create_client(ip: String) -> void:
@@ -32,11 +37,13 @@ func setup_multiplayer() -> void:
func _on_peer_connected(id: int) -> void:
add_player(id)
if multiplayer.is_server():
add_player(id)
func _on_peer_disconnected(id: int):
remove_player(id)
if multiplayer.is_server() and players_data.has(id):
remove_player(id)
func add_player(id: int) -> void:
@@ -64,9 +71,54 @@ func server_start_game() -> void:
if player_num <= max_player_num:
return
if multiplayer.is_server():
game_round = 1
client_start_game.rpc()
@rpc("any_peer", "call_local", "reliable")
func client_start_game() -> void:
pass
func random_card() -> String:
if deck_cards.size() == 0:
return ""
var card: String = deck_cards_keys[randi_range(0, deck_cards_keys.size() - 1)]
deck_cards[card] -= 1
if deck_cards[card] <= 0:
deck_cards.erase(card)
return card
func setup_deal_card() -> void:
for id in players_id:
for i in range(8):
var card: String = random_card()
if card == "": return
players_data[id]["cards"].append(card)
func round_deal_card(id: int) -> void:
if card_order.find(id) == -1: return
if game_round == 1 and card_order.find(id) <= 2:
for i in range(3):
var card: String = random_card()
if card == "": return
players_data[id]["cards"].append(card)
else:
for i in range(2):
var card: String = random_card()
if card == "": return
players_data[id]["cards"].append(card)
func reaction_settle(id: int) -> void:
pass
func settle_round() -> void:
game_round += 1
func is_game_ended() -> bool:
return false