171 lines
5.4 KiB
GDScript
171 lines
5.4 KiB
GDScript
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():
|
|
GameEvents.game_started.connect(_on_game_started)
|
|
|
|
func _on_game_started() -> void:
|
|
if multiplayer.is_server():
|
|
print("HOST BLACK?")
|
|
print(GameData.is_host_black)
|
|
setup_colors.rpc(GameData.is_host_black)
|
|
|
|
add_insect.rpc("res://Tile/Prefabs/Bee.tres", 1, GameData.is_host_black, 1)
|
|
add_spacer.rpc(GameData.is_host_black, 1)
|
|
|
|
add_insect.rpc("res://Tile/Prefabs/Bee.tres", 1, !GameData.is_host_black, GameData.peer_id)
|
|
add_spacer.rpc(!GameData.is_host_black, GameData.peer_id)
|
|
|
|
var insects = default_insects.duplicate()
|
|
|
|
if GameData.use_ladybug_extension:
|
|
insects[preload("res://Tile/Prefabs/Ladybug.tres")] = 1
|
|
if GameData.use_mosquito_extension:
|
|
insects[preload("res://Tile/Prefabs/Mosquito.tres")] = 1
|
|
if GameData.use_pillbug_extension:
|
|
insects[preload("res://Tile/Prefabs/Pillbug.tres")] = 1
|
|
|
|
#remote_bee_button.set_authority.rpc(GameData.peer_id)
|
|
for key in insects.keys():
|
|
add_insect.rpc(key.get_path(), insects[key], GameData.is_host_black, 1)
|
|
add_insect.rpc(key.get_path(), insects[key], !GameData.is_host_black, 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)
|
|
|
|
func _input(event):
|
|
if Input.is_action_just_pressed("deselect_tile"):
|
|
GameEvents.insect_placement_cancelled.emit()
|
|
pass
|
|
pass
|