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 /client/map | |
| parent | de1771c6cdea53d03f9466491c375d8aa1e19f0c (diff) | |
| download | hurrycurry-4c6b38bb85d5211df01ee4f9e14a613dbe21be6d.tar hurrycurry-4c6b38bb85d5211df01ee4f9e14a613dbe21be6d.tar.bz2 hurrycurry-4c6b38bb85d5211df01ee4f9e14a613dbe21be6d.tar.zst | |
add exterior
Diffstat (limited to 'client/map')
| -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 | 
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 | 
