forked from Kolyah35/minecraft-pe-0.6.1
76 lines
2.0 KiB
C++
Executable File
76 lines
2.0 KiB
C++
Executable File
#include "TripodCameraRenderer.h"
|
|
#include "EntityRenderDispatcher.h"
|
|
#include "../Tesselator.h"
|
|
#include "../../Minecraft.h"
|
|
#include "../../../world/entity/item/TripodCamera.h"
|
|
#include "../../../world/level/material/Material.h"
|
|
|
|
TripodCameraRenderer::TripodCameraRenderer()
|
|
: tripod(0, 15 * 16 + 3, Material::plant),
|
|
cameraCube(0, 0)
|
|
{
|
|
cameraCube.addBox(-4, -4, -6, 8, 8, 10);
|
|
cameraCube.y = 11;
|
|
this->shadowRadius = 0.5f;
|
|
}
|
|
|
|
float TripodCameraRenderer::getFlashTime(const TripodCamera* c, float a) {
|
|
if (c->life >= 8) return -1;
|
|
if (c->life < 0) return -1;
|
|
return (c->life - a) * 0.125f;
|
|
}
|
|
|
|
void TripodCameraRenderer::render(Entity* cam_, float x, float y, float z, float rot, float a) {
|
|
TripodCamera* cam = (TripodCamera*)cam_;
|
|
|
|
glPushMatrix2();
|
|
glTranslatef2((float) x, (float) y, (float) z);
|
|
|
|
cameraCube.xRot = Mth::DEGRAD * (180.0f + cam->xRot * 0.5f);
|
|
cameraCube.yRot = -Mth::DEGRAD * cam->yRot;
|
|
|
|
//float br = (1 - ((cam->life - a + 1) / 100.0f)) * 0.8f;
|
|
|
|
Tesselator& t = Tesselator::instance;
|
|
t.color(1.0f, 1.0f, 1.0f);
|
|
|
|
//printf("xyz: %f, %f, %f\n", x, y, z);
|
|
|
|
// Render tripod legs
|
|
bindTexture("gui/items.png");
|
|
t.begin();
|
|
tileRenderer.tesselateCrossTexture(&tripod, 0, -0.5f, -0.5f, -0.5f);//, y, z);
|
|
t.draw();
|
|
|
|
// Render tripod
|
|
bindTexture("item/camera.png");
|
|
cameraCube.render(1.0f / 16.0f);
|
|
|
|
bool isCurrentlyPicked = entityRenderDispatcher->minecraft->hitResult.entity == cam;
|
|
|
|
const float flashLife = getFlashTime(cam, a);
|
|
|
|
if (flashLife >= 0) {
|
|
const float flashStrength = ::sin(flashLife * 6.2830f);
|
|
|
|
// Flash
|
|
glColor4f2(1, 1, 1, flashStrength);
|
|
glColor4f2(1, 1, 1, 1);
|
|
}
|
|
|
|
// "red light" flashing when photo is about to go off
|
|
if (isCurrentlyPicked) {
|
|
glDisable2(GL_TEXTURE_2D);
|
|
glEnable2(GL_BLEND);
|
|
glBlendFunc2(GL_SRC_ALPHA, GL_DST_ALPHA);
|
|
glColor4f2(0.5f,0.5f,0.5f,0.5f);
|
|
|
|
cameraCube.renderHorrible(1.0f / 16.0f);
|
|
|
|
glColor4f2(1,1,1,1);
|
|
glDisable2(GL_BLEND);
|
|
glEnable2(GL_TEXTURE_2D);
|
|
}
|
|
glPopMatrix2();
|
|
}
|