/********************************************************************
	Minecraft: Pocket Edition - Decompilation Project
	Copyright (C) 2023 iProgramInCpp

	The following code is licensed under the BSD 1 clause license.
	SPDX-License-Identifier: BSD-1-Clause
 ********************************************************************/

#include "SpongeTile.hpp"
#include "world/level/Level.hpp"

SpongeTile::SpongeTile(int id, int texture) : Tile(id, texture, Material::sponge)
{
}

void SpongeTile::onPlace(Level* level, int x, int y, int z)
{
	// get rid of all water in a 5x5 cube around this
	for (int ox = -2; ox <= 2; ox++)
	{
		for (int oy = -2; oy <= 2; oy++)
		{
			for (int oz = -2; oz <= 2; oz++)
			{
				if (level->getTile(x + ox, y + oy, z + oz) == Tile::water->m_ID ||
					level->getTile(x + ox, y + oy, z + oz) == Tile::calmWater->m_ID)
				{
					level->setTile(x + ox, y + oy, z + oz, TILE_AIR);
				}
			}
		}
	}
}

void SpongeTile::destroy(Level* level, int x, int y, int z, int dir)
{
	// give an update to all water around us
	for (int ox = -3; ox <= 3; ox++)
	{
		for (int oy = -3; oy <= 3; oy++)
		{
			for (int oz = -3; oz <= 3; oz++)
			{
				if (level->getTile(x + ox, y + oy, z + oz) == Tile::water->m_ID ||
					level->getTile(x + ox, y + oy, z + oz) == Tile::calmWater->m_ID)
				{
					level->neighborChanged(x + ox, y + oy, z + oz, TILE_AIR);
				}
			}
		}
	}
}
