diff options
author | metamuffin <metamuffin@disroot.org> | 2024-06-27 14:18:54 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-06-27 14:18:54 +0200 |
commit | 3d9398b552bee7615987cc177e14a21aba29689e (patch) | |
tree | b963142c13016c86fa5e2304e1b10ce97c34a16a | |
parent | ec6377cb004ae564a8ad2fd895f8aad09b0153c6 (diff) | |
download | hurrycurry-3d9398b552bee7615987cc177e14a21aba29689e.tar hurrycurry-3d9398b552bee7615987cc177e14a21aba29689e.tar.bz2 hurrycurry-3d9398b552bee7615987cc177e14a21aba29689e.tar.zst |
move map code to Map scene
-rw-r--r-- | client/game.gd | 53 | ||||
-rw-r--r-- | client/game.tscn | 5 | ||||
-rw-r--r-- | client/map/map.gd | 29 | ||||
-rw-r--r-- | client/map/map.tscn | 44 | ||||
-rw-r--r-- | client/map/progress.gd | 1 | ||||
-rw-r--r-- | client/menu/menu_background.gd | 6 | ||||
-rw-r--r-- | client/menu/menu_background.tscn | 5 | ||||
-rw-r--r-- | client/player/controllable_player.gd | 10 |
8 files changed, 67 insertions, 86 deletions
diff --git a/client/game.gd b/client/game.gd index 76ea21f0..b36b40a0 100644 --- a/client/game.gd +++ b/client/game.gd @@ -19,17 +19,19 @@ extends Node3D @onready var camera: FollowCamera = $FollowCamera @onready var mp: Multiplayer = $Multiplayer +@onready var map: Map = $Map @onready var marker: Marker = $Marker + var marker_target = Vector3(0,0,0) var player_id: int = -1 var item_names: Array = [] var tile_names: Array = [] +var tile_id_by_name: Dictionary = {} var tile_collide: Array = [] var tile_interact: Array = [] var item_idx_from_name: Dictionary = {} -var tile_by_pos: Dictionary = {} var players := {} @@ -56,6 +58,9 @@ func _ready(): tile_names = tile_names_ tile_collide = tile_collide_ tile_interact = tile_interact_ + tile_id_by_name = {} + for id in tile_names.size(): + tile_id_by_name[tile_names[id]] = id item_idx_from_name.clear() for i in range(item_names.size()): @@ -78,8 +83,7 @@ func _ready(): ) mp.set_tile.connect(set_tile) - - mp.remove_tile.connect(remove_tile_if_exists) + mp.remove_tile.connect(set_tile) mp.position.connect(func(player: int, pos: Vector2, rot: float): var player_instance: Player = players[player] @@ -98,7 +102,7 @@ func _ready(): ) mp.set_tile_item.connect(func(tile: Vector2i, item: int): - var t: Tile = tile_by_pos[str(tile)][1] + var t: Tile = map.get_tile_instance(tile) var i = ItemFactory.produce(item_names[item], t.item_base) add_child(i) i.name = item_names[item] @@ -106,7 +110,7 @@ func _ready(): ) mp.remove_tile_item.connect(func(tile: Vector2i): - var t: Tile = tile_by_pos[str(tile)][1] + var t: Tile = map.get_tile_instance(tile) t.take_item().queue_free() ) @@ -124,24 +128,24 @@ func _ready(): ) mp.take_item.connect(func(tile: Vector2i, player: int): - var t: Tile = tile_by_pos[str(tile)][1] + var t: Tile = map.get_tile_instance(tile) var p: Player = players[player] p.take_item(t) ) mp.put_item.connect(func(tile: Vector2i, player: int): - var t: Tile = tile_by_pos[str(tile)][1] + var t: Tile = map.get_tile_instance(tile) var p: Player = players[player] p.put_item(t) ) mp.set_progress.connect(func(tile: Vector2i, progress: float, warn: bool): - var t: Tile = tile_by_pos[str(tile)][1] + var t: Tile = map.get_tile_instance(tile) t.progress(progress, warn) ) mp.set_finished.connect(func(tile: Vector2i, warn: bool): - var t: Tile = tile_by_pos[str(tile)][1] + var t: Tile = map.get_tile_instance(tile) t.finish(warn) ) @@ -166,33 +170,16 @@ func _process(delta): marker.position = lerp(marker.position, marker_target, delta * 40.0) func get_tile_collision(pos: Vector2i) -> bool: - var t = tile_by_pos.get(str(pos)) + var t = map.get_tile_name(pos) if t == null: return true - else: return tile_collide[t[0]] + else: return tile_collide[tile_id_by_name[t]] func get_tile_interactive(pos: Vector2i) -> bool: - var t = tile_by_pos.get(str(pos)) + var t = map.get_tile_name(pos) if t == null: return false - else: return tile_interact[t[0]] - -func set_tile(tile: Vector2i, kind: int, neighbors: Array): - remove_tile_if_exists(tile) - var node_name = str(tile) - var tile_name: String = tile_names[kind] - neighbors = neighbors.map(func (x): return tile_names[x] if x != null else null) - var instance: Tile = TileFactory.produce(tile_name, node_name, neighbors) + else: return tile_interact[tile_id_by_name[t]] - instance.position = Vector3(tile[0], 0, tile[1]) - tile_by_pos[node_name] = [kind, instance] - add_child(instance) +func set_tile(tile: Vector2i, kind = null, neighbors = null): + if neighbors != null: neighbors = neighbors.map(func (x): return tile_names[x] if x != null else null) + map.set_tile(tile, tile_names[kind], neighbors) -func remove_tile_if_exists(pos: Vector2i): - var node_name = str(pos) - var current = tile_by_pos.get(node_name) - if current != null: - var tile: Tile = current[1] - if tile.item != null: - tile.item.queue_free() - tile_by_pos.erase(node_name) - tile.name += "_queued_free" - tile.queue_free() diff --git a/client/game.tscn b/client/game.tscn index cfbde85b..b93f6b68 100644 --- a/client/game.tscn +++ b/client/game.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=9 format=3 uid="uid://c6krh36hoqfg8"] +[gd_scene load_steps=10 format=3 uid="uid://c6krh36hoqfg8"] [ext_resource type="Script" path="res://game.gd" id="1_sftfn"] [ext_resource type="PackedScene" uid="uid://b31mlnao6ybt8" path="res://player/follow_camera.tscn" id="2_s8y6o"] [ext_resource type="PackedScene" uid="uid://c0euiv7duqfp4" path="res://player/marker.tscn" id="4_igl0o"] [ext_resource type="PackedScene" uid="uid://bg2d78ycorcqk" path="res://menu/scene_transition.tscn" id="5_yg6cl"] [ext_resource type="Script" path="res://multiplayer.gd" id="6_fbxu8"] +[ext_resource type="PackedScene" uid="uid://b4gone8fu53r7" path="res://map/map.tscn" id="6_prg6t"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_py7px"] ground_bottom_color = Color(0.0826605, 0.065772, 0.0461518, 1) @@ -43,3 +44,5 @@ visible = false [node name="SceneTransition" parent="." instance=ExtResource("5_yg6cl")] ingame = true + +[node name="Map" parent="." instance=ExtResource("6_prg6t")] diff --git a/client/map/map.gd b/client/map/map.gd new file mode 100644 index 00000000..1cd0bd30 --- /dev/null +++ b/client/map/map.gd @@ -0,0 +1,29 @@ +class_name Map +extends Node3D + +var tile_by_pos: Dictionary = {} + + +func get_tile_name(position: Vector2i): + var e = tile_by_pos[str(position)] + if e != null: return e[0] + else: return null +func get_tile_instance(position: Vector2i) -> Tile: + var e = tile_by_pos[str(position)] + if e != null: return e[1] + else: return null + +func set_tile(position: Vector2i, name: String, neighbors: Array = [null,null,null,null]) -> Tile: + var tile = TileFactory.produce(name, str(position), neighbors) + add_child(tile) + tile.position = Vector3(position.x, 0, position.y) + tile_by_pos[str(position)] = [name, tile] + return tile + +func remove_tile_if_exists(pos: Vector2i): + var tile = get_tile_instance(pos) + if tile == null: return + if tile.item != null: tile.item.queue_free() + tile_by_pos.erase(str(pos)) + tile.name += "_queued_free" + tile.queue_free() diff --git a/client/map/map.tscn b/client/map/map.tscn index 612729f4..df359214 100644 --- a/client/map/map.tscn +++ b/client/map/map.tscn @@ -1,44 +1,6 @@ -[gd_scene load_steps=2 format=3 uid="uid://duqkg22yre6ry"] +[gd_scene load_steps=2 format=3 uid="uid://b4gone8fu53r7"] -[sub_resource type="GDScript" id="GDScript_qftmc"] -script/source = "# Undercooked - a game about cooking -# Copyright 2024 nokoe -# Copyright 2024 tpart -# 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 <https://www.gnu.org/licenses/>. -# -class_name Map -extends Node3D - -var tile_by_pos: Dictionary = {} - -func update(pos, tile_name, neighbors): - var node_name = str(pos) - - if has_node(node_name): - queue_free_rename(get_node(node_name)) - - var instance: Tile = TileFactory.produce(tile_name, node_name, neighbors) - - instance.position = Vector3(pos[0], 0, pos[1]) - tile_by_pos[str(Vector2i(pos[0], pos[1]))] = instance - add_child(instance) - -func queue_free_rename(node: Node) -> void: - node.name += \"_queued_free\" - node.queue_free() -" +[ext_resource type="Script" path="res://map/map.gd" id="1_3en0a"] [node name="Map" type="Node3D"] -script = SubResource("GDScript_qftmc") +script = ExtResource("1_3en0a") diff --git a/client/map/progress.gd b/client/map/progress.gd index 4d6494f6..dd855a36 100644 --- a/client/map/progress.gd +++ b/client/map/progress.gd @@ -20,3 +20,4 @@ func set_progress(progress: float, bad: bool): var mat: ShaderMaterial = self.get_active_material(0) mat.set_shader_parameter("progress", progress) mat.set_shader_parameter("bad", bad) + diff --git a/client/menu/menu_background.gd b/client/menu/menu_background.gd index 1d9322f3..4304cdbf 100644 --- a/client/menu/menu_background.gd +++ b/client/menu/menu_background.gd @@ -20,6 +20,7 @@ const NULLS = [null,null,null,null] const BUCKETS = [[], ["floor","floor","floor","floor","tomato-crate", "raw-steak-crate"], ["table", "chair", "counter"], ["sink", "stove"]] @onready var environment: WorldEnvironment = $Environment +@onready var map: Map = $Map func _ready(): if !Global.on_vulkan(): @@ -32,7 +33,4 @@ func _ready(): var bucket = BUCKETS[int(floor(k * BUCKETS.size())) % BUCKETS.size()] if bucket.size() == 0: continue var tile_name = bucket[randi() % bucket.size()] - var tile = TileFactory.produce(tile_name, tile_name, NULLS) - - add_child(tile) - tile.position = Vector3(x, 0, y) + map.set_tile(Vector2i(x,y), tile_name) diff --git a/client/menu/menu_background.tscn b/client/menu/menu_background.tscn index dbc7010a..fefffef3 100644 --- a/client/menu/menu_background.tscn +++ b/client/menu/menu_background.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=10 format=3 uid="uid://l4vm07dtda4j"] +[gd_scene load_steps=11 format=3 uid="uid://l4vm07dtda4j"] [ext_resource type="Script" path="res://menu/menu_background.gd" id="1_ijsg0"] [ext_resource type="Shader" path="res://menu/menu_background.gdshader" id="3_5mp8y"] +[ext_resource type="PackedScene" uid="uid://b4gone8fu53r7" path="res://map/map.tscn" id="3_p80a7"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_uw50b"] sky_top_color = Color(0.55, 0.55, 0.55, 1) @@ -63,3 +64,5 @@ environment = SubResource("Environment_slkjl") transform = Transform3D(0.614606, 0.499662, -0.610408, -0.00282255, 0.775198, 0.631712, 0.78883, -0.386531, 0.477851, 6, -13, -11) mesh = SubResource("QuadMesh_fvp2p") surface_material_override/0 = SubResource("ShaderMaterial_gd87g") + +[node name="Map" parent="." instance=ExtResource("3_p80a7")] diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd index 32fa3135..7501ca0a 100644 --- a/client/player/controllable_player.gd +++ b/client/player/controllable_player.gd @@ -110,16 +110,14 @@ func update_position(new_position: Vector2, _new_rotation: float): position_ = new_position func interact(): - var tile_idx = str(target) - var data = game.tile_by_pos.get(tile_idx) - if data != null: - var t: Tile = data[1] + var tile = game.map.get_tile_instance(target) + if tile != null: game.marker.set_interactive(game.get_tile_interactive(target)) game.marker.visible = true - game.marker_target = t.item_base.global_position + game.marker_target = tile.item_base.global_position if Input.is_action_just_pressed("interact"): game.mp.send_interact(target, true) - t.interact() + tile.interact() elif Input.is_action_just_released("interact"): game.mp.send_interact(target, false) else: |