Надеюсь, это будет достаточно ясно.
У меня есть двухмерная карта из плиток, и я хочу, чтобы "вода" путешествовала по этой карте. Он выходит из трубы на конкретную плитку, а затем должен заполнить, как вода, все плитки, чтобы достичь определенной другой плитки. В настоящее время у меня есть карта, введенная в игру, где каждая плитка является узлом, а каждый узел связан со всеми соответствующими плитками вокруг нее. У меня есть узлы, хранящиеся в отсортированном массиве, сначала по x, затем по y. Кроме того, некоторые плитки являются «воротами», которые могут препятствовать протеканию воды через них. Они являются частью одной и той же сетки узловых листов и просто помечены, когда активны.
Проблема в том, как я разгоняю воду.
Первоначально каждая труба (которая сбрасывает воду) отслеживала список «текущих» и «полных» водных плиток, и она распределяла воду непосредственно по «текущим» плиткам, а затем переключала их на свои «полные». 'список, когда это уместно. «Текущий» список был расширен за счет получения окружающих плиток уже «текущих» плиток. В любом случае, это работало хорошо, и вода текла хорошо, но я не мог понять, как заставить это работать с воротами
чтобы поток воды можно было остановить и снова разрешить (и снова остановить и т. д.) в определенной точке.
Прямо сейчас у меня есть это, где вода сбрасывается в одну и только одну плитку, а затем, когда у плитки слишком много воды, она постепенно выталкивает воду на случайные соседние плитки (если плитка не является активными воротами). проблема в том, что вода «выплескивается» вокруг уже заполненных плиток, а не течет «наружу». В конечном итоге он туда доберется, но поток гораздо менее естественный.
Так завершается моя дилемма.
Код написан на python.
Edit:
Новая идея. Я мог бы заставить трубу искать через узлы подходящую свободную плитку для размещения воды при каждом обновлении, но это кажется ужасно неэффективным - особенно с несколькими трубами.