133 lines
2.7 KiB
GDScript
133 lines
2.7 KiB
GDScript
extends Node
|
|
|
|
var peer: ENetMultiplayerPeer = ENetMultiplayerPeer.new()
|
|
|
|
var max_player_num: int
|
|
var player_num: int = 0
|
|
var players_id: Array[int]
|
|
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:
|
|
if peer.create_client(ip, GameManager.port) != OK:
|
|
return
|
|
setup_multiplayer()
|
|
|
|
|
|
func setup_multiplayer() -> void:
|
|
multiplayer.multiplayer_peer = peer
|
|
multiplayer.peer_connected.connect(_on_peer_connected)
|
|
multiplayer.peer_disconnected.connect(_on_peer_disconnected)
|
|
|
|
|
|
func _on_peer_connected(id: int) -> void:
|
|
if multiplayer.is_server():
|
|
add_player(id)
|
|
|
|
|
|
func _on_peer_disconnected(id: int):
|
|
if multiplayer.is_server() and players_data.has(id):
|
|
remove_player(id)
|
|
|
|
|
|
func add_player(id: int) -> void:
|
|
if player_num >= max_player_num:
|
|
return
|
|
player_num += 1
|
|
players_data[id] = {
|
|
"id": id,
|
|
"nickname": "Player%d" % [player_num],
|
|
"cards": [],
|
|
"hp": max_hp,
|
|
}
|
|
reaction_area[id] = []
|
|
players_id.append(id)
|
|
|
|
|
|
func remove_player(id: int) -> void:
|
|
player_num -= 1
|
|
players_data.erase(id)
|
|
reaction_area.erase(id)
|
|
players_id.erase(id)
|
|
|
|
|
|
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_id(id: int) -> bool:
|
|
|
|
return false
|
|
|
|
|
|
func reaction_settle() -> bool:
|
|
|
|
return false
|
|
|
|
|
|
func settle_round() -> void:
|
|
while reaction_settle():
|
|
pass
|
|
game_round += 1
|
|
|
|
|
|
func is_game_ended() -> bool:
|
|
return false
|