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