enable async loading, optimize rendering and distance checks

This commit is contained in:
savis
2025-12-26 06:21:13 +01:00
parent 1592ec93f6
commit 9907febf28
5 changed files with 40 additions and 6 deletions

View File

@@ -640,6 +640,7 @@ class CInstanceBase
float NEW_GetDistanceFromDirPixelPosition(const TPixelPosition& c_rkPPosDir);
float NEW_GetDistanceFromDestPixelPosition(const TPixelPosition& c_rkPPosDst);
float NEW_GetDistanceFromDestInstance(CInstanceBase& rkInstDst);
float NEW_GetDistanceFromDestInstanceSquared(CInstanceBase& rkInstDst); // Optimized: no sqrt
float NEW_GetRotation();
float NEW_GetRotationFromDestPixelPosition(const TPixelPosition& c_rkPPosDst);

View File

@@ -91,6 +91,19 @@ float CInstanceBase::NEW_GetDistanceFromDirPixelPosition(const TPixelPosition& c
return sqrtf(c_rkPPosDir.x*c_rkPPosDir.x+c_rkPPosDir.y*c_rkPPosDir.y);
}
// Optimized: Get squared distance (avoid sqrt for comparisons)
float CInstanceBase::NEW_GetDistanceFromDestInstanceSquared(CInstanceBase& rkInstDst)
{
TPixelPosition kPPosDst;
rkInstDst.NEW_GetPixelPosition(&kPPosDst);
TPixelPosition kPPosCur;
NEW_GetPixelPosition(&kPPosCur);
TPixelPosition kPPosDir = kPPosDst - kPPosCur;
return kPPosDir.x * kPPosDir.x + kPPosDir.y * kPPosDir.y;
}
float CInstanceBase::NEW_GetRotation()
{
float fCurRot=GetRotation();

View File

@@ -178,8 +178,10 @@ void CPythonCharacterManager::Update()
continue;
}
int nDistance = int(pkInstEach->NEW_GetDistanceFromDestInstance(*pkInstMain));
if (nDistance > CHAR_STAGE_VIEW_BOUND + 10)
// Optimized: Use squared distance to avoid sqrt
float fDistanceSquared = pkInstEach->NEW_GetDistanceFromDestInstanceSquared(*pkInstMain);
const float fViewBoundSquared = (CHAR_STAGE_VIEW_BOUND + 10) * (CHAR_STAGE_VIEW_BOUND + 10);
if (fDistanceSquared > fViewBoundSquared)
{
__DeleteBlendOutInstance(pkInstEach);
m_kAliveInstMap.erase(c);