diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/ItemSpriteRenderer.cpp | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.Client/ItemSpriteRenderer.cpp')
| -rw-r--r-- | Minecraft.Client/ItemSpriteRenderer.cpp | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/Minecraft.Client/ItemSpriteRenderer.cpp b/Minecraft.Client/ItemSpriteRenderer.cpp new file mode 100644 index 00000000..5a1ea620 --- /dev/null +++ b/Minecraft.Client/ItemSpriteRenderer.cpp @@ -0,0 +1,79 @@ +#include "stdafx.h" +#include "ItemSpriteRenderer.h" +#include "EntityRenderDispatcher.h" +#include "..\Minecraft.World\net.minecraft.world.entity.projectile.h" +#include "..\Minecraft.World\net.minecraft.world.item.alchemy.h" +#include "..\Minecraft.World\net.minecraft.world.item.h" +#include "..\Minecraft.World\net.minecraft.world.h" + +ItemSpriteRenderer::ItemSpriteRenderer(Item *sourceItem, int sourceItemAuxValue /*= 0*/) : EntityRenderer() +{ + this->sourceItem = sourceItem; + this->sourceItemAuxValue = sourceItemAuxValue; +} + +//ItemSpriteRenderer::ItemSpriteRenderer(int icon) : EntityRenderer() +//{ +// this(sourceItem, 0); +//} + +void ItemSpriteRenderer::render(shared_ptr<Entity> e, double x, double y, double z, float rot, float a) +{ + // the icon is already cached in the item object, so there should not be any performance impact by not caching it here + Icon *icon = sourceItem->getIcon(sourceItemAuxValue); + if (icon == NULL) + { + return; + } + + glPushMatrix(); + + glTranslatef((float) x, (float) y, (float) z); + glEnable(GL_RESCALE_NORMAL); + glScalef(1 / 2.0f, 1 / 2.0f, 1 / 2.0f); + bindTexture(TN_GUI_ITEMS); // 4J - was L"/gui/items.png" + Tesselator *t = Tesselator::getInstance(); + + if (icon == PotionItem::getTexture(PotionItem::THROWABLE_ICON) ) + { + + int col = PotionBrewing::getColorValue((dynamic_pointer_cast<ThrownPotion>(e) )->getPotionValue(), false); + float red = ((col >> 16) & 0xff) / 255.0f; + float g = ((col >> 8) & 0xff) / 255.0f; + float b = ((col) & 0xff) / 255.0f; + + + glColor3f(red, g, b); + glPushMatrix(); + renderIcon(t, PotionItem::getTexture(PotionItem::CONTENTS_ICON)); + glPopMatrix(); + glColor3f(1, 1, 1); + } + + renderIcon(t, icon); + + glDisable(GL_RESCALE_NORMAL); + glPopMatrix(); +} + +void ItemSpriteRenderer::renderIcon(Tesselator *t, Icon *icon) +{ + float u0 = icon->getU0(); + float u1 = icon->getU1(); + float v0 = icon->getV0(); + float v1 = icon->getV1(); + + float r = 1.0f; + float xo = 0.5f; + float yo = 0.25f; + + glRotatef(180 - entityRenderDispatcher->playerRotY, 0, 1, 0); + glRotatef(-entityRenderDispatcher->playerRotX, 1, 0, 0); + t->begin(); + t->normal(0, 1, 0); + t->vertexUV((float)(0 - xo), (float)( 0 - yo), (float)( 0), (float)( u0), (float)( v1)); + t->vertexUV((float)(r - xo), (float)( 0 - yo), (float)( 0), (float)( u1), (float)( v1)); + t->vertexUV((float)(r - xo), (float)( r - yo), (float)( 0), (float)( u1), (float)( v0)); + t->vertexUV((float)(0 - xo), (float)( r - yo), (float)( 0), (float)( u0), (float)( v0)); + t->end(); +}
\ No newline at end of file |
