diff options
Diffstat (limited to 'client/scripts/tiles')
| -rw-r--r-- | client/scripts/tiles/chair.gd | 13 | ||||
| -rw-r--r-- | client/scripts/tiles/counter.gd | 63 | ||||
| -rw-r--r-- | client/scripts/tiles/counter_base.gd | 12 | ||||
| -rw-r--r-- | client/scripts/tiles/cutting_board.gd | 6 | ||||
| -rw-r--r-- | client/scripts/tiles/door.gd | 12 | ||||
| -rw-r--r-- | client/scripts/tiles/floor.gd | 25 | ||||
| -rw-r--r-- | client/scripts/tiles/full_tile.gd | 15 | ||||
| -rw-r--r-- | client/scripts/tiles/oven.gd | 6 | ||||
| -rw-r--r-- | client/scripts/tiles/sink.gd | 12 | ||||
| -rw-r--r-- | client/scripts/tiles/stove.gd | 6 | ||||
| -rw-r--r-- | client/scripts/tiles/table.gd | 6 | ||||
| -rw-r--r-- | client/scripts/tiles/trash.gd | 6 | ||||
| -rw-r--r-- | client/scripts/tiles/wall.gd | 6 | ||||
| -rw-r--r-- | client/scripts/tiles/wall_tile.gd | 10 | ||||
| -rw-r--r-- | client/scripts/tiles/window.gd | 11 | 
15 files changed, 209 insertions, 0 deletions
| diff --git a/client/scripts/tiles/chair.gd b/client/scripts/tiles/chair.gd new file mode 100644 index 00000000..e51d7864 --- /dev/null +++ b/client/scripts/tiles/chair.gd @@ -0,0 +1,13 @@ +class_name Chair +extends Floor + +func setup(rename: String, neighbors: Array): +	super.setup(rename, neighbors) +	var chair = load("res://models/prefabs/map/chair_A.tscn").instantiate() +	var facing = 0; +	for i in range(4): +		if tile_name(neighbors[i]) == "table": +			facing = i +			break +	base.add_child(chair) +	turn_facing(facing) diff --git a/client/scripts/tiles/counter.gd b/client/scripts/tiles/counter.gd new file mode 100644 index 00000000..d8b41804 --- /dev/null +++ b/client/scripts/tiles/counter.gd @@ -0,0 +1,63 @@ +class_name Counter +extends FullTile + +var counters = [ +	"counter", +	"pan", +	"sink", +	"oven", +] + +enum CounterKind { +	OUTER_CORNER, +	STRAIGHT, +	STRAIGHT_BACKSPLASH +} + +var kind: CounterKind = CounterKind.STRAIGHT + +func setup(rename: String, neighbors: Array): +	super.setup(rename, neighbors) +	var facing = 0 +	var edges = neighbors.duplicate() +	for i in range(4): +		var i_name = tile_name(edges[i]) +		if is_counter(i_name): +			edges[i] = "counter" +		else: +			edges[i] = tile_name(edges[i]) + +	var series: int = 0 +	var last_series: int = 0 +	var adj: Array = [] +	 +	for i in range(4): +		if edges[i] == "floor": +			last_series += 1 +			adj.append(i) +			if last_series > series: +				series = last_series +		else: +			last_series = 0 +	 +	var count = 4 - adj.size() + +	# we can neither find out whether it is an inner corner nor an outer corner +	# backsplash  +	if series == 1&&count == 3: +		facing = adj[0] % 4 +		 +		if edges[(adj[0] + 2) % 4] == "wall": +			kind = CounterKind.STRAIGHT_BACKSPLASH +		else: +			kind = CounterKind.STRAIGHT +	elif series == 2&&count == 2: +		facing = (adj[0] + 1) % 4 +		kind = CounterKind.OUTER_CORNER +	 +	turn_facing(facing) + +func is_counter(tile_name_t) -> bool: +	if tile_name_t == null: +		return false +	return name.ends_with("crate")||counters.has(name) diff --git a/client/scripts/tiles/counter_base.gd b/client/scripts/tiles/counter_base.gd new file mode 100644 index 00000000..19c7f045 --- /dev/null +++ b/client/scripts/tiles/counter_base.gd @@ -0,0 +1,12 @@ +class_name CounterBase +extends Counter + +func setup(rename: String, neighbors: Array): +	super.setup(rename, neighbors) +	match kind: +		CounterKind.OUTER_CORNER: +			base.add_child(load("res://models/prefabs/map/kitchencounter_outercorner.tscn").instantiate()) +		CounterKind.STRAIGHT: +			base.add_child(load("res://models/prefabs/map/kitchencounter_straight_A.tscn").instantiate()) +		CounterKind.STRAIGHT_BACKSPLASH: +			base.add_child(load("res://models/prefabs/map/kitchencounter_straight_A_backsplash.tscn").instantiate()) diff --git a/client/scripts/tiles/cutting_board.gd b/client/scripts/tiles/cutting_board.gd new file mode 100644 index 00000000..0164036b --- /dev/null +++ b/client/scripts/tiles/cutting_board.gd @@ -0,0 +1,6 @@ +class_name CuttingBoard +extends CounterBase + +func setup(rename: String, neighbors: Array): +	super.setup(rename, neighbors) +	base.add_child(load("res://models/prefabs/map/cuttingboard.tscn").instantiate()) diff --git a/client/scripts/tiles/door.gd b/client/scripts/tiles/door.gd new file mode 100644 index 00000000..a300977f --- /dev/null +++ b/client/scripts/tiles/door.gd @@ -0,0 +1,12 @@ +class_name Door +extends Floor + +func setup(rename: String, neighbors: Array): +	super.setup(rename, neighbors) +	 +	var facing = 0 +	for i in range(4): +		if tile_name(neighbors[i]) == "door": +			facing = i % 4 +	base.add_child(load("res://models/prefabs/map/door.tscn").instantiate()) +	turn_facing(facing) diff --git a/client/scripts/tiles/floor.gd b/client/scripts/tiles/floor.gd new file mode 100644 index 00000000..a8a396c4 --- /dev/null +++ b/client/scripts/tiles/floor.gd @@ -0,0 +1,25 @@ +class_name Floor +extends Node3D + +var base = Node3D.new() + +enum Facing { +	NEG_Y = 0, +	NEG_X = 1, +	Y = 2, +	X = 3, +} + +func setup(rename: String, _neighbors: Array): +	add_child(load("res://models/prefabs/map/floor_kitchen_small.tscn").instantiate()) +	base.name = "Base" +	add_child(base) +	self.name = rename + +func turn_facing(facing: Facing): +	base.rotate_y(facing * 0.5 * PI + PI) + +func tile_name(idx): +	if idx == null: +		return null +	return Multiplayer.tile_names[idx] diff --git a/client/scripts/tiles/full_tile.gd b/client/scripts/tiles/full_tile.gd new file mode 100644 index 00000000..a986b053 --- /dev/null +++ b/client/scripts/tiles/full_tile.gd @@ -0,0 +1,15 @@ +class_name FullTile +extends Floor + +var static_body = StaticBody3D.new() + +func setup(rename: String, neighbors: Array): +	super.setup(rename, neighbors) +	var shape = CollisionShape3D.new() +	var box = BoxShape3D.new() +	shape.position.y += .5 +	shape.shape = box +	shape.name = "Box" +	static_body.add_child(shape) +	static_body.name = "Body" +	base.add_child(static_body) diff --git a/client/scripts/tiles/oven.gd b/client/scripts/tiles/oven.gd new file mode 100644 index 00000000..2ebe7f33 --- /dev/null +++ b/client/scripts/tiles/oven.gd @@ -0,0 +1,6 @@ +class_name Oven +extends Counter + +func setup(rename: String, neighbors: Array): +	super.setup(rename, neighbors) +	base.add_child(load("res://models/prefabs/map/oven.tscn").instantiate()) diff --git a/client/scripts/tiles/sink.gd b/client/scripts/tiles/sink.gd new file mode 100644 index 00000000..2067cc33 --- /dev/null +++ b/client/scripts/tiles/sink.gd @@ -0,0 +1,12 @@ +class_name Sink +extends Counter + +func setup(rename: String, neighbors: Array): +	super.setup(rename, neighbors) +	match kind: +		CounterKind.STRAIGHT: +			base.add_child(load("res://models/prefabs/map/kitchencounter_sink.tscn").instantiate()) +		CounterKind.STRAIGHT_BACKSPLASH: +			base.add_child(load("res://models/prefabs/map/kitchencounter_sink_backsplash.tscn").instantiate()) +		_: +			base.add_child(load("res://models/prefabs/map/kitchencounter_sink.tscn").instantiate()) diff --git a/client/scripts/tiles/stove.gd b/client/scripts/tiles/stove.gd new file mode 100644 index 00000000..c2d75b7b --- /dev/null +++ b/client/scripts/tiles/stove.gd @@ -0,0 +1,6 @@ +class_name Stove +extends Counter + +func setup(rename: String, neighbors: Array): +	super.setup(rename, neighbors) +	base.add_child(load("res://models/prefabs/map/stove_single.tscn").instantiate()) diff --git a/client/scripts/tiles/table.gd b/client/scripts/tiles/table.gd new file mode 100644 index 00000000..937ef097 --- /dev/null +++ b/client/scripts/tiles/table.gd @@ -0,0 +1,6 @@ +class_name Table +extends FullTile + +func setup(rename: String, neighbors: Array): +	super.setup(rename, neighbors) +	base.add_child(load("res://models/prefabs/map/table_round_A_small.tscn").instantiate()) diff --git a/client/scripts/tiles/trash.gd b/client/scripts/tiles/trash.gd new file mode 100644 index 00000000..1ec05e49 --- /dev/null +++ b/client/scripts/tiles/trash.gd @@ -0,0 +1,6 @@ +class_name Trash +extends FullTile + +func setup(rename: String, neighbors: Array): +	super.setup(rename, neighbors) +	base.add_child(load("res://models/prefabs/map/crate_trash.tscn").instantiate()) diff --git a/client/scripts/tiles/wall.gd b/client/scripts/tiles/wall.gd new file mode 100644 index 00000000..dd6d3495 --- /dev/null +++ b/client/scripts/tiles/wall.gd @@ -0,0 +1,6 @@ +class_name Wall +extends WallTile + +func setup(rename: String, neighbors: Array): +	super.setup(rename, neighbors) +	base.add_child(load("res://models/prefabs/map/wall.tscn").instantiate()) diff --git a/client/scripts/tiles/wall_tile.gd b/client/scripts/tiles/wall_tile.gd new file mode 100644 index 00000000..d107d73e --- /dev/null +++ b/client/scripts/tiles/wall_tile.gd @@ -0,0 +1,10 @@ +class_name WallTile +extends FullTile + +func setup(rename: String, neighbors: Array): +	super.setup(rename, neighbors) +	var facing = 0 +	for i in range(4): +		if neighbors[i] != null&&tile_name(neighbors[i]) != "wall": +			facing = i +	turn_facing(facing) diff --git a/client/scripts/tiles/window.gd b/client/scripts/tiles/window.gd new file mode 100644 index 00000000..953f97db --- /dev/null +++ b/client/scripts/tiles/window.gd @@ -0,0 +1,11 @@ +class_name WallWindow +extends WallTile + +func setup(rename: String, neighbors: Array): +	super.setup(rename, neighbors) +	match kind: +		WallKind.STRAIGHT: +			base.add_child(load("res://models/prefabs/map/window.tscn").instantiate()) +		WallKind.OUTER_CORNER: +			push_warning("There is no corner window!") +			base.add_child(load("res://models/prefabs/map/window.tscn").instantiate()) | 
