mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-25 15:03:37 +00:00
58 lines
2.1 KiB
C++
58 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;
|
|
} |