aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornokoe <nokoe@mailbox.org>2024-06-25 15:20:33 +0200
committernokoe <nokoe@mailbox.org>2024-06-25 15:20:33 +0200
commit4c6b38bb85d5211df01ee4f9e14a613dbe21be6d (patch)
treed8b580d4270cad640e2242c51b94330e5fe7fb67
parentde1771c6cdea53d03f9466491c375d8aa1e19f0c (diff)
downloadhurrycurry-4c6b38bb85d5211df01ee4f9e14a613dbe21be6d.tar
hurrycurry-4c6b38bb85d5211df01ee4f9e14a613dbe21be6d.tar.bz2
hurrycurry-4c6b38bb85d5211df01ee4f9e14a613dbe21be6d.tar.zst
add exterior
-rw-r--r--client/game.gd12
-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
-rw-r--r--client/player/controllable_player.gd2
-rw-r--r--client/player/player.gd4
9 files changed, 140 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/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
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)