khanat-opennel-code/code/ryzom/client/src/streamable_entity_composite.h

68 lines
2.2 KiB
C++

// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef CL_STREAMABLE_ENTITY_COMPOSITE
#define CL_STREAMABLE_ENTITY_COMPOSITE
#include "streamable_entity.h"
#include <vector>
/** A group of streamable entity
*/
class CStreamableEntityComposite : public IStreamableEntity
{
public:
// dtor
~CStreamableEntityComposite();
/// Add an entity. it is then owned by this obj.
void add(IStreamableEntity *entity);
/// optimisation : make room for further adds
void reserve(uint size);
/// Remove an entity (& delete it)
void remove(IStreamableEntity *entity);
/// Remove all entities (& elte them)
void removeAll();
/// Get the number of entity
uint getNumEntities() const { return (uint)_Entities.size(); }
/// Get an entity by its index
IStreamableEntity *getEntity(uint index) const { return _Entities[index]; }
//\name from IStreamableEntity
//@{
/** Given a pos, test whether one entity needs to be loaded now.
* It it returns true, the next call to update will return only when the loading of an entity is completed.
*/
virtual bool needCompleteLoading(const NLMISC::CVector &pos) const;
/// Load / Unload entity depeneding on the player position
virtual void update(const NLMISC::CVector &pos);
virtual void forceUpdate(const NLMISC::CVector &pos, NLMISC::IProgressCallback &progress);
/// Force unloading of all entitie
virtual void forceUnload();
//@}
private:
typedef std::vector<IStreamableEntity *> TStreambleEntities;
TStreambleEntities _Entities;
};
#endif