# Undercooked - a game about cooking # Copyright 2024 nokoe # Copyright 2024 metamuffin # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, version 3 of the License only. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # class_name Game extends Node3D @onready var camera: FollowCamera = $FollowCamera @onready var map: Map = $Map @onready var marker: Marker = $Marker var marker_target = Vector3(0,0,0) var players := {} # Called when the node enters the scene tree for the first time. func _ready(): Multiplayer.connect_client() await Multiplayer.init if Multiplayer.player_id == -1: push_error("multiplayer has not been initialized") Multiplayer.connect("add_player", func(player: int, player_name: String, pos: Vector2, character: int): var player_instance: Player if player == Multiplayer.player_id: player_instance = ControllablePlayer.new(player, player_name, pos, character, self) camera.target = player_instance else: player_instance = Player.new(player, player_name, pos, character, self) players[player] = player_instance add_child(player_instance) ) Multiplayer.connect("position", func(player: int, pos: Vector2, rot: float): var player_instance: Player = players[player] player_instance.update_position(pos, rot) ) Multiplayer.connect("remove_player", func(id: int): var player: Player = players.get(id) if player != null: if player.hand != null: player.hand.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 = ItemFactory.produce(item, t.item_base) add_child(i) i.name = Multiplayer.item_names[item] t.set_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 = ItemFactory.produce(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.connect("set_progress", func(tile: Vector2i, progress: float, warn: bool): var t: FullTile = map.tile_by_pos[str(tile)] t.progress(progress, warn) ) Multiplayer.connect("set_finished", func(tile: Vector2i, warn: bool): var t: FullTile = map.tile_by_pos[str(tile)] t.finish(warn) ) Multiplayer.send_join("Blub", 1) func _process(delta): marker.position = lerp(marker.position, marker_target, delta * 40.0)