aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-06-25 15:22:03 +0200
committermetamuffin <metamuffin@disroot.org>2024-06-25 15:22:03 +0200
commitf961c1f8d25f479d8b91ac537f3a91ab0adc68b1 (patch)
treefaf6a3297bdaa449b70a18db8e0d1d2132b99dd0
parentfb063266454462571596931b40560bf3992f7f16 (diff)
parent4c6b38bb85d5211df01ee4f9e14a613dbe21be6d (diff)
downloadhurrycurry-f961c1f8d25f479d8b91ac537f3a91ab0adc68b1.tar
hurrycurry-f961c1f8d25f479d8b91ac537f3a91ab0adc68b1.tar.bz2
hurrycurry-f961c1f8d25f479d8b91ac537f3a91ab0adc68b1.tar.zst
Merge branch 'master' of codeberg.org:metamuffin/undercooked
-rw-r--r--client/game.gd12
-rw-r--r--client/map/item_factory.gd4
-rw-r--r--client/map/items/burned.gd28
-rw-r--r--client/map/items/burned.resbin0 -> 7297 bytes
-rw-r--r--client/map/items/burned.tscn10
-rw-r--r--client/map/items/exterior_tree.gd24
-rw-r--r--client/map/items/grass.gd23
-rw-r--r--client/map/items/plate_fill.gd27
-rw-r--r--client/map/items/plate_fill.resbin0 -> 710 bytes
-rw-r--r--client/map/items/plate_fill.tscn12
-rw-r--r--client/map/items/tomato_soup_plate.gd21
-rw-r--r--client/map/map.gd2
-rw-r--r--client/map/tile_factory.gd6
-rw-r--r--client/map/tiles/bark.tres12
-rw-r--r--client/map/tiles/bark.webpbin0 -> 7132 bytes
-rw-r--r--client/map/tiles/bark.webp.import35
-rw-r--r--client/map/tiles/bark_normal.webpbin0 -> 8614 bytes
-rw-r--r--client/map/tiles/bark_normal.webp.import35
-rw-r--r--client/map/tiles/floor.gd60
-rw-r--r--client/map/tiles/leaves.tres9
-rw-r--r--client/map/tiles/leaves.webpbin0 -> 15222 bytes
-rw-r--r--client/map/tiles/leaves.webp.import35
-rw-r--r--client/map/tiles/tile.gd76
-rw-r--r--client/map/tiles/tree_1.resbin0 -> 332485 bytes
-rw-r--r--client/map/tiles/tree_1.tscn10
-rw-r--r--client/map/tiles/tree_2.resbin0 -> 305658 bytes
-rw-r--r--client/map/tiles/tree_2.tscn10
-rw-r--r--client/map/tiles/tree_3.resbin0 -> 259939 bytes
-rw-r--r--client/map/tiles/tree_3.tscn10
-rw-r--r--client/map/tiles/tree_4.resbin0 -> 247791 bytes
-rw-r--r--client/map/tiles/tree_4.tscn10
-rw-r--r--client/map/tiles/tree_5.resbin0 -> 82811 bytes
-rw-r--r--client/map/tiles/tree_5.tscn10
-rw-r--r--client/player/controllable_player.gd2
-rw-r--r--client/player/player.gd4
35 files changed, 418 insertions, 69 deletions
diff --git a/client/game.gd b/client/game.gd
index 74842768..f3c2f81c 100644
--- a/client/game.gd
+++ b/client/game.gd
@@ -62,7 +62,7 @@ func _ready():
)
mp.connect("set_tile_item", func(tile: Vector2i, item: int):
- var t: Floor = map.tile_by_pos[str(tile)]
+ var t: Tile = map.tile_by_pos[str(tile)]
var i = ItemFactory.produce(mp.item_names[item], t.item_base)
add_child(i)
i.name = mp.item_names[item]
@@ -70,7 +70,7 @@ func _ready():
)
mp.connect("remove_tile_item", func(tile: Vector2i):
- var t: Floor = map.tile_by_pos[str(tile)]
+ var t: Tile = map.tile_by_pos[str(tile)]
t.take_item().queue_free()
)
@@ -88,24 +88,24 @@ func _ready():
)
mp.connect("take_item", func(tile: Vector2i, player: int):
- var t: Floor = map.tile_by_pos[str(tile)]
+ var t: Tile = map.tile_by_pos[str(tile)]
var p: Player = players[player]
p.take_item(t)
)
mp.connect("put_item", func(tile: Vector2i, player: int):
- var t: Floor = map.tile_by_pos[str(tile)]
+ var t: Tile = map.tile_by_pos[str(tile)]
var p: Player = players[player]
p.put_item(t)
)
mp.connect("set_progress", func(tile: Vector2i, progress: float, warn: bool):
- var t: Floor = map.tile_by_pos[str(tile)]
+ var t: Tile = map.tile_by_pos[str(tile)]
t.progress(progress, warn)
)
mp.connect("set_finished", func(tile: Vector2i, warn: bool):
- var t: Floor = map.tile_by_pos[str(tile)]
+ var t: Tile = map.tile_by_pos[str(tile)]
t.finish(warn)
)
diff --git a/client/map/item_factory.gd b/client/map/item_factory.gd
index 863a079d..86e69d1d 100644
--- a/client/map/item_factory.gd
+++ b/client/map/item_factory.gd
@@ -66,5 +66,9 @@ static func produce(name: String, owned_by: Node3D) -> Item:
return LeekTomatoJuicePot.new(owned_by)
"tomato-soup-pot":
return TomatoSoupPot.new(owned_by)
+ "tomato-soup-plate":
+ return TomatoSoupPlate.new(owned_by)
+ "burned":
+ return Burned.new(owned_by)
var t:
return GenericItem.new(owned_by, t)
diff --git a/client/map/items/burned.gd b/client/map/items/burned.gd
new file mode 100644
index 00000000..5c98817a
--- /dev/null
+++ b/client/map/items/burned.gd
@@ -0,0 +1,28 @@
+# Undercooked - a game about cooking
+# Copyright 2024 nokoe
+#
+# 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 Burned
+extends Item
+
+func _init(owned_by_: Node3D):
+ super(owned_by_)
+ var steam: CPUParticles3D = load("res://map/items/steam.tscn").instantiate()
+ steam.emitting = true
+ steam.color = Color(0., 0., 0.)
+ add_child(load("res://map/items/burned.tscn").instantiate())
+ base.add_child(steam)
+
+static func base_position() -> Vector3:
+ return Vector3(0., .2, 0.)
diff --git a/client/map/items/burned.res b/client/map/items/burned.res
new file mode 100644
index 00000000..b8150bc7
--- /dev/null
+++ b/client/map/items/burned.res
Binary files differ
diff --git a/client/map/items/burned.tscn b/client/map/items/burned.tscn
new file mode 100644
index 00000000..23cd450a
--- /dev/null
+++ b/client/map/items/burned.tscn
@@ -0,0 +1,10 @@
+[gd_scene load_steps=2 format=3 uid="uid://b48ximtiqbwvo"]
+
+[ext_resource type="ArrayMesh" uid="uid://bpndpup4f6g6v" path="res://map/items/burned.res" id="1_wu5eo"]
+
+[node name="Burned" type="Node3D"]
+
+[node name="Mesh" type="MeshInstance3D" parent="."]
+transform = Transform3D(0.75, 0, 0, 0, 0.75, 0, 0, 0, 0.75, 0, 0, 0)
+mesh = ExtResource("1_wu5eo")
+skeleton = NodePath("")
diff --git a/client/map/items/exterior_tree.gd b/client/map/items/exterior_tree.gd
new file mode 100644
index 00000000..d1e0b6b3
--- /dev/null
+++ b/client/map/items/exterior_tree.gd
@@ -0,0 +1,24 @@
+# Undercooked - a game about cooking
+# Copyright 2024 nokoe
+#
+# 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 ExteriorTree
+extends Grass
+
+func _init(rename: String, _neighbors: Array):
+ super(rename, _neighbors)
+ var random = RandomNumberGenerator.new()
+ random.seed = rename.hash()
+ var path = "res://map/tiles/tree_%s.tscn" % random.randi_range(1,5)
+ base.add_child(load(path).instantiate())
diff --git a/client/map/items/grass.gd b/client/map/items/grass.gd
new file mode 100644
index 00000000..3b8d4016
--- /dev/null
+++ b/client/map/items/grass.gd
@@ -0,0 +1,23 @@
+# Undercooked - a game about cooking
+# Copyright 2024 nokoe
+#
+# 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 Grass
+extends Tile
+
+func _init(rename: String, _neighbors: Array):
+ super(rename, _neighbors)
+ #var grass_tile = load("res://map/tiles/grass.tscn").instantiate()
+ #grass_tile.position += Vector3(0.5, 0, 0.5)
+ #add_child(floor_tile)
diff --git a/client/map/items/plate_fill.gd b/client/map/items/plate_fill.gd
new file mode 100644
index 00000000..ead71f11
--- /dev/null
+++ b/client/map/items/plate_fill.gd
@@ -0,0 +1,27 @@
+# Undercooked - a game about cooking
+# Copyright 2024 nokoe
+#
+# 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 PlateFill
+extends Plate
+
+var fill: MeshInstance3D = load("res://map/items/plate_fill.tscn").instantiate()
+
+func _init(owned_by_: Node3D):
+ super(owned_by_)
+ add_child(fill)
+
+func set_color(c: Color):
+ var mat: BaseMaterial3D = fill.get_active_material(0)
+ mat.albedo_color = c
diff --git a/client/map/items/plate_fill.res b/client/map/items/plate_fill.res
new file mode 100644
index 00000000..b21e4690
--- /dev/null
+++ b/client/map/items/plate_fill.res
Binary files differ
diff --git a/client/map/items/plate_fill.tscn b/client/map/items/plate_fill.tscn
new file mode 100644
index 00000000..0ecb2294
--- /dev/null
+++ b/client/map/items/plate_fill.tscn
@@ -0,0 +1,12 @@
+[gd_scene load_steps=3 format=3 uid="uid://btktb7yb1y0yq"]
+
+[ext_resource type="ArrayMesh" uid="uid://c8l6gbfjikyv3" path="res://map/items/plate_fill.res" id="1_dgygv"]
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5o82g"]
+resource_local_to_scene = true
+
+[node name="PlateFill" type="MeshInstance3D"]
+transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
+mesh = ExtResource("1_dgygv")
+skeleton = NodePath("")
+surface_material_override/0 = SubResource("StandardMaterial3D_5o82g")
diff --git a/client/map/items/tomato_soup_plate.gd b/client/map/items/tomato_soup_plate.gd
new file mode 100644
index 00000000..91b396c4
--- /dev/null
+++ b/client/map/items/tomato_soup_plate.gd
@@ -0,0 +1,21 @@
+# Undercooked - a game about cooking
+# Copyright 2024 nokoe
+#
+# 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 TomatoSoupPlate
+extends PlateFill
+
+func _init(owned_by_: Node3D):
+ super(owned_by_)
+ set_color(Color(1., .3, .2))
diff --git a/client/map/map.gd b/client/map/map.gd
index 14e7698a..d43d7b45 100644
--- a/client/map/map.gd
+++ b/client/map/map.gd
@@ -26,7 +26,7 @@ func update(pos, tile_name, neighbors):
if has_node(node_name):
queue_free_rename(get_node(node_name))
- var instance: Floor = TileFactory.produce(tile_name, node_name, neighbors)
+ 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
diff --git a/client/map/tile_factory.gd b/client/map/tile_factory.gd
index bbd6e52f..9869270d 100644
--- a/client/map/tile_factory.gd
+++ b/client/map/tile_factory.gd
@@ -16,7 +16,7 @@
class_name TileFactory
extends Object
-static func produce(tile_name: String, node_name: String, neighbors: Array) -> Floor:
+static func produce(tile_name: String, node_name: String, neighbors: Array) -> Tile:
match tile_name:
"trash":
return Trash.new(node_name, neighbors)
@@ -52,6 +52,10 @@ static func produce(tile_name: String, node_name: String, neighbors: Array) -> F
return Door.new(node_name, neighbors)
"leek-crate":
return LeekCrate.new(node_name, neighbors)
+ "tree":
+ return ExteriorTree.new(node_name, neighbors)
+ "grass":
+ return Grass.new(node_name, neighbors)
var t:
push_warning("tile tile %s unknown" % t)
return GenericTile.new(node_name, neighbors, t)
diff --git a/client/map/tiles/bark.tres b/client/map/tiles/bark.tres
new file mode 100644
index 00000000..9bfae2fe
--- /dev/null
+++ b/client/map/tiles/bark.tres
@@ -0,0 +1,12 @@
+[gd_resource type="StandardMaterial3D" load_steps=3 format=3 uid="uid://beyncaufbtoay"]
+
+[ext_resource type="Texture2D" uid="uid://bgh74bmrp46qc" path="res://map/tiles/bark.webp" id="1_3mn2u"]
+[ext_resource type="Texture2D" uid="uid://bmvab6kdyccm4" path="res://map/tiles/bark_normal.webp" id="2_v3ray"]
+
+[resource]
+resource_name = "NormalTree_Bark"
+albedo_texture = ExtResource("1_3mn2u")
+metallic = 0.4
+roughness = 0.301511
+normal_enabled = true
+normal_texture = ExtResource("2_v3ray")
diff --git a/client/map/tiles/bark.webp b/client/map/tiles/bark.webp
new file mode 100644
index 00000000..4918e43c
--- /dev/null
+++ b/client/map/tiles/bark.webp
Binary files differ
diff --git a/client/map/tiles/bark.webp.import b/client/map/tiles/bark.webp.import
new file mode 100644
index 00000000..c8fa875c
--- /dev/null
+++ b/client/map/tiles/bark.webp.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bgh74bmrp46qc"
+path.s3tc="res://.godot/imported/bark.webp-ca303b7b3d58abe022cf53cf86095d8e.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://map/tiles/bark.webp"
+dest_files=["res://.godot/imported/bark.webp-ca303b7b3d58abe022cf53cf86095d8e.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0
diff --git a/client/map/tiles/bark_normal.webp b/client/map/tiles/bark_normal.webp
new file mode 100644
index 00000000..3bc641e4
--- /dev/null
+++ b/client/map/tiles/bark_normal.webp
Binary files differ
diff --git a/client/map/tiles/bark_normal.webp.import b/client/map/tiles/bark_normal.webp.import
new file mode 100644
index 00000000..8ec39b6f
--- /dev/null
+++ b/client/map/tiles/bark_normal.webp.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bmvab6kdyccm4"
+path.s3tc="res://.godot/imported/bark_normal.webp-a959f1e563d7021f4de54162a0386942.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://map/tiles/bark_normal.webp"
+dest_files=["res://.godot/imported/bark_normal.webp-a959f1e563d7021f4de54162a0386942.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=1
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=1
+roughness/src_normal="res://map/tiles/Trees_NormalTree_Bark_Normal.webp"
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0
diff --git a/client/map/tiles/floor.gd b/client/map/tiles/floor.gd
index c5089feb..6a158c67 100644
--- a/client/map/tiles/floor.gd
+++ b/client/map/tiles/floor.gd
@@ -14,66 +14,10 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name Floor
-extends Node3D
-
-var base = Node3D.new()
-var item: Item = null
-var item_base: Node3D
-
-enum Facing {
- NEG_Y = 0,
- NEG_X = 1,
- Y = 2,
- X = 3,
-}
+extends Tile
func _init(rename: String, _neighbors: Array):
+ super(rename, _neighbors)
var floor_tile = load("res://map/tiles/floor.tscn").instantiate()
floor_tile.position += Vector3(0.5, 0, 0.5)
add_child(floor_tile)
- base.name = "Base"
- base.position += Vector3(0.5, 0, 0.5)
- add_child(base)
- self.name = rename
- var item_base_ = Node3D.new()
- # this method is supposed to be overriden
- @warning_ignore("static_called_on_instance")
- item_base_.position = interact_target()
- item_base_.name = "ItemBase"
- base.add_child(item_base_)
- item_base = item_base_
-
-func turn_facing(facing: Facing):
- base.rotate_y(facing * 0.5 * PI + PI)
-
-# defines where items go when interacting
-static func interact_target() -> Vector3:
- return Vector3(0, 0, 0)
-
-# actions when interacting, e.g. animations
-func interact():
- pass
-
-func progress(p: float, warn: bool):
- if item != null:
- item.progress(p, warn)
-
-func finish(warn: bool):
- if item != null:
- item.finish(warn)
-
-func put_item(i: Item):
- if item != null:
- push_error("already holding an item")
- set_item(i)
-
-func set_item(i: Item):
- if item != null:
- item.queue_free()
- item = i
- i.owned_by = item_base
-
-func take_item() -> Item:
- var i = item
- item = null
- return i
diff --git a/client/map/tiles/leaves.tres b/client/map/tiles/leaves.tres
new file mode 100644
index 00000000..d243916b
--- /dev/null
+++ b/client/map/tiles/leaves.tres
@@ -0,0 +1,9 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bwkrkt2cb0wa"]
+
+[ext_resource type="Texture2D" uid="uid://bxxh66na6bumt" path="res://map/tiles/leaves.webp" id="1_jg4r8"]
+
+[resource]
+resource_name = "NormalTree_Leaves"
+transparency = 4
+albedo_texture = ExtResource("1_jg4r8")
+metallic_specular = 0.0
diff --git a/client/map/tiles/leaves.webp b/client/map/tiles/leaves.webp
new file mode 100644
index 00000000..2485e489
--- /dev/null
+++ b/client/map/tiles/leaves.webp
Binary files differ
diff --git a/client/map/tiles/leaves.webp.import b/client/map/tiles/leaves.webp.import
new file mode 100644
index 00000000..4f1c2217
--- /dev/null
+++ b/client/map/tiles/leaves.webp.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bxxh66na6bumt"
+path.s3tc="res://.godot/imported/leaves.webp-74b6f011fe2782672168a48c177030ec.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://map/tiles/leaves.webp"
+dest_files=["res://.godot/imported/leaves.webp-74b6f011fe2782672168a48c177030ec.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0
diff --git a/client/map/tiles/tile.gd b/client/map/tiles/tile.gd
new file mode 100644
index 00000000..039a6c1b
--- /dev/null
+++ b/client/map/tiles/tile.gd
@@ -0,0 +1,76 @@
+# Undercooked - a game about cooking
+# Copyright 2024 nokoe
+#
+# 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 Tile
+extends Node3D
+
+var base = Node3D.new()
+var item: Item = null
+var item_base: Node3D
+
+enum Facing {
+ NEG_Y = 0,
+ NEG_X = 1,
+ Y = 2,
+ X = 3,
+}
+
+func _init(rename: String, _neighbors: Array):
+ base.name = "Base"
+ base.position += Vector3(0.5, 0, 0.5)
+ add_child(base)
+ self.name = rename
+ var item_base_ = Node3D.new()
+ # this method is supposed to be overriden
+ @warning_ignore("static_called_on_instance")
+ item_base_.position = interact_target()
+ item_base_.name = "ItemBase"
+ base.add_child(item_base_)
+ item_base = item_base_
+
+func turn_facing(facing: Facing):
+ base.rotate_y(facing * 0.5 * PI + PI)
+
+# defines where items go when interacting
+static func interact_target() -> Vector3:
+ return Vector3(0, 0, 0)
+
+# actions when interacting, e.g. animations
+func interact():
+ pass
+
+func progress(p: float, warn: bool):
+ if item != null:
+ item.progress(p, warn)
+
+func finish(warn: bool):
+ if item != null:
+ item.finish(warn)
+
+func put_item(i: Item):
+ if item != null:
+ push_error("already holding an item")
+ set_item(i)
+
+func set_item(i: Item):
+ if item != null:
+ item.queue_free()
+ item = i
+ i.owned_by = item_base
+
+func take_item() -> Item:
+ var i = item
+ item = null
+ return i
diff --git a/client/map/tiles/tree_1.res b/client/map/tiles/tree_1.res
new file mode 100644
index 00000000..9b97c062
--- /dev/null
+++ b/client/map/tiles/tree_1.res
Binary files differ
diff --git a/client/map/tiles/tree_1.tscn b/client/map/tiles/tree_1.tscn
new file mode 100644
index 00000000..c8aeade2
--- /dev/null
+++ b/client/map/tiles/tree_1.tscn
@@ -0,0 +1,10 @@
+[gd_scene load_steps=2 format=3 uid="uid://de2vaemb2p66q"]
+
+[ext_resource type="ArrayMesh" uid="uid://bkilmwqdhtiq2" path="res://map/tiles/tree_1.res" id="1_mgdye"]
+
+[node name="Tree1" type="Node3D"]
+
+[node name="Tree1" type="MeshInstance3D" parent="."]
+transform = Transform3D(100, 0, 0, 0, -4.37114e-06, 100, 0, -100, -4.37114e-06, 0, 0, 0)
+mesh = ExtResource("1_mgdye")
+skeleton = NodePath("")
diff --git a/client/map/tiles/tree_2.res b/client/map/tiles/tree_2.res
new file mode 100644
index 00000000..52c20e7c
--- /dev/null
+++ b/client/map/tiles/tree_2.res
Binary files differ
diff --git a/client/map/tiles/tree_2.tscn b/client/map/tiles/tree_2.tscn
new file mode 100644
index 00000000..ab5e34bc
--- /dev/null
+++ b/client/map/tiles/tree_2.tscn
@@ -0,0 +1,10 @@
+[gd_scene load_steps=2 format=3 uid="uid://elpjoxfe3bje"]
+
+[ext_resource type="ArrayMesh" uid="uid://k8t6vgd4o31j" path="res://map/tiles/tree_2.res" id="1_o34ab"]
+
+[node name="Tree2" type="Node3D"]
+
+[node name="Tree2" type="MeshInstance3D" parent="."]
+transform = Transform3D(100, 0, 0, 0, -1.19209e-05, 100, 0, -100, -1.19209e-05, 0, 0, 0)
+mesh = ExtResource("1_o34ab")
+skeleton = NodePath("")
diff --git a/client/map/tiles/tree_3.res b/client/map/tiles/tree_3.res
new file mode 100644
index 00000000..4fd635ca
--- /dev/null
+++ b/client/map/tiles/tree_3.res
Binary files differ
diff --git a/client/map/tiles/tree_3.tscn b/client/map/tiles/tree_3.tscn
new file mode 100644
index 00000000..d553965e
--- /dev/null
+++ b/client/map/tiles/tree_3.tscn
@@ -0,0 +1,10 @@
+[gd_scene load_steps=2 format=3 uid="uid://bw0rhtux5p04x"]
+
+[ext_resource type="ArrayMesh" uid="uid://b2ckqbw7inroj" path="res://map/tiles/tree_3.res" id="1_jt2l7"]
+
+[node name="Tree3" type="Node3D"]
+
+[node name="Tree3" type="MeshInstance3D" parent="."]
+transform = Transform3D(100, 0, 0, 0, -1.19209e-05, 100, 0, -100, -1.19209e-05, 0, 0, 0)
+mesh = ExtResource("1_jt2l7")
+skeleton = NodePath("")
diff --git a/client/map/tiles/tree_4.res b/client/map/tiles/tree_4.res
new file mode 100644
index 00000000..f7b322d2
--- /dev/null
+++ b/client/map/tiles/tree_4.res
Binary files differ
diff --git a/client/map/tiles/tree_4.tscn b/client/map/tiles/tree_4.tscn
new file mode 100644
index 00000000..022cb3df
--- /dev/null
+++ b/client/map/tiles/tree_4.tscn
@@ -0,0 +1,10 @@
+[gd_scene load_steps=2 format=3 uid="uid://bqpl3ogd58klf"]
+
+[ext_resource type="ArrayMesh" uid="uid://cenl3hbfhqagu" path="res://map/tiles/tree_4.res" id="1_ss0d8"]
+
+[node name="Tree4" type="Node3D"]
+
+[node name="Tree4" type="MeshInstance3D" parent="."]
+transform = Transform3D(100, 0, 0, 0, -1.19209e-05, 100, 0, -100, -1.19209e-05, 0, 0, 0)
+mesh = ExtResource("1_ss0d8")
+skeleton = NodePath("")
diff --git a/client/map/tiles/tree_5.res b/client/map/tiles/tree_5.res
new file mode 100644
index 00000000..f4ddde72
--- /dev/null
+++ b/client/map/tiles/tree_5.res
Binary files differ
diff --git a/client/map/tiles/tree_5.tscn b/client/map/tiles/tree_5.tscn
new file mode 100644
index 00000000..9ec34ee8
--- /dev/null
+++ b/client/map/tiles/tree_5.tscn
@@ -0,0 +1,10 @@
+[gd_scene load_steps=2 format=3 uid="uid://gwj164os66pq"]
+
+[ext_resource type="ArrayMesh" uid="uid://m2wjeka2butc" path="res://map/tiles/tree_5.res" id="1_2mx8y"]
+
+[node name="Tree5" type="Node3D"]
+
+[node name="Tree5" type="MeshInstance3D" parent="."]
+transform = Transform3D(100, 0, 0, 0, -1.19209e-05, 100, 0, -100, -1.19209e-05, 0, 0, 0)
+mesh = ExtResource("1_2mx8y")
+skeleton = NodePath("")
diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd
index a85d6c84..7d143a60 100644
--- a/client/player/controllable_player.gd
+++ b/client/player/controllable_player.gd
@@ -97,7 +97,7 @@ func update_position(new_position: Vector2, _new_rotation: float):
func interact():
var tile_idx = str(target)
- var t: Floor = game.map.tile_by_pos.get(tile_idx)
+ var t: Tile = game.map.tile_by_pos.get(tile_idx)
if t != null:
game.marker.set_interactive(game.mp.get_tile_interactive(target))
game.marker.visible = true
diff --git a/client/player/player.gd b/client/player/player.gd
index 41ba1059..5873c9ef 100644
--- a/client/player/player.gd
+++ b/client/player/player.gd
@@ -66,13 +66,13 @@ func remove_item() -> Item:
character.holding = false
return i
-func take_item(tile: Floor):
+func take_item(tile: Tile):
if hand != null:
push_error("already holding an item")
var i = tile.take_item()
set_item(i)
-func put_item(tile: Floor):
+func put_item(tile: Tile):
var i = remove_item()
tile.put_item(i)