#include "Contents/Actors/RenderObject.h" #include "Client/Replay.h" #include "Contents/Actors/GameActor.h" #include "Resource/ResourceMgr.h" #include "Resource/Sprites/ActionResource.h" #include "Resource/Sprites/SpriteResource.h" #include "Utility/Math/ScalarConversion.h" #include #include // OFFSET: 0x00CA8730 // FUNCTION: fn_20991 CRenderObject::CRenderObject(ResourceMgr& resources, JobNames& names) : render(resources, names) { } // OFFSET: 0x00CA8F90 // FUNCTION: fn_20998 CRenderObject::~CRenderObject() = default; // OFFSET: 0x00CAFDC0 // FUNCTION: fn_21089 bool CRenderObject::Update() { return false; } // OFFSET: 0x00CBF920 // FUNCTION: fn_21115 void CRenderObject::SendObjectMessage(CGameObject*, int, int, int, int, int, int, int, int, int, int, int, int, int, int) { } // OFFSET: 0x00CBF930 // FUNCTION: fn_21116 void CRenderObject::SetActionName(ResourceMgr& resources, const char* name) { if (this->render.action) { this->render.action->Release(); } this->render.action = static_cast(resources.Load(name)); if (this->render.action) { this->render.action->AddRef(); } } // OFFSET: 0x00CC2D40 // FUNCTION: fn_21144 void CRenderObject::SetScreenBounds(const float*, float, float) { } // OFFSET: 0x00CC2DA0 // FUNCTION: fn_21146 void CGameActor::SetUnknown0260(int value) { this->unknown_0260 = value & 1; } // OFFSET: 0x00CC2E00 // FUNCTION: fn_21151 void CRenderObject::SetSpriteName(ResourceMgr& resources, const char* name) { if (this->render.sprite) { this->render.sprite->Release(); } this->render.sprite = static_cast(resources.Load(name)); if (this->render.sprite) { this->render.sprite->AddRef(); } } // OFFSET: 0x00CC3DC0 // FUNCTION: fn_21154 void CRenderObject::SetScreenPosition(float x, float y) { this->render.screenX = TruncateToInt(x); this->render.screenY = TruncateToInt(y); } // OFFSET: 0x00CBFAE0 // FUNCTION: fn_21118 void CRenderObject::SetAnimation(unsigned animation, int, int repeat) { float speed = this->render.action->Speed(animation); if (g_replayAnimationScaling != 0) { speed *= Replay::Instance().AnimationScale(); } if (speed > 0.0f) { this->render.speed = speed; } if (this->render.speed < 1.0f) { if (g_replayAnimationScaling != 0) { speed = Replay::Instance().AnimationScale(); if (speed > 0.0f) { this->render.speed = speed; } } else { this->render.speed = 1.0f; } } speed = this->render.speed * this->render.unknown_0064; if (g_replayAnimationScaling != 0) { speed *= Replay::Instance().AnimationScale(); } if (speed > 0.0f) { this->render.speed = speed; } this->render.animation = animation; this->render.previousAnimation = animation; this->render.unknown_003C = 0; this->render.unknown_006C = repeat; this->render.unknown_009C[1] = 0; this->render.unknown_0060 = 1.0f; this->render.unknown_0064 = 1.0f; this->render.unknown_00C8 = 0; this->render.unknown_00D8 = 0; this->render.unknown_00DC = 0; } // OFFSET: 0x00CBFC00 // FUNCTION: fn_21119 void CRenderObject::SetColor(int alpha, int red, int green, int blue) { if (alpha != -1) { this->render.color = (this->render.color & 0x00FFFFFFu) | (static_cast(alpha) << 24); } if (red != -1) { this->render.color = (this->render.color & 0xFF00FFFFu) | ((static_cast(red) & 0xFFu) << 16); } if (green != -1) { this->render.color = (this->render.color & 0xFFFF00FFu) | ((static_cast(green) & 0xFFu) << 8); } if (blue != -1) { this->render.color = (this->render.color & 0xFFFFFF00u) | static_cast(blue); } } // OFFSET: 0x00CC1C20 // FUNCTION: fn_21125 void CGameActor::SetUnknown0305(unsigned char value, int extra) { this->unknown_0305 = value; this->unknown_0308 = extra; } // OFFSET: 0x00CC1D20 // FUNCTION: fn_21127 void CGameActor::RaiseUnknown03C8(int value) { if (value > 0 && this->unknown_03C8 < value) { this->unknown_03C8 = value; } } // OFFSET: 0x00CC1E70 // FUNCTION: fn_21130 void CRenderObject::SetSequenceDeadline(std::uint32_t duration) { this->render.sequenceDeadline = timeGetTime() + duration; } // OFFSET: 0x00CC1E90 // FUNCTION: fn_21131 void CRenderObject::SetSequenceInterval(unsigned char interval) { this->render.unknown_00C2 = interval; } // OFFSET: 0x00CC1EA0 // FUNCTION: fn_21132 void CRenderObject::SetAnimationSequence( unsigned char animation0, unsigned char frame0, unsigned char animation1, unsigned char frame1, unsigned char animation2, unsigned char frame2, unsigned char animation3, unsigned char frame3, unsigned char animation4, unsigned char frame4, int timed, std::uint32_t duration, int loop ) { this->render.sequenceAnimations[0] = animation0; this->render.sequenceFrames[0] = frame0; this->render.sequenceAnimations[1] = animation1; this->render.sequenceFrames[1] = frame1; this->render.sequenceAnimations[2] = animation2; this->render.sequenceFrames[2] = frame2; this->render.sequenceAnimations[3] = animation3; this->render.sequenceFrames[3] = frame3; this->render.sequenceAnimations[4] = animation4; this->render.sequenceFrames[4] = frame4; this->render.sequenceAnimation = animation0; this->render.sequenceFrame = frame0; this->render.sequenceIndex = 0; this->render.sequenceLast = 4; this->render.sequenceLoop = loop; this->render.sequenceTimed = timed; this->render.sequenceFinished = 0; this->render.unknown_00D8 = 1; this->render.unknown_00C8 = 0; this->render.unknown_00DC = 0; this->render.sequenceDeadline = timed != 0 ? timeGetTime() + duration : 0; this->render.sequenceTick = 1; } // OFFSET: 0x00CC1FA0 // FUNCTION: fn_21133 void CRenderObject::SetFrameSequence( unsigned char animation, unsigned char firstFrame, unsigned char lastFrame, unsigned char finishAnimation, unsigned char finishFrame, int timed, std::uint32_t duration, int loop ) { this->render.sequenceAnimation = animation; this->render.sequenceFrame = firstFrame; this->render.sequenceIndex = firstFrame; this->render.sequenceLast = lastFrame; this->render.sequenceFinishAnimation = finishAnimation; this->render.sequenceFinishFrame = finishFrame; this->render.sequenceLoop = loop; this->render.sequenceTimed = timed; this->render.sequenceFinished = 0; this->render.unknown_00C8 = 1; this->render.unknown_00DC = 0; this->render.unknown_00D8 = 0; this->render.sequenceDeadline = timed != 0 ? timeGetTime() + duration : 0; this->render.sequenceTick = 1; } // OFFSET: 0x00CC2050 // FUNCTION: fn_21134 void CGameActor::SetUnknown02E4(int value) { this->unknown_02E4 = value; } // OFFSET: 0x00CC2780 // FUNCTION: fn_21140 void CRenderObject::SetAnimationSpeed(float speed) { if (g_replayAnimationScaling != 0) { speed *= Replay::Instance().AnimationScale(); } if (speed > 0.0f) { this->render.speed = speed; } } // OFFSET: 0x00CC2810 // FUNCTION: fn_21142 void CGameActor::SetUnknown02C8(int value) { this->unknown_02C8 = value; }