aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/MinecartRenderer.cpp
diff options
context:
space:
mode:
authordaoge <3523206925@qq.com>2026-03-03 03:04:10 +0800
committerGitHub <noreply@github.com>2026-03-03 03:04:10 +0800
commitb3feddfef372618c8a9d7a0abcaf18cfad866c18 (patch)
tree267761c3bb39241ba5c347bfbe2254d06686e287 /Minecraft.Client/MinecartRenderer.cpp
parent84c31a2331f7a0ec85b9d438992e244f60e5020f (diff)
feat: TU19 (Dec 2014) Features & Content (#155)
* try to resolve merge conflict * feat: TU19 (Dec 2014) Features & Content (#32) * December 2014 files * Working release build * Fix compilation issues * Add sound to Windows64Media * Add DLC content and force Tutorial DLC * Revert "Add DLC content and force Tutorial DLC" This reverts commit 97a43994725008e35fceb984d5549df9c8cea470. * Disable broken light packing * Disable breakpoint during DLC texture map load Allows DLC loading but the DLC textures are still broken * Fix post build not working * ... * fix vs2022 build * fix cmake build --------- Co-authored-by: Loki <lokirautio@gmail.com>
Diffstat (limited to 'Minecraft.Client/MinecartRenderer.cpp')
-rw-r--r--Minecraft.Client/MinecartRenderer.cpp169
1 files changed, 107 insertions, 62 deletions
diff --git a/Minecraft.Client/MinecartRenderer.cpp b/Minecraft.Client/MinecartRenderer.cpp
index 0cae8346..fd907019 100644
--- a/Minecraft.Client/MinecartRenderer.cpp
+++ b/Minecraft.Client/MinecartRenderer.cpp
@@ -1,13 +1,17 @@
#include "stdafx.h"
#include "MinecartRenderer.h"
#include "MinecartModel.h"
+#include "TextureAtlas.h"
#include "..\Minecraft.World\net.minecraft.world.entity.item.h"
#include "..\Minecraft.World\net.minecraft.world.level.tile.h"
+ResourceLocation MinecartRenderer::MINECART_LOCATION(TN_ITEM_CART);
+
MinecartRenderer::MinecartRenderer()
{
- this->shadowRadius = 0.5f;
- model = new MinecartModel();
+ this->shadowRadius = 0.5f;
+ model = new MinecartModel();
+ renderer = new TileRenderer();
}
void MinecartRenderer::render(shared_ptr<Entity> _cart, double x, double y, double z, float rot, float a)
@@ -15,8 +19,10 @@ void MinecartRenderer::render(shared_ptr<Entity> _cart, double x, double y, doub
// 4J - dynamic cast required because we aren't using templates/generics in our version
shared_ptr<Minecart> cart = dynamic_pointer_cast<Minecart>(_cart);
- glPushMatrix();
-
+ glPushMatrix();
+
+ bindTexture(cart);
+
__int64 seed = cart->entityId * 493286711l;
seed = seed * seed * 4392167121l + seed * 98761;
@@ -26,81 +32,120 @@ void MinecartRenderer::render(shared_ptr<Entity> _cart, double x, double y, doub
glTranslatef(xo, yo, zo);
- double xx = cart->xOld + (cart->x - cart->xOld) * a;
- double yy = cart->yOld + (cart->y - cart->yOld) * a;
- double zz = cart->zOld + (cart->z - cart->zOld) * a;
+ double xx = cart->xOld + (cart->x - cart->xOld) * a;
+ double yy = cart->yOld + (cart->y - cart->yOld) * a;
+ double zz = cart->zOld + (cart->z - cart->zOld) * a;
- double r = 0.3f;
+ double r = 0.3f;
- Vec3 *p = cart->getPos(xx, yy, zz);
+ Vec3 *p = cart->getPos(xx, yy, zz);
- float xRot = cart->xRotO + (cart->xRot - cart->xRotO) * a;
+ float xRot = cart->xRotO + (cart->xRot - cart->xRotO) * a;
- if (p != NULL)
+ if (p != NULL)
{
- Vec3 *p0 = cart->getPosOffs(xx, yy, zz, r);
- Vec3 *p1 = cart->getPosOffs(xx, yy, zz, -r);
- if (p0 == NULL) p0 = p;
- if (p1 == NULL) p1 = p;
+ Vec3 *p0 = cart->getPosOffs(xx, yy, zz, r);
+ Vec3 *p1 = cart->getPosOffs(xx, yy, zz, -r);
+ if (p0 == NULL) p0 = p;
+ if (p1 == NULL) p1 = p;
- x += p->x - xx;
- y += (p0->y + p1->y) / 2 - yy;
- z += p->z - zz;
+ x += p->x - xx;
+ y += (p0->y + p1->y) / 2 - yy;
+ z += p->z - zz;
- Vec3 *dir = p1->add(-p0->x, -p0->y, -p0->z);
- if (dir->length() == 0)
+ Vec3 *dir = p1->add(-p0->x, -p0->y, -p0->z);
+ if (dir->length() == 0)
{
- }
+ }
else
{
- dir = dir->normalize();
- rot = (float) (atan2(dir->z, dir->x) * 180 / PI);
- xRot = (float) (atan(dir->y) * 73);
- }
- }
- glTranslatef((float) x, (float) y, (float) z);
-
- glRotatef(180 - rot, 0, 1, 0);
- glRotatef(-xRot, 0, 0, 1);
- float hurt = cart->getHurtTime() - a;
- float dmg = cart->getDamage() - a;
- if (dmg < 0) dmg = 0;
- if (hurt > 0)
+ dir = dir->normalize();
+ rot = (float) (atan2(dir->z, dir->x) * 180 / PI);
+ xRot = (float) (atan(dir->y) * 73);
+ }
+ }
+ glTranslatef((float) x, (float) y, (float) z);
+
+ glRotatef(180 - rot, 0, 1, 0);
+ glRotatef(-xRot, 0, 0, 1);
+ float hurt = cart->getHurtTime() - a;
+ float dmg = cart->getDamage() - a;
+ if (dmg < 0) dmg = 0;
+ if (hurt > 0)
{
- glRotatef(Mth::sin(hurt) * hurt * dmg / 10 * cart->getHurtDir(), 1, 0, 0);
- }
+ glRotatef(Mth::sin(hurt) * hurt * dmg / 10 * cart->getHurtDir(), 1, 0, 0);
+ }
+
+ int yOffset = cart->getDisplayOffset();
+ Tile *tile = cart->getDisplayTile();
+ int tileData = cart->getDisplayData();
- if (cart->type != Minecart::RIDEABLE)
+ if (tile != NULL)
{
glPushMatrix();
- bindTexture(TN_TERRAIN); // 4J was L"/terrain.png"
- float ss = 12 / 16.0f;
- glScalef(ss, ss, ss);
- // 4J - changes here brought forward from 1.2.3
- if (cart->type == Minecart::CHEST)
- {
- glTranslatef(0 / 16.0f, 8 / 16.0f, 0 / 16.0f);
- TileRenderer *tr = new TileRenderer();
- tr->renderTile(Tile::chest, 0, cart->getBrightness(a));
- delete tr;
- }
- else if (cart->type == Minecart::FURNACE)
- {
- glTranslatef(0, 6 / 16.0f, 0);
- TileRenderer *tr = new TileRenderer();
- tr->renderTile(Tile::furnace, 0, cart->getBrightness(a));
- delete tr;
- }
+ bindTexture(&TextureAtlas::LOCATION_BLOCKS);
+ float ss = 12 / 16.0f;
+
+ glScalef(ss, ss, ss);
+ glTranslatef(0 / 16.f, yOffset / 16.f, 0 / 16.f);
+ renderMinecartContents(cart, a, tile, tileData);
+
glPopMatrix();
glColor4f(1, 1, 1, 1);
- }
+ bindTexture(cart);
+ }
- bindTexture(TN_ITEM_CART); // 4J - was L"/item/cart.png"
- glScalef(-1, -1, 1);
- // model.render(0, 0, cart->getLootContent() * 7.1f - 0.1f, 0, 0, 1 /
-// 16.0f);
- model->render(cart, 0, 0, -0.1f, 0, 0, 1 / 16.0f, true);
- glPopMatrix();
+ glScalef(-1, -1, 1);
+ model->render(cart, 0, 0, -0.1f, 0, 0, 1 / 16.0f, true);
+ glPopMatrix();
+
+ /*
+ if (cart->type != Minecart::RIDEABLE)
+ {
+ glPushMatrix();
+ bindTexture(TN_TERRAIN); // 4J was L"/terrain.png"
+ float ss = 12 / 16.0f;
+ glScalef(ss, ss, ss);
+
+ // 4J - changes here brought forward from 1.2.3
+ if (cart->type == Minecart::CHEST)
+ {
+ glTranslatef(0 / 16.0f, 8 / 16.0f, 0 / 16.0f);
+ TileRenderer *tr = new TileRenderer();
+ tr->renderTile(Tile::chest, 0, cart->getBrightness(a));
+ delete tr;
+ }
+ else if (cart->type == Minecart::FURNACE)
+ {
+ glTranslatef(0, 6 / 16.0f, 0);
+ TileRenderer *tr = new TileRenderer();
+ tr->renderTile(Tile::furnace, 0, cart->getBrightness(a));
+ delete tr;
+ }
+ glPopMatrix();
+ glColor4f(1, 1, 1, 1);
+ }
+
+ bindTexture(TN_ITEM_CART); // 4J - was L"/item/cart.png"
+ glScalef(-1, -1, 1);
+ // model.render(0, 0, cart->getLootContent() * 7.1f - 0.1f, 0, 0, 1 /
+ // 16.0f);
+ model->render(cart, 0, 0, -0.1f, 0, 0, 1 / 16.0f, true);
+ glPopMatrix();
+ */
+}
+
+ResourceLocation *MinecartRenderer::getTextureLocation(shared_ptr<Entity> mob)
+{
+ return &MINECART_LOCATION;
+}
+
+void MinecartRenderer::renderMinecartContents(shared_ptr<Minecart> cart, float a, Tile *tile, int tileData)
+{
+ float brightness = cart->getBrightness(a);
+ glPushMatrix();
+ renderer->renderTile(tile, tileData, brightness);
+ glPopMatrix();
} \ No newline at end of file