У меня есть сеточная игра (платформер), в которой все основано на плитках. У меня есть плитки, которые являются твердыми и жидкими. Я пытаюсь найти хороший способ сделать так, чтобы водяные плитки грубо имитировали воду.
На данный момент у меня есть текущая система:
Когда водная плитка добавляется над другой водяной плиткой, она добавляет 1 к водной плитке ниже. Число указывает на давление.
Вот как это выглядит сейчас:
[0] <- This water tile has 0 in pressure.
[1] <- This water tile has 1 in pressure.
если я добавлю еще одну плитку для воды рядом с нижней, она будет искать слева, справа и сверху, есть ли водяные плитки, и унаследует наибольшее давление вокруг нее.
Пример:
[0]
[1][1]
А вот более крупный пример после добавления нескольких водных плиток:
[0][0]
[1][1][1][1]
[2][2][2][2][2]
Затем я делаю каждую водную плитку с давлением, равным или превышающим 1, пытаюсь переместиться влево / вправо, если есть свободное пространство, затем устанавливаю давление на 0 и проверяю, может ли она унаследовать давление вокруг себя от соседних водных плиток, если есть любые.
Эта система работает очень хорошо, за исключением случая, когда водные плитки снимаются сверху.
Если я уберу верхние плитки с водой из последнего примера:
[1][1][1][1]
[2][2][2][2][2]
Тогда у нас есть верхний ряд с давлением 1, теперь там должно быть 0, а в нижнем ряду - 1.
Есть ли какая-нибудь более умная система, которую я могу реализовать, чтобы сделать это более правильным?
Ниже приведены ограничения:
Каждая плитка может проверять только плитки соседей.
Плитка может иметь любую определенную функцию.
Плитка может иметь любую переменную для хранения данных.
Ребята, можете ли вы придумать лучшую систему, которая работает лучше, чем у меня?
Обычный тестовый пример, который я делаю:
[]
[] should become [][]
[]
[]
[] should become [][][]
[]
[][][] should become [][][][]
Предполагается, что игра запускается некоторое время.
Любые предложения приветствуются!