#pragma once //#include //#include #include //#include "SGameMessageUI.h" //sfreer 키맵핑 기능 추가 2009.03.16 namespace { } enum KEYSTATE { NONE, UP, DOWN }; enum HOTKEYCODE { CROWSHOP, INVENTORY, SKILL, CHARACTER, CREATUREFORMATION, CREATURESKILL, CREATUREINFO, MESSENGER, GUILD, PARTY_FOLD, /// 2012.01.11 파티 보이기/숨기기 기능에서 접기/펴기 기능으로 바뀜 - prodongi QUEST, WOLRDMAP, CONTROL, HELP, SYSTEM, OPTION, SLOTUPDOWN, SLOTCHANGE, // 2010.08.13. 무기스왑 으로 사용. bintitle. INSTANCEGAME, //MOVECLICK, //없어졌으나 일단 냅둔다;; //CAMERAMOVE, //없어졌으나 일단 냅둔다;; EXIT, TARGETWINDOW, INTERFACEHIDE, MINIMAPZOOMIN, MINIMAPZOOMOUT, PKMODE, AUTOTARGETING, PICKUPITEM, // You should not insert something in the middle of the quickslot SLOT1_01, SLOT1_02, SLOT1_03, SLOT1_04, SLOT1_05, SLOT1_06, SLOT1_07, SLOT1_08, SLOT1_09, SLOT1_10, SLOT1_11, SLOT1_12, SLOT2_01, SLOT2_02, SLOT2_03, SLOT2_04, SLOT2_05, SLOT2_06, SLOT2_07, SLOT2_08, SLOT2_09, SLOT2_10, SLOT2_11, SLOT2_12, SLOT3_01, SLOT3_02, SLOT3_03, SLOT3_04, SLOT3_05, SLOT3_06, SLOT3_07, SLOT3_08, SLOT3_09, SLOT3_10, SLOT3_11, SLOT3_12, SLOT4_01, SLOT4_02, SLOT4_03, SLOT4_04, SLOT4_05, SLOT4_06, SLOT4_07, SLOT4_08, SLOT4_09, SLOT4_10, SLOT4_11, SLOT4_12, SLOT5_01, SLOT5_02, SLOT5_03, SLOT5_04, SLOT5_05, SLOT5_06, SLOT5_07, SLOT5_08, SLOT5_09, SLOT5_10, SLOT5_11, SLOT5_12, SLOT6_01, SLOT6_02, SLOT6_03, SLOT6_04, SLOT6_05, SLOT6_06, SLOT6_07, SLOT6_08, SLOT6_09, SLOT6_10, SLOT6_11, SLOT6_12, SLOT7_01, SLOT7_02, SLOT7_03, SLOT7_04, SLOT7_05, SLOT7_06, SLOT7_07, SLOT7_08, SLOT7_09, SLOT7_10, SLOT7_11, SLOT7_12, SLOT8_01, SLOT8_02, SLOT8_03, SLOT8_04, SLOT8_05, SLOT8_06, SLOT8_07, SLOT8_08, SLOT8_09, SLOT8_10, SLOT8_11, SLOT8_12, // 2010.10.07 - prodongi DURABILITY, // 2010.08.17. 내구도출력. bintitle. DESTRUCTION, // 2010.09.02. 파괴창. bintitle. //servantes 2010.11.3 EQUIP_WND, // 장작창 UPGRADE_WND, // 강화창 ITEMCOMBINE_WND, // 조합창 REPAIR_WND, // 수리/복원/충전 /// 2011.11.23 파티원 단축키 - prodongi PARTY_1, PARTY_2, PARTY_3, PARTY_4, PARTY_5, PARTY_6, PARTY_7, PARTY_8, TITLE, // 2012. 6. 7 - marine 호칭 창 ARENASCORE, // 2012. 6. 28 - marine 아레나 스코어 HMOVE_UP, HMOVE_DOWN, HMOVE_LEFT, HMOVE_RIGHT, PARTYMATCHING_WND,// 파티매칭 MAX }; struct KEYEX { KEYEX() {bAlt = bShift = bCtrl =false; wParam=0;} KEYEX(const KEYEX &key) { bAlt = key.bAlt; bShift = key.bShift; bCtrl = key.bCtrl; wParam = key.wParam; } KEYEX( const SIMSG_HOTKEY_EX &msgkey) { bAlt = msgkey.bAlt; bShift = msgkey.bShift; bCtrl = msgkey.bCtrl; wParam = msgkey.wParam; } KEYEX(bool a, bool s, bool c, WPARAM k) { bAlt = a; bShift = s; bCtrl = c; wParam = k; } KEYEX& operator = ( const KEYEX& key ) { bAlt = key.bAlt; bShift = key.bShift; bCtrl = key.bCtrl; wParam = key.wParam; return *this; } KEYEX& operator = ( const SIMSG_HOTKEY_EX& key ) { bAlt = key.bAlt; bShift = key.bShift; bCtrl = key.bCtrl; wParam = key.wParam; return *this; } bool operator == ( const KEYEX& key ) { if( bAlt == key.bAlt && bShift == key.bShift && bCtrl == key.bCtrl && wParam == key.wParam ) return true; return false; } bool operator != ( const KEYEX& key ) { return !(operator ==(key)); } bool operator == ( const SIMSG_HOTKEY_EX &msgkey) { if( bAlt == msgkey.bAlt && bShift == msgkey.bShift && bCtrl == msgkey.bCtrl && wParam == msgkey.wParam ) return true; if(wParam == VK_TAB && msgkey.bTab == 1 && bAlt == msgkey.bAlt && bShift == msgkey.bShift && bCtrl == msgkey.bCtrl ) { return true; } return false; } bool operator != ( const SIMSG_HOTKEY_EX &msgkey) { return !(operator ==(msgkey)); } BOOL bAlt; //Alt 1 : On BOOL bShift; //Shift 1 : On BOOL bCtrl; //Ctrl 1 : On WPARAM wParam;//Key }; enum DEF_KEYTYPE { NOT_USE = 0, DEFAULT = 0, // 기본키 ALT_KEY = 1, // alt + 기본키 (예전 라펠즈 타입) }; struct DEFAULT_KEYS { KEYEX key1; KEYEX key2; const KEYEX getKey( int type ) { if(type == DEF_KEYTYPE::DEFAULT) return key1; else return key2; } void setkey(KEYEX w1, KEYEX w2) { key1 = w1; key2 = w2; } }; class SGameWorldKeymapping { public: SGameWorldKeymapping(); ~SGameWorldKeymapping(); /// 기본키설정으로 void SetDefaultKeymapping(); /// 이전라펠즈설정 void SetPrevRappelzDefaultKeymapping(); /* void LoadUserKeymapping(); //서버에서 데이터 가져오기 void SaveUserKeymapping(); //서버에 데이터 보내기 void SetTempKeymapping(); //임시키테이블값으로(그이전키설정값)으로 void SaveToTempKeymapping(); //현재값을 임시테이블값으로 저장하기. void LoadTempKeymapping(); //임시테이블값을 서버에서 가져오기. void SaveTempKeymapping(); //임시테이블값을 서버에 저장하기. 시나리오모음 게임 처음기동시 LoadUserKeymapping(), LoadTempKeymapping(); 사용 키맵핑에서 확인버튼 누를시 SaveUserKeymapping(), SaveToTempKeymapping(), SaveTempKeymapping() 수능로 작업. */ bool IsValidKey(const KEYEX &pKey); bool IsVaildUnityKey(WPARAM wParam); int SetKeymapping(/*Number,단축키*/int iHotKeyCode, const KEYEX &pHotKey, bool ignorevalidcheck=false); int GetKeymapping(const KEYEX &pHotKey); KEYEX GetKeymapping(int iHotKeyCode); //int GetKeymapping(const SIMSG_HOTKEY_EX *pHotKey); //const SIMSG_HOTKEY_EX *GetKeymapping(int iHotKeyCode); std::string GetHotKeyStringInfo(int iHotKeyCode); /// 이건 퀵슬롯을 위한 멀티라인버전 String정보이다. std::string GetHotKeyStringInfo2(int iHotKeyCode); int GetHotKeyState(int iHotKeyCode); bool IsHotKeyPushed(int iHotKeyCode); KEYEX GetKeymapTable(int iHotKeyCode); void PreHotkey(SIMSG_HOTKEY_EX *pMsg); void Clear(); SGameWorldKeymapping& operator = ( const SGameWorldKeymapping& keymapping ); bool operator == ( const SGameWorldKeymapping& keymapping ); bool operator != ( const SGameWorldKeymapping& keymapping ); bool IsSkipMode() { return m_SkipMode; } void SkipMode(bool b); bool IsEmpty(); bool IsEnterChat() { return m_EnterChat; } void EnterChat(bool b) { m_EnterChat = b; } private: //KEYEX m_TempKeyMapTable1[HOTKEYCODE::MAX];//임시 키맵 테이블 - 이전 상태 저장용 KEYEX m_CurKeyMapTable[HOTKEYCODE::MAX]; ///< 현재 키맵 테이블 //차후 해쉬 도입 int m_StateHotKeyList[HOTKEYCODE::MAX]; ///< 현재 핫키 상태.... bool m_PushedHotKeyList[HOTKEYCODE::MAX]; std::string m_HotKeyStringInfo[HOTKEYCODE::MAX]; std::string m_HotKeyStringInfo2[HOTKEYCODE::MAX]; // 퀵슬롯용으로 사용된다. bool m_SkipMode; bool m_EnterChat; ///< GameOption에도 저장되고 이곳에도 저장된다.... 일단 GameOption은 차후 제거하도록 하자. std::map m_BasicKeyMapList; public: void setBasickeyInit(); // 기본 설정 키 넣기 KEYEX getBasicKey(int hotkeycode, int keyType = 0); // 기본 설정된 키값 얻기 void newKeySetting(int version); // 버전이 바뀌었을 때 바뀐 키들 셋팅을 다시 해준다. void eraseKey(int index); // 키삭제 void setKey_EPIC8_P1_1(); // Epic8.part1 키맵핑 bool IsMovingKey(KEYEX key); // 바꾸려는 키가 이동키인지 체크 void EnableMoveKey(bool bEnable); // 이동키 설정 }; SGameWorldKeymapping &GetGameKeymapping(); SGameWorldKeymapping &GetGameSavedKeymapping();