Files
Sun1602/ProgramCommon/BattleGroundTimeInfoParser.h
T
2022-10-26 12:25:11 +08:00

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_