aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/ClockTexture.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/ClockTexture.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/ClockTexture.cpp')
-rw-r--r--Minecraft.Client/ClockTexture.cpp119
1 files changed, 119 insertions, 0 deletions
diff --git a/Minecraft.Client/ClockTexture.cpp b/Minecraft.Client/ClockTexture.cpp
new file mode 100644
index 00000000..d8abb785
--- /dev/null
+++ b/Minecraft.Client/ClockTexture.cpp
@@ -0,0 +1,119 @@
+#include "stdafx.h"
+#include "Minecraft.h"
+#include "..\Minecraft.World\net.minecraft.world.level.h"
+#include "..\Minecraft.World\net.minecraft.world.level.dimension.h"
+#include "MultiplayerLocalPlayer.h"
+#include "..\Minecraft.World\JavaMath.h"
+#include "Texture.h"
+#include "ClockTexture.h"
+
+ClockTexture::ClockTexture() : StitchedTexture(L"compass")
+{
+ rot = rota = 0.0;
+ m_dataTexture = NULL;
+ m_iPad = XUSER_INDEX_ANY;
+}
+
+ClockTexture::ClockTexture(int iPad, ClockTexture *dataTexture) : StitchedTexture(L"compass")
+{
+ rot = rota = 0.0;
+ m_dataTexture = dataTexture;
+ m_iPad = iPad;
+}
+
+void ClockTexture::cycleFrames()
+{
+
+ Minecraft *mc = Minecraft::GetInstance();
+
+ double rott = 0;
+ if (m_iPad >= 0 && m_iPad < XUSER_MAX_COUNT && mc->level != NULL && mc->localplayers[m_iPad] != NULL)
+ {
+ float time = mc->localplayers[m_iPad]->level->getTimeOfDay(1);
+ rott = time;
+ if (!mc->localplayers[m_iPad]->level->dimension->isNaturalDimension())
+ {
+ rott = Math::random();
+ }
+ }
+ else
+ {
+ // 4J Stu - For the static version, pretend we are already on a frame other than 0
+ frame = 1;
+ }
+
+ double rotd = rott - rot;
+ while (rotd < -.5)
+ rotd += 1.0;
+ while (rotd >= .5)
+ rotd -= 1.0;
+ if (rotd < -1) rotd = -1;
+ if (rotd > 1) rotd = 1;
+ rota += rotd * 0.1;
+ rota *= 0.8;
+
+ rot += rota;
+
+ // 4J Stu - We share data with another texture
+ if(m_dataTexture != NULL)
+ {
+ int newFrame = (int) ((rot + 1.0) * m_dataTexture->frames->size()) % m_dataTexture->frames->size();
+ while (newFrame < 0)
+ {
+ newFrame = (newFrame + m_dataTexture->frames->size()) % m_dataTexture->frames->size();
+ }
+ if (newFrame != frame)
+ {
+ frame = newFrame;
+ m_dataTexture->source->blit(x, y, m_dataTexture->frames->at(this->frame), rotated);
+ }
+ }
+ else
+ {
+ int newFrame = (int) ((rot + 1.0) * frames->size()) % frames->size();
+ while (newFrame < 0)
+ {
+ newFrame = (newFrame + frames->size()) % frames->size();
+ }
+ if (newFrame != frame)
+ {
+ frame = newFrame;
+ source->blit(x, y, frames->at(this->frame), rotated);
+ }
+ }
+}
+
+int ClockTexture::getSourceWidth() const
+{
+ return source->getWidth();
+}
+
+int ClockTexture::getSourceHeight() const
+{
+ return source->getHeight();
+}
+
+int ClockTexture::getFrames()
+{
+ if(m_dataTexture == NULL)
+ {
+ return StitchedTexture::getFrames();
+ }
+ else
+ {
+ return m_dataTexture->getFrames();
+ }
+}
+
+void ClockTexture::freeFrameTextures()
+{
+ if(m_dataTexture == NULL)
+ {
+ StitchedTexture::freeFrameTextures();
+ }
+}
+
+bool ClockTexture::hasOwnData()
+{
+ return m_dataTexture == NULL;
+} \ No newline at end of file