/********************************************************************
	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
 ********************************************************************/

#pragma once

#include "Textures.hpp"
#include "common/Random.hpp"
class Textures; // in case we are being included from Textures. We don't need a complete type

// Essentially, the way these work is by patching themselves into terrain.png with a
// call to glTexSubImage2D

class DynamicTexture
{
public:
	virtual void tick() = 0;
	virtual void bindTexture(Textures*);

	DynamicTexture(int a2);
	virtual ~DynamicTexture();

protected:
	int m_textureIndex;
	int m_textureSize;
	uint8_t m_pixels[1024];

	friend class Textures;
};

class WaterTexture : public DynamicTexture
{
public:
	WaterTexture();
	~WaterTexture();

	void tick() override;

public:
	int field_40C;
	int field_410;
	float* m_data1;
	float* m_data2;
	float* m_data3;
	float* m_data4;
};

class WaterSideTexture : public DynamicTexture
{
public:
	WaterSideTexture();
	~WaterSideTexture();

	void tick() override;

public:
	int field_40C;
	int field_410;
	int field_414;
	float* m_data1;
	float* m_data2;
	float* m_data3;
	float* m_data4;
};

class LavaTexture : public DynamicTexture
{
public:
	LavaTexture();
	~LavaTexture();

	void tick() override;

public:
	int field_14;
	int field_18;
	float* m_data1;
	float* m_data2;
	float* m_data3;
	float* m_data4;
};

class LavaSideTexture : public DynamicTexture
{
public:
	LavaSideTexture();
	~LavaSideTexture();

	void tick() override;

public:
	int field_14;
	int field_18;
	int field_1C;
	float* m_data1;
	float* m_data2;
	float* m_data3;
	float* m_data4;
};

class FireTexture : public DynamicTexture
{
public:
	FireTexture(int);
	~FireTexture();

	void tick() override;

public:
	float* m_data1;
	float* m_data2;
	Random m_random;
};
