292 lines
7.6 KiB
C++
292 lines
7.6 KiB
C++
|
|
#pragma once
|
|
|
|
//#include <string>
|
|
//#include <vector>
|
|
#include <map>
|
|
//#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<int, DEFAULT_KEYS> 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();
|
|
|