Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "StdAfx.h"
- #include "../eterbase/Debug.h"
- #include "Thing.h"
- #include "ThingInstance.h"
- CGraphicThing::CGraphicThing(const char* c_szFileName) : CResource(c_szFileName)
- {
- Initialize();
- }
- CGraphicThing::~CGraphicThing()
- {
- //OnClear();
- Clear();
- }
- void CGraphicThing::Initialize()
- {
- m_pgrnFile = NULL;
- m_pgrnFileInfo = NULL;
- m_pgrnAni = NULL;
- m_models = NULL;
- m_motions = NULL;
- }
- void CGraphicThing::OnClear()
- {
- if (m_motions)
- delete [] m_motions;
- if (m_models)
- delete [] m_models;
- if (m_pgrnFile)
- GrannyFreeFile(m_pgrnFile);
- Initialize();
- }
- CGraphicThing::TType CGraphicThing::Type()
- {
- static TType s_type = StringToType("CGraphicThing");
- return s_type;
- }
- bool CGraphicThing::OnIsEmpty() const
- {
- return m_pgrnFile ? false : true;
- }
- bool CGraphicThing::OnIsType(TType type)
- {
- if (CGraphicThing::Type() == type)
- return true;
- return CResource::OnIsType(type);
- }
- bool CGraphicThing::CreateDeviceObjects()
- {
- if (!m_pgrnFileInfo)
- return true;
- for (int m = 0; m < m_pgrnFileInfo->ModelCount; ++m)
- {
- CGrannyModel & rModel = m_models[m];
- rModel.CreateDeviceObjects();
- }
- return true;
- }
- void CGraphicThing::DestroyDeviceObjects()
- {
- if (!m_pgrnFileInfo)
- return;
- for (int m = 0; m < m_pgrnFileInfo->ModelCount; ++m)
- {
- CGrannyModel & rModel = m_models[m];
- rModel.DestroyDeviceObjects();
- }
- }
- bool CGraphicThing::CheckModelIndex(int iModel) const
- {
- if (!m_pgrnFileInfo)
- {
- Tracef("m_pgrnFileInfo == NULL: %s\n", GetFileName());
- return false;
- }
- assert(m_pgrnFileInfo != NULL);
- if (iModel < 0)
- return false;
- if (iModel >= m_pgrnFileInfo->ModelCount)
- return false;
- return true;
- }
- bool CGraphicThing::CheckMotionIndex(int iMotion) const
- {
- // Temporary
- if (!m_pgrnFileInfo)
- return false;
- // Temporary
- assert(m_pgrnFileInfo != NULL);
- if (iMotion < 0)
- return false;
- if (iMotion >= m_pgrnFileInfo->AnimationCount)
- return false;
- return true;
- }
- CGrannyModel * CGraphicThing::GetModelPointer(int iModel)
- {
- assert(CheckModelIndex(iModel));
- assert(m_models != NULL);
- return m_models + iModel;
- }
- CGrannyMotion * CGraphicThing::GetMotionPointer(int iMotion)
- {
- assert(CheckMotionIndex(iMotion));
- if (iMotion >= m_pgrnFileInfo->AnimationCount)
- return NULL;
- assert(m_motions != NULL);
- return (m_motions + iMotion);
- }
- int CGraphicThing::GetModelCount() const
- {
- if (!m_pgrnFileInfo)
- return 0;
- return (m_pgrnFileInfo->ModelCount);
- }
- int CGraphicThing::GetMotionCount() const
- {
- if (!m_pgrnFileInfo)
- return 0;
- return (m_pgrnFileInfo->AnimationCount);
- }
- bool CGraphicThing::OnLoad(int iSize, const void * c_pvBuf)
- {
- if (!c_pvBuf)
- return false;
- m_pgrnFile = GrannyReadEntireFileFromMemory(iSize, (void *) c_pvBuf);
- if (!m_pgrnFile)
- return false;
- m_pgrnFileInfo = GrannyGetFileInfo(m_pgrnFile);
- if (!m_pgrnFileInfo)
- return false;
- LoadModels();
- LoadMotions();
- return true;
- }
- // SUPPORT_LOCAL_TEXTURE
- static std::string gs_modelLocalPath;
- const std::string& GetModelLocalPath()
- {
- return gs_modelLocalPath;
- }
- // END_OF_SUPPORT_LOCAL_TEXTURE
- bool CGraphicThing::LoadModels()
- {
- assert(m_pgrnFile != NULL);
- assert(m_models == NULL);
- if (m_pgrnFileInfo->ModelCount <= 0)
- return false;
- // SUPPORT_LOCAL_TEXTURE
- const std::string& fileName = GetFileNameString();
- //char localPath[256] = "";
- if (fileName.length() > 2 && fileName[1] != ':')
- {
- int sepPos = fileName.rfind('\\');
- gs_modelLocalPath.assign(fileName, 0, sepPos+1);
- }
- // END_OF_SUPPORT_LOCAL_TEXTURE
- int modelCount = m_pgrnFileInfo->ModelCount;
- m_models = new CGrannyModel[modelCount];
- for (int m = 0; m < modelCount; ++m)
- {
- CGrannyModel & rModel = m_models[m];
- granny_model * pgrnModel = m_pgrnFileInfo->Models[m];
- if (!rModel.CreateFromGrannyModelPointer(pgrnModel))
- return false;
- }
- GrannyFreeFileSection(m_pgrnFile, GrannyStandardRigidVertexSection);
- GrannyFreeFileSection(m_pgrnFile, GrannyStandardRigidIndexSection);
- GrannyFreeFileSection(m_pgrnFile, GrannyStandardDeformableIndexSection);
- GrannyFreeFileSection(m_pgrnFile, GrannyStandardTextureSection);
- return true;
- }
- bool CGraphicThing::LoadMotions()
- {
- assert(m_pgrnFile != NULL);
- assert(m_motions == NULL);
- if (m_pgrnFileInfo->AnimationCount <= 0)
- return false;
- int motionCount = m_pgrnFileInfo->AnimationCount;
- m_motions = new CGrannyMotion[motionCount];
- for (int m = 0; m < motionCount; ++m)
- if (!m_motions[m].BindGrannyAnimation(m_pgrnFileInfo->Animations[m]))
- return false;
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment