#include "stdafx.h" #include "CreeperRenderer.h" #include "CreeperModel.h" #include "..\Minecraft.World\net.minecraft.world.entity.monster.h" #include "..\Minecraft.World\Mth.h" CreeperRenderer::CreeperRenderer() : MobRenderer( new CreeperModel(), 0.5f ) { armorModel = new CreeperModel(2); } void CreeperRenderer::scale(shared_ptr mob, float a) { shared_ptr creeper = dynamic_pointer_cast(mob); float g = creeper->getSwelling(a); float wobble = 1.0f + Mth::sin(g * 100) * g * 0.01f; if (g < 0) g = 0; if (g > 1) g = 1; g = g * g; g = g * g; float s = (1.0f + g * 0.4f) * wobble; float hs = (1.0f + g * 0.1f) / wobble; glScalef(s, hs, s); } int CreeperRenderer::getOverlayColor(shared_ptr mob, float br, float a) { shared_ptr creeper = dynamic_pointer_cast(mob); float step = creeper->getSwelling(a); if ((int) (step * 10) % 2 == 0) return 0; int _a = (int) (step * 0.2f * 255) + 25; // 4J - added 25 here as our entities are rendered with alpha test still enabled, and so anything less is invisible if (_a < 0) _a = 0; if (_a > 255) _a = 255; int r = 255; int g = 255; int b = 255; return (_a << 24) | (r << 16) | (g << 8) | b; } int CreeperRenderer::prepareArmor(shared_ptr _mob, int layer, float a) { // 4J - dynamic cast required because we aren't using templates/generics in our version shared_ptr mob = dynamic_pointer_cast(_mob); if (mob->isPowered()) { if (mob->isInvisible()) glDepthMask(false); else glDepthMask(true); if (layer == 1) { float time = mob->tickCount + a; bindTexture(TN_POWERED_CREEPER);// was L"/armor/power.png"); glMatrixMode(GL_TEXTURE); glLoadIdentity(); float uo = time * 0.01f; float vo = time * 0.01f; glTranslatef(uo, vo, 0); setArmor(armorModel); glMatrixMode(GL_MODELVIEW); glEnable(GL_BLEND); float br = 0.5f; glColor4f(br, br, br, 1); glDisable(GL_LIGHTING); glBlendFunc(GL_ONE, GL_ONE); return 1; } if (layer == 2) { glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glEnable(GL_LIGHTING); glDisable(GL_BLEND); } } return -1; } int CreeperRenderer::prepareArmorOverlay(shared_ptr mob, int layer, float a) { return -1; }