#include "../../Platform/stdafx.h" #include "CritParticle.h" #include "../../../Minecraft.World/Headers/net.minecraft.world.entity.h" #include "../../../Minecraft.World/Util/Random.h" #include "../../../Minecraft.World/Headers/net.minecraft.world.phys.h" #include "../../../Minecraft.World/Headers/net.minecraft.world.level.h" void CritParticle::_init(Level* level, std::shared_ptr entity, ePARTICLE_TYPE type) { life = 0; this->entity = entity; lifeTime = 3; particleName = type; // 4J-PB - can't use a shared_from_this in the constructor // tick(); } CritParticle::CritParticle(Level* level, std::shared_ptr entity) : Particle(level, entity->x, entity->bb.y0 + entity->bbHeight / 2, entity->z, entity->xd, entity->yd, entity->zd) { _init(level, entity, eParticleType_crit); } CritParticle::CritParticle(Level* level, std::shared_ptr entity, ePARTICLE_TYPE type) : Particle(level, entity->x, entity->bb.y0 + entity->bbHeight / 2, entity->z, entity->xd, entity->yd, entity->zd) { _init(level, entity, type); } // 4J - Added this so that we can use some std::shared_ptr functions that were // needed in the ctor void CritParticle::CritParticlePostConstructor(void) { tick(); } void CritParticle::render(Tesselator* t, float a, float xa, float ya, float za, float xa2, float za2) {} void CritParticle::tick() { for (int i = 0; i < 16; i++) { double xa = random->nextFloat() * 2 - 1; double ya = random->nextFloat() * 2 - 1; double za = random->nextFloat() * 2 - 1; if (xa * xa + ya * ya + za * za > 1) continue; double x = entity->x + xa * entity->bbWidth / 4; double y = entity->bb.y0 + entity->bbHeight / 2 + ya * entity->bbHeight / 4; double z = entity->z + za * entity->bbWidth / 4; level->addParticle(particleName, x, y, z, xa, ya + 0.2, za); } life++; if (life >= lifeTime) { remove(); } } int CritParticle::getParticleTexture() { return ParticleEngine::ENTITY_PARTICLE_TEXTURE; }