150 lines
4.5 KiB
C++
150 lines
4.5 KiB
C++
#pragma once
|
|
|
|
class WiseUser;
|
|
class GameZone;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
struct sZONE_MOVINFO_ARG
|
|
{
|
|
eZONETYPE ZONETYPE_CUR;
|
|
FIELDCODE FIELDCODE_CUR;
|
|
|
|
eZONETYPE ZONETYPE_NEXT;
|
|
FIELDCODE FIELDCODE_NEXT;
|
|
|
|
eZONE_STATE ZONESTATE_CUR;
|
|
};
|
|
|
|
struct sMAP_POS_ARG
|
|
{
|
|
enum ePOS { X = 0, Y = 1, Z = 2, MAX = 3 };
|
|
DWORD SUBCMD;
|
|
DWORD ANGLE;
|
|
FLOAT XYZ_CUR[sMAP_POS_ARG::ePOS::MAX];
|
|
FLOAT XYZ_DEST[sMAP_POS_ARG::ePOS::MAX];
|
|
};
|
|
|
|
class sZONE_CTRL_INFO
|
|
{
|
|
public:
|
|
//#define DECL_CONST_MEMBER static const eFLAG
|
|
DECL_CONST_MEMBER MAX_SIZE = 31;
|
|
DECL_CONST_MEMBER BIT_TUTORIAL_PROCESS = 10;
|
|
//#undef DECL_SP_CONST_MEMBER
|
|
|
|
private: typedef util::BitSetOperation<MAX_SIZE> ZONE_LC_BITS;
|
|
|
|
public: inline void Clear() { m_Bits.ClearAll(); }
|
|
inline BOOL IsEnable(DWORD flag) { return m_Bits.IsSet(flag); }
|
|
inline void Enabled(DWORD flag) { m_Bits.Set(flag); }
|
|
inline void Disabled(DWORD flag) { m_Bits.UnSet(flag); }
|
|
|
|
private: ZONE_LC_BITS m_Bits;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
class ZoneControl
|
|
{
|
|
public: ZoneControl();
|
|
~ZoneControl();
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// <INTERFACEs>
|
|
public: inline void SetWiseUser(WiseUser* pUser) { m_pUser = pUser; }
|
|
inline GameZone* GetGameZone() { return m_pGameZone; }
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// <INTERFACEs>
|
|
public:
|
|
enum eZONE_MOV_CMD
|
|
{
|
|
CMD_ZONE_ARG_CLEAR , // + 입력된 ARG 초기화
|
|
CMD_ZONE_GET_CUR_INFO , // 현재 상태 출력
|
|
CMD_ZONE_MOV_START , // 이동 시작, pARG, _CUR, _NEXT 정보 입력 요구됨
|
|
CMD_ZONE_MOV_END , // 이동 완료
|
|
CMD_ZONE_CLEAR , // 종료 관련, 내부 정보 초기화
|
|
CMD_ZONE_MAX ,
|
|
};
|
|
BOOL ZoneMoveCmd(eZONE_MOV_CMD IN zCMD, sZONE_MOVINFO_ARG* IN OUT pARG);
|
|
BOOL CanUseZoneMoveCmd() { return TRUE; } // 아직 구현 미정
|
|
|
|
enum eMAP_POS_CMD
|
|
{
|
|
CMD_POS_ARG_CLEAR , //
|
|
CMD_POS_GET_CUR_INFO , // 현재 위치 출력
|
|
CMD_POS_SET_CUR_INFO , // 주어진 인자값으로 위치 설정
|
|
CMD_POS_CALC_MOV_DIRECTION , // 방향키에 의한 이동시 계산 루틴
|
|
CMD_POS_CALC_MOV_TARGET , // 특정 영역 지정 이동시 계산 루틴
|
|
CMD_POS_CLEAR , // 종료 관련, 내부 정보 초기화
|
|
CMD_POS_MAX ,
|
|
};
|
|
BOOL MapPosCmd(eMAP_POS_CMD IN mCMD, sMAP_POS_ARG* IN OUT pARG);
|
|
inline BOOL& MapPosCmdBlockMode() { return m_bMapPosCmdBlock; }
|
|
|
|
inline sZONE_CTRL_INFO& ZONE_CTRL_INFO() { return m_ZONE_CTRL_INFO; }
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// <eZONE_MOV_CMD::HANDLERs>
|
|
private: BOOL _CMD_ZONE_ARG_CLEAR(sZONE_MOVINFO_ARG* IN OUT pARG);
|
|
BOOL _CMD_ZONE_GET_CUR_INFO(sZONE_MOVINFO_ARG* OUT pARG);
|
|
// 1) _CMD_ZONE_GET_CUR_INFO
|
|
// 2) 이동할 위치 설정
|
|
// 3) _CMD_ZONE_MOV_START
|
|
BOOL _CMD_ZONE_MOV_START(sZONE_MOVINFO_ARG* IN pARG);
|
|
// ARG = NULL
|
|
BOOL _CMD_ZONE_MOV_END(sZONE_MOVINFO_ARG* IN pARG);
|
|
// ARG = NULL
|
|
BOOL _CMD_ZONE_CLEAR(sZONE_MOVINFO_ARG* pARG);
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// <eZONE_MOV_CMD::HANDLERs>
|
|
private: BOOL _CMD_POS_ARG_CLEAR(sMAP_POS_ARG* IN OUT pARG);
|
|
BOOL _CMD_POS_GET_CUR_INFO(sMAP_POS_ARG* OUT pARG);
|
|
BOOL _CMD_POS_SET_CUR_INFO(sMAP_POS_ARG* IN pARG);
|
|
BOOL _CMD_POS_CALC_MOV_DIRECTION(sMAP_POS_ARG* IN pARG);
|
|
BOOL _CMD_POS_CALC_MOV_TARGET(sMAP_POS_ARG* IN pARG);
|
|
BOOL _CMD_POS_CLEAR(sMAP_POS_ARG* IN pARG);
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// <eZONE_MOV_CMD>
|
|
private: inline BOOL _IsZoneTransaction()
|
|
{
|
|
BOOL bTrans = (BOOL)(ePRS_BEFORE_ENTER_ZONE&m_ZONE_MOV_INFO.ZONESTATE_CUR ? TRUE : FALSE);
|
|
return bTrans;
|
|
}
|
|
|
|
void _GetZoneStateByMoving(eZONE_STATE& rzsSTATE);
|
|
void _GetZoneStateByMoved(eZONE_STATE& rzsSTATE);
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// <eMAP_POS_CMD>
|
|
private:
|
|
|
|
private:
|
|
|
|
private: //eZONE_POS m_eZONE_POS;
|
|
//eZONE_MOV_TRANS m_eZONE_MOV_TRANS;
|
|
typedef BOOL (ZoneControl::*fnZONE_HANDLER)(sZONE_MOVINFO_ARG* IN OUT pARG);
|
|
typedef BOOL (ZoneControl::*fnPOS_HANDLER)(sMAP_POS_ARG* IN OUT pARG);
|
|
|
|
WiseUser* m_pUser;
|
|
GameZone* m_pGameZone;
|
|
|
|
BOOL m_bMapPosCmdBlock;
|
|
|
|
sZONE_MOVINFO_ARG m_ZONE_MOV_INFO;
|
|
sMAP_POS_ARG m_MAP_POS_INFO;
|
|
fnZONE_HANDLER m_ZONE_HANDLERS[eZONE_MOV_CMD::CMD_ZONE_MAX];
|
|
fnPOS_HANDLER m_POS_HANDLERS[eMAP_POS_CMD::CMD_POS_MAX];
|
|
sZONE_CTRL_INFO m_ZONE_CTRL_INFO;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|