diff options
Diffstat (limited to 'client/map/tiles/counter.gd')
-rw-r--r-- | client/map/tiles/counter.gd | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/client/map/tiles/counter.gd b/client/map/tiles/counter.gd new file mode 100644 index 00000000..c3032e4f --- /dev/null +++ b/client/map/tiles/counter.gd @@ -0,0 +1,81 @@ +# 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 Counter +extends FullTile + +var counters = [ + "counter", + "pan", + "sink", + "oven", +] + +enum CounterKind { + OUTER_CORNER, + STRAIGHT, + STRAIGHT_BACKSPLASH +} + +var kind: CounterKind = CounterKind.STRAIGHT + +static func interact_target() -> Vector3: + return Vector3(0, 0.5, 0) + +func _init(rename: String, neighbors: Array): + super(rename, neighbors) + var facing = 0 + var edges = neighbors.duplicate() + for i in range(4): + var i_name = tile_name(edges[i]) + if Counter.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) + +static func is_counter(tile_name_t) -> bool: + if tile_name_t == null: + return false + return tile_name_t.ends_with("crate")||counters.has(tile_name_t) |