diff options
author | nokoe <nokoe@mailbox.org> | 2024-06-25 15:20:33 +0200 |
---|---|---|
committer | nokoe <nokoe@mailbox.org> | 2024-06-25 15:20:33 +0200 |
commit | 4c6b38bb85d5211df01ee4f9e14a613dbe21be6d (patch) | |
tree | d8b580d4270cad640e2242c51b94330e5fe7fb67 | |
parent | de1771c6cdea53d03f9466491c375d8aa1e19f0c (diff) | |
download | hurrycurry-4c6b38bb85d5211df01ee4f9e14a613dbe21be6d.tar hurrycurry-4c6b38bb85d5211df01ee4f9e14a613dbe21be6d.tar.bz2 hurrycurry-4c6b38bb85d5211df01ee4f9e14a613dbe21be6d.tar.zst |
add exterior
-rw-r--r-- | client/game.gd | 12 | ||||
-rw-r--r-- | client/map/items/exterior_tree.gd | 24 | ||||
-rw-r--r-- | client/map/items/grass.gd | 23 | ||||
-rw-r--r-- | client/map/map.gd | 2 | ||||
-rw-r--r-- | client/map/tile_factory.gd | 6 | ||||
-rw-r--r-- | client/map/tiles/floor.gd | 60 | ||||
-rw-r--r-- | client/map/tiles/tile.gd | 76 | ||||
-rw-r--r-- | client/player/controllable_player.gd | 2 | ||||
-rw-r--r-- | client/player/player.gd | 4 |
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) |