Refactored to allow hotseat and multiplayer. TODO: Create interface class for webrtc/enet multiplayer
This commit is contained in:
parent
d688eaf9c6
commit
5fe8f22ccb
27 changed files with 798 additions and 135 deletions
119
UI/BuildMenu.gd
119
UI/BuildMenu.gd
|
|
@ -11,20 +11,127 @@ const default_insects = {
|
|||
preload("res://Tile/Prefabs/Beetle.tres"): 2,
|
||||
preload("res://Tile/Prefabs/Grasshopper.tres"): 3,
|
||||
preload("res://Tile/Prefabs/Spider.tres"): 2,
|
||||
preload("res://Tile/Prefabs/Ladybug.tres"): 1,
|
||||
preload("res://Tile/Prefabs/Mosquito.tres"): 1,
|
||||
preload("res://Tile/Prefabs/Pillbug.tres"): 1
|
||||
#preload("res://Tile/Prefabs/Ladybug.tres"): 1,
|
||||
#preload("res://Tile/Prefabs/Mosquito.tres"): 1,
|
||||
#preload("res://Tile/Prefabs/Pillbug.tres"): 1
|
||||
}
|
||||
|
||||
@onready var local_bee_button: InsectButton = $PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2/LocalPlayerInsects/BeeButton
|
||||
@onready var remote_bee_button: InsectButton = $PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2/RemotePlayerInsects/BeeButton
|
||||
var local_bee_button: InsectButton
|
||||
var remote_bee_button: InsectButton
|
||||
|
||||
@rpc("call_local", "authority", "reliable")
|
||||
func reverse_enemy_list() -> void:
|
||||
for child in remote_player_insects.get_children():
|
||||
remote_player_insects.move_child(child, 0)
|
||||
pass
|
||||
|
||||
@rpc("call_local", "authority", "reliable")
|
||||
func add_spacer(is_black: bool, peer_id: int = 1) -> void:
|
||||
var seperator = VSeparator.new()
|
||||
|
||||
if GameData.is_hot_seat:
|
||||
# left = white, right = black
|
||||
if not is_black:
|
||||
local_player_insects.add_child(seperator)
|
||||
else:
|
||||
remote_player_insects.add_child(seperator)
|
||||
else:
|
||||
if peer_id == multiplayer.get_unique_id():
|
||||
local_player_insects.add_child(seperator)
|
||||
else:
|
||||
remote_player_insects.add_child(seperator)
|
||||
|
||||
#local_player_insects.add_spacer(false)
|
||||
|
||||
@rpc("call_local", "authority", "reliable")
|
||||
func add_insect(resource_path: String, count: int, is_black: bool, peer_id: int = 1) -> void:
|
||||
var resource = load(resource_path)
|
||||
|
||||
var btn = INSECT_BUTTON.instantiate()
|
||||
btn.insect_resource = resource
|
||||
btn.tile_count = count
|
||||
btn.is_black = is_black
|
||||
|
||||
btn.set_multiplayer_authority(peer_id, true)
|
||||
|
||||
# TODO: if authority, put local, else put remote
|
||||
# We can use authority, in hotseat authority will always be true
|
||||
# if hotseat -> white left, black right
|
||||
# else -> local left, remote right
|
||||
if GameData.is_hot_seat:
|
||||
if not is_black:
|
||||
local_player_insects.add_child(btn)
|
||||
else:
|
||||
remote_player_insects.add_child(btn)
|
||||
|
||||
else:
|
||||
print("@")
|
||||
print(peer_id)
|
||||
print(multiplayer.get_unique_id())
|
||||
if peer_id == multiplayer.get_unique_id():
|
||||
local_player_insects.add_child(btn)
|
||||
else:
|
||||
remote_player_insects.add_child(btn)
|
||||
|
||||
|
||||
@rpc("call_local", "authority", "reliable")
|
||||
func setup_colors(is_host_black: bool) -> void:
|
||||
if GameData.is_hot_seat:
|
||||
local_player_insects.name = "White"
|
||||
remote_player_insects.name = "Black"
|
||||
return
|
||||
|
||||
|
||||
if multiplayer.is_server():
|
||||
GameData.is_player_black = is_host_black
|
||||
else:
|
||||
GameData.is_player_black = !is_host_black
|
||||
|
||||
if not GameData.is_player_black:
|
||||
local_player_insects.name = "White"
|
||||
remote_player_insects.name = "Black"
|
||||
else:
|
||||
local_player_insects.name = "Black"
|
||||
remote_player_insects.name = "White"
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
if multiplayer.is_server():
|
||||
setup_colors.rpc(false)
|
||||
|
||||
add_insect.rpc("res://Tile/Prefabs/Bee.tres", 1, false, 1)
|
||||
add_spacer.rpc(false, 1)
|
||||
|
||||
add_insect.rpc("res://Tile/Prefabs/Bee.tres", 1, true, GameData.peer_id)
|
||||
add_spacer.rpc(true, GameData.peer_id)
|
||||
|
||||
#remote_bee_button.set_authority.rpc(GameData.peer_id)
|
||||
for key in default_insects.keys():
|
||||
add_insect.rpc(key.get_path(), default_insects[key], false, 1)
|
||||
add_insect.rpc(key.get_path(), default_insects[key], true, GameData.peer_id)
|
||||
|
||||
#add_insect.rpc("res://Tile/Prefabs/Ant.tres", 1, false, GameData.peer_id)
|
||||
reverse_enemy_list.rpc()
|
||||
return
|
||||
|
||||
if GameData.is_player_black:
|
||||
# Rename LocalPlayerInsects and RemotePlayerInsects
|
||||
local_player_insects.name = "Black"
|
||||
remote_player_insects.name = "White"
|
||||
else:
|
||||
local_player_insects.name = "White"
|
||||
remote_player_insects.name = "Black"
|
||||
|
||||
local_bee_button = local_player_insects.get_node("Bee")
|
||||
remote_bee_button = remote_player_insects.get_node("Bee")
|
||||
|
||||
#var unique_array = default_insects.duplicate().map()
|
||||
local_bee_button.update_color(GameData.is_player_black)
|
||||
remote_bee_button.update_color(!GameData.is_player_black)
|
||||
|
||||
if multiplayer.is_server():
|
||||
remote_bee_button.set_authority.rpc(GameData.peer_id)
|
||||
|
||||
for key in default_insects.keys():
|
||||
#print(default_insects[key])
|
||||
var btn = INSECT_BUTTON.instantiate()
|
||||
|
|
@ -40,6 +147,8 @@ func _ready():
|
|||
btn.is_black = !GameData.is_player_black
|
||||
remote_player_insects.add_child(btn)
|
||||
remote_player_insects.move_child(btn, 0)
|
||||
if multiplayer.is_server():
|
||||
btn.set_authority.rpc(GameData.peer_id)
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue