108 lines
2.6 KiB
C++
108 lines
2.6 KiB
C++
#ifndef PROGRAMCOMMON_BATTLEGROUNDTIMEINFOPARSER_H_
|
|
#define PROGRAMCOMMON_BATTLEGROUNDTIMEINFOPARSER_H_
|
|
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif
|
|
|
|
#include <SolarHashTable.h>
|
|
#include <Singleton.h>
|
|
#include <SolarFileReader.h>
|
|
#include <ScriptCode.IParser.h>
|
|
|
|
namespace ns_func {
|
|
|
|
enum eBATTLEGROUND_TIMEMODE
|
|
{
|
|
eNONE = 0,
|
|
eCOUNTDOWN_5MINUTES, // 전장 시작 5분전
|
|
eOPENED, // 전장 open
|
|
|
|
eTIMEMODE_MAX
|
|
};
|
|
|
|
struct BattleGroundTime
|
|
{
|
|
typedef util::TimeInfoPerFrame::AcmTmFmt AcmTmFmt;
|
|
eBATTLEGROUND_TIMEMODE time_mode;
|
|
};
|
|
|
|
struct BattleGroundTimeNode : public BattleGroundTime
|
|
{
|
|
bool check_event;
|
|
uint16_t day_flag;
|
|
AcmTmFmt start_time;
|
|
AcmTmFmt end_time;
|
|
ulong string_code;
|
|
bool IsInRange(AcmTmFmt query_time) const;
|
|
};
|
|
|
|
inline bool BattleGroundTimeNode::IsInRange(AcmTmFmt query_time) const
|
|
{
|
|
if (start_time <= query_time && query_time < end_time) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
}; // end of namespace
|
|
|
|
|
|
class BattleGroundTimeInfoParser : public util::Singleton<BattleGroundTimeInfoParser>, public IParser
|
|
{
|
|
public:
|
|
enum DayFlag
|
|
{
|
|
//스크립트 요일값
|
|
//1:일요일, 2:월요일 ... 7:토요일
|
|
kMinDay = 0,
|
|
kMaxDay = 7,
|
|
};
|
|
|
|
enum
|
|
{
|
|
kOpenTimeMaxCount = 15,
|
|
kEventTimeModeCounts = 2,
|
|
k24hours = 24 * 60,
|
|
};
|
|
|
|
typedef ns_func::BattleGroundTimeNode BattleGroundTimeNode;
|
|
|
|
BattleGroundTimeInfoParser() :
|
|
number_of_time_nodes_(0),
|
|
time_node_array_(NULL)
|
|
{
|
|
}
|
|
~BattleGroundTimeInfoParser()
|
|
{
|
|
}
|
|
|
|
virtual void Release();
|
|
virtual BOOL LoadScript(eSCRIPT_CODE scriptCode, BOOL bReload);
|
|
|
|
bool GetCurrentTimeNode(const util::TimeInfoPerFrame& time_info, uint16_t day_flag,
|
|
ns_func::BattleGroundTimeNode* result_node) const;
|
|
|
|
// 가장 '최근' 해당 time_mode의 노드를 가져온다
|
|
bool GetLatestEventTimeNode(const util::TimeInfoPerFrame& time_info,
|
|
ns_func::BattleGroundTimeNode* result_node,
|
|
const ns_func::eBATTLEGROUND_TIMEMODE& time_mode);
|
|
|
|
|
|
private:
|
|
void Unload();
|
|
bool _Load(bool reload);
|
|
void _SetTimeInfo(BattleGroundTimeNode* time_node,
|
|
const BattleGroundTimeNode::AcmTmFmt input_open_time,
|
|
const ns_func::eBATTLEGROUND_TIMEMODE time_mode,
|
|
const DWORD string_code);
|
|
|
|
private:
|
|
typedef STLX_MULTIMAP<uint16_t, const BattleGroundTimeNode*> OpenTimeTable;
|
|
int number_of_time_nodes_;
|
|
BattleGroundTimeNode* time_node_array_;
|
|
OpenTimeTable open_time_table_;
|
|
};
|
|
#endif //PROGRAMCOMMON_BATTLEGROUNDTIMEINFOPARSER_H_
|