2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
#ifndef _CELL_H
|
|
|
|
#define _CELL_H
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
2017-12-08 15:38:25 +01:00
|
|
|
#include "Forwards.h"
|
2017-08-08 13:53:47 +02:00
|
|
|
#include <set>
|
|
|
|
|
|
|
|
namespace Core {
|
|
|
|
|
2018-02-20 22:46:44 +01:00
|
|
|
typedef std::set< Entity::CharaPtr > CharaSet;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
class Cell
|
|
|
|
{
|
|
|
|
friend class Zone;
|
|
|
|
|
|
|
|
private:
|
|
|
|
bool m_bForcedActive;
|
|
|
|
uint16_t m_posX;
|
|
|
|
uint16_t m_posY;
|
2018-02-20 22:46:44 +01:00
|
|
|
CharaSet m_charas;
|
2017-08-08 13:53:47 +02:00
|
|
|
bool m_bActive;
|
2018-02-20 22:46:44 +01:00
|
|
|
bool m_bLoaded;
|
2017-08-08 13:53:47 +02:00
|
|
|
bool m_bUnloadPending;
|
|
|
|
|
|
|
|
uint16_t m_playerCount;
|
|
|
|
ZonePtr m_pZone;
|
|
|
|
|
|
|
|
public:
|
|
|
|
Cell();
|
|
|
|
~Cell();
|
|
|
|
|
2018-02-20 22:46:44 +01:00
|
|
|
void init( uint32_t x, uint32_t y, ZonePtr pZone );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-02-20 22:46:44 +01:00
|
|
|
void addChara( Entity::CharaPtr pAct );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-02-20 22:46:44 +01:00
|
|
|
void removeChara( Entity::CharaPtr pAct );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-02-20 22:46:44 +01:00
|
|
|
bool hasChara( Entity::CharaPtr pAct )
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
2018-02-20 22:46:44 +01:00
|
|
|
return (m_charas.find(pAct) != m_charas.end());
|
2017-08-08 13:53:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
bool hasPlayers() const
|
|
|
|
{
|
|
|
|
return ((m_playerCount > 0) ? true : false);
|
|
|
|
}
|
|
|
|
|
2018-02-20 22:46:44 +01:00
|
|
|
size_t getCharaCount() const
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
2018-02-20 22:46:44 +01:00
|
|
|
return m_charas.size();
|
2017-08-08 13:53:47 +02:00
|
|
|
}
|
|
|
|
|
2018-02-20 22:46:44 +01:00
|
|
|
void removeCharas();
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-02-20 22:46:44 +01:00
|
|
|
CharaSet::iterator begin()
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
2018-02-20 22:46:44 +01:00
|
|
|
return m_charas.begin();
|
2017-08-08 13:53:47 +02:00
|
|
|
}
|
|
|
|
|
2018-02-20 22:46:44 +01:00
|
|
|
CharaSet::iterator end()
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
2018-02-20 22:46:44 +01:00
|
|
|
return m_charas.end();
|
2017-08-08 13:53:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void setActivity(bool state);
|
|
|
|
|
|
|
|
bool isActive() const
|
|
|
|
{
|
|
|
|
return m_bActive;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool isLoaded() const
|
|
|
|
{
|
|
|
|
return m_bLoaded;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint32_t getPlayerCount() const
|
|
|
|
{
|
|
|
|
return m_playerCount;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool isUnloadPending() const
|
|
|
|
{
|
|
|
|
return m_bUnloadPending;
|
|
|
|
}
|
|
|
|
|
|
|
|
void setUnloadPending(bool up)
|
|
|
|
{
|
|
|
|
m_bUnloadPending = up;
|
|
|
|
}
|
|
|
|
|
|
|
|
void queueUnloadPending();
|
|
|
|
void cancelPendingUnload();
|
|
|
|
void unload();
|
|
|
|
|
|
|
|
void setPermanentActivity(bool val)
|
|
|
|
{
|
|
|
|
m_bForcedActive = val;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool isForcedActive() const
|
|
|
|
{
|
|
|
|
return m_bForcedActive;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint16_t getPosX() const
|
|
|
|
{
|
|
|
|
return m_posX;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint16_t getPosY() const
|
|
|
|
{
|
|
|
|
return m_posY;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
#endif
|