Files
src-1.2/engine/server/library/serverGame/src/shared/object/BuildingObject.h
T

195 lines
6.5 KiB
C++
Executable File

// ======================================================================
//
// BuildingObject.h
//
// Copyright 2002 Sony Online Entertainment
//
// ======================================================================
#ifndef BuildingObject_H
#define BuildingObject_H
// ======================================================================
#include "Archive/AutoDeltaSetObserver.h"
#include "serverGame/TangibleObject.h"
#include "serverGame/CellPermissions.h"
#include "sharedTerrain/TerrainGenerator.h"
// ======================================================================
class ServerBuildingObjectTemplate;
class CreatureObject;
// ======================================================================
/**
* A BuildingObject is the base class for all large structures that players will be placing.
*/
class BuildingObject : public TangibleObject
{
public:
explicit BuildingObject(const ServerBuildingObjectTemplate* newTemplate);
virtual ~BuildingObject();
virtual BuildingObject * asBuildingObject();
virtual BuildingObject const * asBuildingObject() const;
virtual float alter(float time);
static void removeDefaultTemplate(void);
virtual Controller* createDefaultController(void);
void addMembersToPackages ();
virtual void getAttributes (stdvector<std::pair<std::string, Unicode::String> >::fwd &data) const;
int getMaintenanceCost() const;
void setMaintenanceCost(int newConst);
real getTimeLastChecked() const;
void setTimeLastChecked(real newTime);
int getCityId() const;
void setCityId(int cityId);
bool getIsPublic() const;
void setIsPublic(bool isPublic);
void addBanned(std::string const &name);
void removeBanned(std::string const &name);
void removeAllBanned();
void addAllowed(std::string const &name);
void removeAllowed(std::string const &name);
void removeAllAllowed();
bool isAllowed(CreatureObject const &who) const;
bool isPlayerPlaced() const;
bool isSpaceDungeon() const;
bool playersWithAlignedEnemyFlagsAllowed() const;
virtual bool isVisibleOnClient(const Client & client) const;
CellPermissions::PermissionList const &getAllowed() const;
CellPermissions::PermissionList const &getBanned() const;
void expelObject(ServerObject &who);
bool getContentsLoaded() const;
void handleCMessageTo(const MessageToPayload &message);
virtual void onPermanentlyDestroyed();
virtual void onAllContentsLoaded();
void onCellContentsLoaded();
virtual void onAddedToWorld();
void gainedPlayer(ServerObject const &player);
void lostPlayer(ServerObject const &player);
virtual void changeTeleportDestination(Vector & position, float & yaw) const;
void loadContents(bool immediate = false);
bool unloadContents();
struct BuildingObjectPointerHash
{
size_t operator()(const BuildingObject * const ptr) const
{
return (reinterpret_cast<const size_t>(ptr) >> 4);
};
};
typedef stdunordered_set<const BuildingObject *, BuildingObjectPointerHash>::fwd AllBuildingsSet;
static const AllBuildingsSet & getAllBuildings();
protected:
virtual void initializeFirstTimeObject();
virtual void endBaselines();
virtual void onLoadedFromDatabase();
virtual const SharedObjectTemplate * getDefaultSharedTemplate(void) const;
private:
BuildingObject();
BuildingObject(const BuildingObject& rhs);
BuildingObject& operator=(const BuildingObject& rhs);
typedef Archive::AutoDeltaVariableObserver<bool, CellPermissions::UpdateObserver, BuildingObject> ObservedBool;
typedef Archive::AutoDeltaSetObserver<CellPermissions::PermissionObject, CellPermissions::UpdateObserver, BuildingObject> ObservedPermissionObjectSet;
private:
static const SharedObjectTemplate * m_defaultSharedTemplate; // template to use if no shared template is given
// BPM BuildingObject : TangibleObject // Begin persisted members.
Archive::AutoDeltaVariable<int> m_maintenanceCost; ///< The weekly cost (in credits) of maintaining this Building.
Archive::AutoDeltaVariable<real> m_timeLastChecked; ///< The in-game time this Building was last accessed by the player.
Archive::AutoDeltaVariable<int> m_cityId; ///< The player city id this building is assigned to
ObservedBool m_isPublic;
ObservedPermissionObjectSet m_allowed;
ObservedPermissionObjectSet m_banned;
Archive::AutoDeltaVariable<bool> m_contentsLoaded;
// EPM
bool m_checkCreatePortalVolume;
unsigned long m_unloadTime;
};
// ======================================================================
inline int BuildingObject::getMaintenanceCost() const
{
return m_maintenanceCost.get();
}
// ----------------------------------------------------------------------
inline void BuildingObject::setMaintenanceCost(int newConst)
{
m_maintenanceCost = newConst;
}
// ----------------------------------------------------------------------
inline real BuildingObject::getTimeLastChecked() const
{
return m_timeLastChecked.get();
}
// ----------------------------------------------------------------------
inline void BuildingObject::setTimeLastChecked(real newTime)
{
m_timeLastChecked = newTime;
}
// ----------------------------------------------------------------------
inline bool BuildingObject::getIsPublic() const
{
return m_isPublic.get();
}
// ----------------------------------------------------------------------
inline CellPermissions::PermissionList const &BuildingObject::getAllowed() const
{
return m_allowed.get();
}
// ----------------------------------------------------------------------
inline CellPermissions::PermissionList const &BuildingObject::getBanned() const
{
return m_banned.get();
}
// ----------------------------------------------------------------------
inline int BuildingObject::getCityId() const
{
return m_cityId.get();
}
// ----------------------------------------------------------------------
inline bool BuildingObject::getContentsLoaded() const
{
return m_contentsLoaded.get();
}
// ======================================================================
#endif // BuildingObject_H