Files
minecraft-pe-0.6.1/src/client/renderer/entity/ArrowRenderer.cpp
2026-03-02 22:04:18 +03:00

63 lines
1.7 KiB
C++
Executable File

#include "ArrowRenderer.h"
#include "../Tesselator.h"
#include "../Textures.h"
#include "../gles.h"
#include "../../../world/entity/Entity.h"
#include "../../../world/entity/projectile/Arrow.h"
void ArrowRenderer::render(Entity* entity, float x, float y, float z, float rot, float a) {
bindTexture("item/arrows.png");
Arrow* arrow = (Arrow*) entity;
glPushMatrix2();
glTranslatef(x, y, z);
glRotatef(arrow->yRotO + (arrow->yRot - arrow->yRotO) * a - 90, 0, 1, 0);
glRotatef(arrow->xRotO + (arrow->xRot - arrow->xRotO) * a, 0, 0, 1);
Tesselator& t = Tesselator::instance;
int type = 0;
float u0 = 0 / 32.0f;
float u1 = 16 / 32.0f;
float v0 = (0 + type * 10) / 32.0f;
float v1 = (5 + type * 10) / 32.0f;
float u02 = 0 / 32.0f;
float u12 = 5 / 32.0f;
float v02 = (5 + type * 10) / 32.0f;
float v12 = (10 + type * 10) / 32.0f;
float ss = 0.9f / 16.0f;
float shake = arrow->shakeTime - a;
if (shake > 0) {
float pow = -Mth::sin(shake * 3) * shake;
glRotatef(pow, 0, 0, 1);
}
glRotatef(45, 1, 0, 0);
glScalef(ss, ss, ss);
glTranslatef(-4, 0, 0);
t.begin();
t.vertexUV(-7, -2, -2, u02, v02);
t.vertexUV(-7, -2, +2, u12, v02);
t.vertexUV(-7, +2, +2, u12, v12);
t.vertexUV(-7, +2, -2, u02, v12);
t.vertexUV(-7, +2, -2, u02, v02);
t.vertexUV(-7, +2, +2, u12, v02);
t.vertexUV(-7, -2, +2, u12, v12);
t.vertexUV(-7, -2, -2, u02, v12);
t.draw();
for (int i = 0; i < 4; i++) {
glRotatef(90, 1, 0, 0);
t.begin();
t.vertexUV(-8, -2, 0, u0, v0);
t.vertexUV(+8, -2, 0, u1, v0);
t.vertexUV(+8, +2, 0, u1, v1);
t.vertexUV(-8, +2, 0, u0, v1);
t.endOverrideAndDraw();
}
glPopMatrix2();
}