Swarm/UI/BuildMenu.gd

159 lines
4.9 KiB
GDScript3
Raw Normal View History

extends Control
@onready var local_player_insects = $PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2/LocalPlayerInsects
@onready var remote_player_insects = $PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2/RemotePlayerInsects
const INSECT_BUTTON = preload("res://UI/insect_button.tscn")
const default_insects = {
#preload("res://Tile/Prefabs/Bee.tres"): 1,
preload("res://Tile/Prefabs/Ant.tres"): 3,
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
}
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()
btn.insect_resource = key
btn.tile_count = default_insects[key]
btn.is_black = GameData.is_player_black
local_player_insects.add_child(btn)
for key in default_insects.keys():
var btn = INSECT_BUTTON.instantiate()
btn.insect_resource = key
btn.tile_count = default_insects[key]
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):
if Input.is_action_just_pressed("deselect_tile"):
GameEvents.insect_placement_cancelled.emit()
pass
pass