#pragma once

// 4J-PB added to avoid string compares on adding particles
enum ePARTICLE_TYPE
{
	eParticleType_bubble,
	eParticleType_smoke,
	eParticleType_note,
	eParticleType_netherportal, // 4J - This particle should only be used by the Nether portal. Everything else should use eParticleType_end
	eParticleType_endportal, // 4J - Seperated this from torches and fires
	eParticleType_explode,
	eParticleType_flame,
	eParticleType_lava,
	eParticleType_footstep,
	eParticleType_splash,
	eParticleType_largesmoke,
	eParticleType_reddust,
	eParticleType_snowballpoof,
	eParticleType_snowshovel,
	eParticleType_slime,
	eParticleType_heart,
	eParticleType_suspended,
	eParticleType_depthsuspend,
	eParticleType_crit,
	eParticleType_hugeexplosion,
	eParticleType_largeexplode,
	eParticleType_townaura,
	eParticleType_spell,
	eParticleType_mobSpell,
	eParticleType_instantSpell,
	eParticleType_magicCrit,
	eParticleType_dripWater,
	eParticleType_dripLava,
	eParticleType_enchantmenttable,
	eParticleType_dragonbreath,
	eParticleType_ender, // 4J Added - These are things that used the "portal" particle but are actually end related entities
	eParticleType_angryVillager,
	eParticleType_happyVillager,

	// 4J-JEV: In the java, the particle name was used to sneak parameters in for the Terrain and IconCrack particle constructors.
	
	eParticleType_iconcrack_base = 0x100000,	// There's  range of iconcrack particle types based on item id and data.
	eParticleType_iconcrack_last = 0x1FFFFF,
	eParticleType_tilecrack_base = 0x200000,	// There's a range of tilecrack particle types based on tile id and data.
	eParticleType_tilecrack_last = 0x2FFFFF,
								// 0x0000FF, <- these bits are for storing the data value.
								// 0x0FFF00, <- these bits are for encoding tile/item id.
								// 0x300000, <- these bits show if its an icon/tile or not.

};

#define PARTICLE_TILECRACK(id,data) ( (ePARTICLE_TYPE) ( ((int) eParticleType_tilecrack_base) | ((0x0FFF & id) << 8) | (0x0FF & data)) )
#define PARTICLE_ICONCRACK(id,data) ( (ePARTICLE_TYPE) ( ((int) eParticleType_iconcrack_base) | ((0x0FFF & id) << 8) | (0x0FF & data)) )

#define PARTICLE_CRACK_ID(ePType)   ((0x0FFF00 & (int)ePType) >> 8)
#define PARTICLE_CRACK_DATA(ePType) (0x0FF & (int)ePType)