/********************************************************************
	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 "TntRenderer.hpp"
#include "world/entity/PrimedTnt.hpp"

TntRenderer::TntRenderer()
{
	field_4 = 0.5f;
}

void TntRenderer::render(Entity* entity, float x, float y, float z, float a6, float a7)
{
	PrimedTnt* tnt = (PrimedTnt*)entity;

	glPushMatrix();
	glTranslatef(x, y, z);

	float m = 1.0f + float(tnt->m_fuseTimer) - a7;
	if (m < 10.0f)
	{
		float n = (m / -10.0f) + 1.0f;
		if (n < 0.0f)
			n = 0.0f;
		if (n > 1.0f)
			n = 1.0f;

		float scale = 1.0f + 0.3f * n * n * n * n;
		glScalef(scale, scale, scale);
	}

	bindTexture(C_TERRAIN_NAME);

	// @NOTE: Useless assignment. Already being done by the renderTile function
	Tesselator::instance.color(1.0f, 1.0f, 1.0f);

	// Render the base
#ifdef ENH_SHADE_HELD_TILES
#define ARGPATCH , 1.0f
#else
#define ARGPATCH
#endif
	
	m_tileRenderer.renderTile(Tile::tnt, 0 ARGPATCH);

	// @NOTE: Converting to a uint8 for whatever reason
	if (((uint8_t(tnt->m_fuseTimer) / 5) & 1) == 0)
	{
		glDisable(GL_TEXTURE_2D);
		glEnable(GL_BLEND);
		glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA);
		glColor4f(1.0f, 1.0f, 1.0f, (((float(tnt->m_fuseTimer) - a7) + 1.0f) / -100.0f + 1.0f) * 0.8f);
		m_tileRenderer.renderTile(Tile::tnt, 0 ARGPATCH);
		glColor4f(1.0f, 1.0, 1.0f, 1.0f);
		glDisable(GL_BLEND);
		glEnable(GL_TEXTURE_2D);
	}

	glPopMatrix();

#ifdef ARGPATCH
#undef ARGPATCH
#endif
}
