Files
Sun1602/Server/GameServer/Status/StatusFactory.h
T
2022-10-26 12:25:11 +08:00

75 lines
2.3 KiB
C++

#pragma once
#ifndef GAMESERVER_STATUS_FACTORY_H
#define GAMESERVER_STATUS_FACTORY_H
//==================================================================================================
class AbilityStatus; class WoundStatus; class StunStatus;
class AbsorbStatus; class CureStatus; class BlindStatus;
class MagicShieldStatus;class FearStatus; class SPBonusStatus;
class ChaosStatus; class WindShieldStatus; class MirrorStatus;
class ThrustStatus; class SleepStatus; class LowHPStatus;
class BonusDamageStatus;class DragonTransStatus;class SummonStatus;
class BaseStatus; class StyleThrust; class StyleStun;
class StyleDown; class RecoverStatus; class SteelStatus;
class IncompetenceStatus; class IntensifySummon;
class SuctionStatus; class ChangeAttrStatus; class TransparentStatus;
class VitalSuctionStatus; class BattleStatus; class EnchantPoisonStatus;
//==================================================================================================
class StatusFactory
{
public:
struct IStatusAllocator {
virtual ~IStatusAllocator() = 0;
virtual BaseStatus* Allocate() const = 0;
virtual void Deallocate(BaseStatus* ptr) const = 0;
};
template<class StatusType_>
struct StatusAllocNode;
//
enum eStatusPoolIndex;
//
virtual ~StatusFactory();
// util::Singletone interfaces
static StatusFactory* Instance();
void Release();
BaseStatus* AllocStatus(eCHAR_STATE_TYPE state_id, BOOL is_ability = true);
void FreeStatus(BaseStatus* status);
void DisplayPoolInfo();
private:
// <eCHAR_STATE_TYPE, link_index>
typedef STLX_HASH_MAP<uint16_t, uint16> STATUS_ROUTING_TABLE;
//
StatusFactory();
static StatusFactory* CreateInstance();
static bool SetupMappingTable(StatusFactory* factory);
//
STATUS_ROUTING_TABLE status_routing_table_;
static StatusFactory* status_factory_static_;
};
//==================================================================================================
// implements
//
// interfaces for util::Singleton<>
inline StatusFactory* StatusFactory::Instance()
{
if (status_factory_static_) {
return status_factory_static_;
}
return CreateInstance();
}
#endif //GAMESERVER_STATUS_FACTORY_H