aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/TakeAnimationParticle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.Client/TakeAnimationParticle.cpp')
-rw-r--r--Minecraft.Client/TakeAnimationParticle.cpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/Minecraft.Client/TakeAnimationParticle.cpp b/Minecraft.Client/TakeAnimationParticle.cpp
new file mode 100644
index 00000000..c9530b0a
--- /dev/null
+++ b/Minecraft.Client/TakeAnimationParticle.cpp
@@ -0,0 +1,80 @@
+#include "stdafx.h"
+#include "TakeAnimationParticle.h"
+#include "EntityRenderDispatcher.h"
+#include "..\Minecraft.World\net.minecraft.world.item.h"
+#include "..\Minecraft.World\net.minecraft.world.level.h"
+#include "..\Minecraft.World\Mth.h"
+
+TakeAnimationParticle::TakeAnimationParticle(Level *level, shared_ptr<Entity> item, shared_ptr<Entity> target, float yOffs) : Particle(level, item->x, item->y, item->z, item->xd, item->yd, item->zd)
+{
+ // 4J - added initialisers
+ life = 0;
+ lifeTime = 0;
+
+ this->item = item;
+
+ this->target = target;
+ lifeTime = 3;
+ this->yOffs = yOffs;
+
+}
+
+TakeAnimationParticle::~TakeAnimationParticle()
+{
+}
+
+void TakeAnimationParticle::render(Tesselator *t, float a, float xa, float ya, float za, float xa2, float za2)
+{
+ float time = (life + a) / lifeTime;
+ time = time*time;
+
+ double xo = item->x;
+ double yo = item->y;
+ double zo = item->z;
+
+ double xt = target->xOld + (target->x - target->xOld) * a;
+ double yt = target->yOld + (target->y - target->yOld) * a+yOffs;
+ double zt = target->zOld + (target->z - target->zOld) * a;
+
+ double xx = xo + (xt - xo) * time;
+ double yy = yo + (yt - yo) * time;
+ double zz = zo + (zt - zo) * time;
+
+ int xTile = Mth::floor(xx);
+ int yTile = Mth::floor(yy + heightOffset / 2.0f);
+ int zTile = Mth::floor(zz);
+
+ // 4J - change brought forward from 1.8.2
+ if (SharedConstants::TEXTURE_LIGHTING)
+ {
+ int col = getLightColor(a);
+ int u = col%65536;
+ int v = col/65536;
+ glMultiTexCoord2f(GL_TEXTURE1, u/1.0f, v/1.0f);
+ glColor4f(1, 1, 1, 1);
+ }
+ else
+ {
+ float br = level->getBrightness(xTile, yTile, zTile);
+ glColor4f(br, br, br, 1);
+ }
+
+ xx-=xOff;
+ yy-=yOff;
+ zz-=zOff;
+
+
+ EntityRenderDispatcher::instance->render(item, (float)xx, (float)yy, (float)zz, item->yRot, a);
+
+}
+
+void TakeAnimationParticle::tick()
+{
+ life++;
+ if (life == lifeTime) remove();
+}
+
+int TakeAnimationParticle::getParticleTexture()
+{
+ return ParticleEngine::ENTITY_PARTICLE_TEXTURE;
+}