4jcraft/Minecraft.Client/Rendering/Particles/CritParticle.cpp
2026-03-28 02:58:56 -05:00

59 lines
2.1 KiB
C++

#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> 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> 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> 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;
}