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()) |