Solution refactoring and restructuring, removed Boost dependency, removed unused tools
This commit is contained in:
304
src/EterGrnLib/LODController.h
Normal file
304
src/EterGrnLib/LODController.h
Normal file
@ -0,0 +1,304 @@
|
||||
#pragma once
|
||||
|
||||
#pragma warning(disable:4786)
|
||||
|
||||
#include <deque>
|
||||
#include "Thing.h"
|
||||
#include "ModelInstance.h"
|
||||
|
||||
class CGrannyLODController : public CGraphicBase
|
||||
{
|
||||
public:
|
||||
static void SetMinLODMode(bool isEnable);
|
||||
|
||||
public:
|
||||
struct FSetLocalTime
|
||||
{
|
||||
float fLocalTime;
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
pController->SetLocalTime(fLocalTime);
|
||||
}
|
||||
};
|
||||
|
||||
struct FUpdateTime
|
||||
{
|
||||
float fElapsedTime;
|
||||
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->UpdateTime(fElapsedTime);
|
||||
}
|
||||
};
|
||||
|
||||
struct FUpdateLODLevel
|
||||
{
|
||||
float fDistanceFromCenter;
|
||||
float fDistanceFromCamera;
|
||||
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->UpdateLODLevel(fDistanceFromCenter, fDistanceFromCamera);
|
||||
}
|
||||
};
|
||||
|
||||
struct FRenderWithOneTexture
|
||||
{
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->RenderWithOneTexture();
|
||||
}
|
||||
};
|
||||
|
||||
struct FBlendRenderWithOneTexture
|
||||
{
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->BlendRenderWithOneTexture();
|
||||
}
|
||||
};
|
||||
|
||||
struct FRenderWithTwoTexture
|
||||
{
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->RenderWithTwoTexture();
|
||||
}
|
||||
};
|
||||
|
||||
struct FBlendRenderWithTwoTexture
|
||||
{
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->BlendRenderWithTwoTexture();
|
||||
}
|
||||
};
|
||||
|
||||
struct FRenderToShadowMap
|
||||
{
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->RenderToShadowMap();
|
||||
}
|
||||
};
|
||||
|
||||
struct FRenderShadow
|
||||
{
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->RenderShadow();
|
||||
}
|
||||
};
|
||||
|
||||
struct FDeform
|
||||
{
|
||||
const D3DXMATRIX * mc_pWorldMatrix;
|
||||
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->Deform(mc_pWorldMatrix);
|
||||
}
|
||||
};
|
||||
struct FDeformNoSkin
|
||||
{
|
||||
const D3DXMATRIX * mc_pWorldMatrix;
|
||||
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->DeformNoSkin(mc_pWorldMatrix);
|
||||
}
|
||||
};
|
||||
struct FDeformAll
|
||||
{
|
||||
const D3DXMATRIX * mc_pWorldMatrix;
|
||||
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->DeformAll(mc_pWorldMatrix);
|
||||
}
|
||||
};
|
||||
|
||||
struct FCreateDeviceObjects
|
||||
{
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->CreateDeviceObjects();
|
||||
}
|
||||
};
|
||||
|
||||
struct FDestroyDeviceObjects
|
||||
{
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->DestroyDeviceObjects();
|
||||
}
|
||||
};
|
||||
|
||||
struct FBoundBox
|
||||
{
|
||||
D3DXVECTOR3* m_vtMin;
|
||||
D3DXVECTOR3* m_vtMax;
|
||||
|
||||
FBoundBox(D3DXVECTOR3 * vtMin, D3DXVECTOR3 * vtMax)
|
||||
{
|
||||
m_vtMin = vtMin;
|
||||
m_vtMax = vtMax;
|
||||
}
|
||||
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->GetBoundBox(m_vtMin, m_vtMax);
|
||||
}
|
||||
};
|
||||
|
||||
struct FResetLocalTime
|
||||
{
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->ResetLocalTime();
|
||||
}
|
||||
};
|
||||
|
||||
struct FReloadTexture
|
||||
{
|
||||
void operator () (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->ReloadTexture();
|
||||
}
|
||||
};
|
||||
|
||||
struct FSetMotionPointer
|
||||
{
|
||||
const CGrannyMotion * m_pMotion;
|
||||
float m_speedRatio;
|
||||
float m_blendTime;
|
||||
int m_loopCount;
|
||||
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->SetMotionPointer(m_pMotion, m_blendTime, m_loopCount, m_speedRatio);
|
||||
}
|
||||
};
|
||||
|
||||
struct FChangeMotionPointer
|
||||
{
|
||||
const CGrannyMotion * m_pMotion;
|
||||
float m_speedRatio;
|
||||
int m_loopCount;
|
||||
|
||||
void operator() (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->ChangeMotionPointer(m_pMotion, m_loopCount, m_speedRatio);
|
||||
}
|
||||
};
|
||||
|
||||
struct FEndStopMotionPointer
|
||||
{
|
||||
const CGrannyMotion * m_pMotion;
|
||||
|
||||
void operator () (CGrannyLODController * pController)
|
||||
{
|
||||
if (pController->isModelInstance())
|
||||
pController->SetMotionAtEnd();
|
||||
}
|
||||
};
|
||||
|
||||
CGrannyLODController();
|
||||
virtual ~CGrannyLODController();
|
||||
|
||||
void Clear();
|
||||
|
||||
void CreateDeviceObjects();
|
||||
void DestroyDeviceObjects();
|
||||
|
||||
void AddModel(CGraphicThing * pThing, int iSrcModel, CGrannyLODController * pSkelLODController=NULL);
|
||||
void AttachModelInstance(CGrannyLODController * pSrcLODController, const char * c_szBoneName);
|
||||
void DetachModelInstance(CGrannyLODController * pSrcLODController);
|
||||
void SetLODLimits(float fNearLOD, float fFarLOD);
|
||||
void SetLODLevel(BYTE bLODLevel);
|
||||
BYTE GetLODLevel() { return m_bLODLevel; }
|
||||
void SetMaterialImagePointer(const char* c_szImageName, CGraphicImage* pImage);
|
||||
void SetMaterialData(const char* c_szImageName, const SMaterialData& c_rkMaterialData);
|
||||
void SetSpecularInfo(const char* c_szMtrlName, BOOL bEnable, float fPower);
|
||||
|
||||
void RenderWithOneTexture();
|
||||
void RenderWithTwoTexture();
|
||||
void BlendRenderWithOneTexture();
|
||||
void BlendRenderWithTwoTexture();
|
||||
|
||||
void Update(float fElapsedTime, float fDistanceFromCenter, float fDistanceFromCamera);
|
||||
void UpdateLODLevel(float fDistanceFromCenter, float fDistanceFromCamera);
|
||||
void UpdateTime(float fElapsedTime);
|
||||
|
||||
void UpdateSkeleton(const D3DXMATRIX * c_pWorldMatrix, float fElapsedTime);
|
||||
void Deform(const D3DXMATRIX * c_pWorldMatrix);
|
||||
void DeformNoSkin(const D3DXMATRIX * c_pWorldMatrix);
|
||||
void DeformAll(const D3DXMATRIX * c_pWorldMatrix);
|
||||
|
||||
void RenderToShadowMap();
|
||||
void RenderShadow();
|
||||
void ReloadTexture();
|
||||
|
||||
void GetBoundBox(D3DXVECTOR3 * vtMin, D3DXVECTOR3 * vtMax);
|
||||
bool Intersect(const D3DXMATRIX * c_pMatrix, float * u, float * v, float * t);
|
||||
|
||||
void SetLocalTime(float fLocalTime);
|
||||
void ResetLocalTime();
|
||||
|
||||
void SetMotionPointer(const CGrannyMotion * c_pMotion, float fBlendTime, int iLoopCount, float speedRatio);
|
||||
void ChangeMotionPointer(const CGrannyMotion * c_pMotion, int iLoopCount, float speedRatio);
|
||||
void SetMotionAtEnd();
|
||||
|
||||
BOOL isModelInstance();
|
||||
CGrannyModelInstance* GetModelInstance();
|
||||
bool HaveBlendThing() { return 0 != GetModelInstance() ? GetModelInstance()->HaveBlendThing() : false; } // NOTE: GetModelInstance() == 0<><30> <20><> Ŭ<><C5AC> ũ<><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(2012. 05. 07)
|
||||
|
||||
protected:
|
||||
void SetCurrentModelInstance(CGrannyModelInstance * pgrnModelInstance);
|
||||
void RefreshAttachedModelInstance();
|
||||
|
||||
void __ReserveSharedDeformableVertexBuffer(DWORD deformableVertexCount);
|
||||
|
||||
protected:
|
||||
float m_fLODDistance;
|
||||
DWORD m_dwLODAniFPS;
|
||||
|
||||
//// Attaching Link Data
|
||||
// Data of Parent Side
|
||||
typedef struct SAttachingModelData
|
||||
{
|
||||
CGrannyLODController * pkLODController;
|
||||
std::string strBoneName;
|
||||
} TAttachingModelData;
|
||||
|
||||
std::vector<TAttachingModelData> m_AttachedModelDataVector;
|
||||
// Data of Child Side
|
||||
CGrannyLODController * m_pAttachedParentModel;
|
||||
|
||||
BYTE m_bLODLevel;
|
||||
CGrannyModelInstance * m_pCurrentModelInstance;
|
||||
|
||||
// WORK
|
||||
std::deque<CGrannyModelInstance *> m_que_pkModelInst;
|
||||
|
||||
CGraphicVertexBuffer* m_pkSharedDeformableVertexBuffer;
|
||||
// END_OF_WORK
|
||||
};
|
Reference in New Issue
Block a user