Files
Leviathan/Client/Game/game/Main/SGameWorldKeymapping.h
2026-06-01 12:46:52 +02:00

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();