/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
//////////////////////////////////////////////////////////////////////////////
// //
// plCommonObjLib - Base class for a library of objects that are stored //
// in common pages (for now, that means Textures or //
// BuiltIn pages). //
// //
//// How To Use //////////////////////////////////////////////////////////////
// //
// Derive from this class and override the IsInteresting function to //
// filter out which objects you're interested in. Then, create an object //
// of this type (static is fine) before the export process begins. //
// //
// Then, when you are going to create an object in a common page, call //
// this lib to see if the object is already created. If so, it'll already //
// be loaded and ready to go, and you shouldn't create another one. Of //
// course, you always have the option of deleting it and creating another. //
// //
// The single biggest limitation is that objects in common pages can NOT //
// have ANY refs to ANY other objects in ANY other page. Otherwise, their //
// refs will get completely screwed up at export time. So don't do it!!! //
// //
//////////////////////////////////////////////////////////////////////////////
#ifndef _plCommonObjLib_h
#define _plCommonObjLib_h
#include "hsTemplates.h"
//// Class Definition /////////////////////////////////////////////////////////
class plCommonObjLibList;
class hsKeyedObject;
class plKey;
class plCommonObjLib
{
protected:
hsTArray fObjects;
public:
plCommonObjLib();
virtual ~plCommonObjLib();
/// Base utility functions
void AddObject( hsKeyedObject *object );
hsBool RemoveObjectAndKey( plKey &key );
hsKeyedObject *FindObject( const char *name, UInt16 classType = (UInt16)-1 );
void ClearObjectList( void );
/// THIS IS YOUR VIRTUAL HERE. Override this to define which objects you collect
virtual hsBool IsInteresting( const plKey &objectKey ) { return false; }
/// Static functions for use only by the export resManager
static UInt32 GetNumLibs( void );
static plCommonObjLib *GetLib( UInt32 idx );
private:
static plCommonObjLibList *fLibList;
};
#endif //_plCommonObjLib_h