Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
79 lines
2.1 KiB
C++
79 lines
2.1 KiB
C++
// ObjectContainer.cpp: implementation of the CObjectContainer class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "ObjectContainer.h"
|
|
#include "SceneManager.h"
|
|
#include "GMMemory.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
CObjectContainer::CObjectContainer()
|
|
{
|
|
|
|
}
|
|
|
|
CObjectContainer::~CObjectContainer()
|
|
{
|
|
DeleteAllObject();
|
|
}
|
|
|
|
CMeshObject* CObjectContainer::GetObject(char *strObjectName, bool isAlpha, bool isLight)
|
|
{
|
|
int i=0;
|
|
for(;i<(int)m_ObjectContainer.size();i++)
|
|
{
|
|
if( strcmp(m_ObjectContainer[i]->m_strObjectName,strObjectName)==0 )
|
|
//&& m_ObjectContainer[i]->m_isAlpha == isAlpha &&m_ObjectContainer[i]->m_isLight == isLight)
|
|
{
|
|
m_ObjectContainer[i]->m_nUsed++;
|
|
return m_ObjectContainer[i]->m_pObject;
|
|
}
|
|
}
|
|
Load(strObjectName,isAlpha,isLight);
|
|
return m_ObjectContainer[i]->m_pObject;
|
|
}
|
|
|
|
void CObjectContainer::Load(char *strObjectName,bool isAlpha,bool isLight)
|
|
{
|
|
CSceneManager::m_MeshObjectContainer.SetPath(OBJECTPATH);
|
|
CMeshObject *pObject=NULL;
|
|
|
|
pObject=CSceneManager::m_MeshObjectContainer.GetMeshObject(strObjectName);
|
|
pObject->ConvertNormal();
|
|
ObjectNode *AddNode=new ObjectNode(pObject,strObjectName,isAlpha,isLight);
|
|
m_ObjectContainer.push_back(AddNode);
|
|
}
|
|
|
|
void CObjectContainer::DeleteObject(char *strObjectName, bool isAlpha, bool isLight)
|
|
{
|
|
for(int i=0;i<(int)m_ObjectContainer.size();i++)
|
|
{
|
|
if( strcmp(m_ObjectContainer[i]->m_strObjectName,strObjectName)==0 &&
|
|
m_ObjectContainer[i]->m_isAlpha==isAlpha &&
|
|
m_ObjectContainer[i]->m_isLight==isLight)
|
|
{
|
|
if(--m_ObjectContainer[i]->m_nUsed==0)
|
|
{
|
|
ObjectNode *delNode=m_ObjectContainer[i];
|
|
CSceneManager::m_MeshObjectContainer.DeleteMeshObject(delNode->m_strObjectName);
|
|
delete delNode;
|
|
m_ObjectContainer.erase(m_ObjectContainer.begin()+i);
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
void CObjectContainer::DeleteAllObject()
|
|
{
|
|
for(int i=0;i<(int)m_ObjectContainer.size();i++)
|
|
{
|
|
ObjectNode *delNode=m_ObjectContainer[i];
|
|
delete delNode;
|
|
}
|
|
m_ObjectContainer.clear();
|
|
}
|