aboutsummaryrefslogtreecommitdiff
path: root/client/map
diff options
context:
space:
mode:
Diffstat (limited to 'client/map')
-rw-r--r--client/map/items/exterior_tree.gd24
-rw-r--r--client/map/items/grass.gd23
-rw-r--r--client/map/map.gd2
-rw-r--r--client/map/tile_factory.gd6
-rw-r--r--client/map/tiles/floor.gd60
-rw-r--r--client/map/tiles/tile.gd76
6 files changed, 131 insertions, 60 deletions
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/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/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/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