class_name Game extends Node3D @onready var camera: FollowCamera = $FollowCamera @onready var map: Map = $Map @onready var marker: Node3D = $Marker var marker_target = Vector3(0,0,0) var players := {} # Called when the node enters the scene tree for the first time. func _ready(): await Multiplayer.init if Multiplayer.player_id == -1: push_error("multiplayer has not been initialized") Multiplayer.connect("add_player", func(player: int, name: String, pos: Vector2, character: int): var player_instance: Player if player == Multiplayer.player_id: player_instance = ControllablePlayer.new(player, name, pos, character, self) camera.target = player_instance else: player_instance = Player.new(player, name, pos, character, self) players[player] = player_instance add_child(player_instance) ) Multiplayer.connect("position", func(player: int, position: Vector2, rotation: float): var player_instance: Player = players[player] player_instance.update_position(position, rotation) ) Multiplayer.connect("remove_player", func(id: int): var player: Player = players.get(id) if player != null: if player.hand != null: player.hand.queue_free() players.erase(id) player.queue_free() ) Multiplayer.connect("set_tile_item", func(tile: Vector2i, item: int): var t: Floor = map.tile_by_pos[str(tile)] var i = Item.new(item, t.item_base) add_child(i) i.name = Multiplayer.item_names[item] t.put_item(i) ) Multiplayer.connect("remove_tile_item", func(tile: Vector2i): var t: Floor = map.tile_by_pos[str(tile)] t.take_item().queue_free() ) Multiplayer.connect("set_player_item", func(player: int, item: int): var p: Player = players[player] var i = Item.new(item, p.hand_base) add_child(i) i.name = Multiplayer.item_names[item] p.set_item(i) ) Multiplayer.connect("remove_player_item", func(player: int): var p: Player = players[player] p.remove_item().queue_free() ) Multiplayer.connect("take_item", func(tile: Vector2i, player: int): var t: Floor = map.tile_by_pos[str(tile)] var p: Player = players[player] p.take_item(t) ) Multiplayer.connect("put_item", func(tile: Vector2i, player: int): var t: FullTile = map.tile_by_pos[str(tile)] var p: Player = players[player] p.put_item(t) ) Multiplayer.send_join("Blub", 1) func _process(delta): marker.position = lerp(marker.position, marker_target, delta * 40.0)