#include "stdafx.h" //#include "SGameMessageUI.h" #include "SGameWorldKeymapping.h" #include "SStringDB.h" #include "KUIControlEdit.h" //sfreer 키맵핑 기능 추가 2009.03.16 const int VK_I_SPACE = 300; SGameWorldKeymapping::SGameWorldKeymapping() { Clear(); //SetDefaultKeymapping(); setBasickeyInit(); } SGameWorldKeymapping::~SGameWorldKeymapping() { m_BasicKeyMapList.clear(); } void SGameWorldKeymapping::Clear() { for(int i=0;i= VK_F1 && wParam <= VK_F12) // F1 F2 F3, F4, F5, F6, F7, F8, F9, F10, F11, F12 || (wParam >= '0' && wParam <= '9') // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 || (wParam >= 'A' && wParam <= 'Z') //A~Z || (wParam >= VK_OEM_1 && wParam <= VK_OEM_3) // : + , - . /? ~` || (wParam >= VK_OEM_4 && wParam <= VK_OEM_7) // [{ \| ]} '" || wParam == VK_OEM_NEC_EQUAL // = || wParam == VK_BACK //백커서 || wParam == VK_CAPITAL //Caps Lock || (wParam >= VK_SPACE && wParam <= VK_DOWN) //(Space),(Pageup),(Pagedown),(End), (Home) //(화살표위), (화살표아래), (화살표좌), (화살표우) || wParam == VK_INSERT // (Insert) || wParam == VK_DELETE // (Delete) || wParam == VK_NUMLOCK //(NumLock) || (wParam >= VK_NUMPAD0 && wParam <= VK_DIVIDE && wParam != VK_SEPARATOR) //(숫자키패드/), (숫자키패드*), (숫자키패드-), //(숫자키패드7), (숫자키패드8), (숫자키패드9), //(숫자키패드4), (숫자키패드5), (숫자키패드6), //(숫자키패드1), (숫자키패드2), (숫자키패드3), //(숫자키패드0), (숫자키패드 Del), (숫자키패드+) || wParam == VK_I_SPACE // I or Space경우.. 기존 라펠즈처럼 인벤토리에 사용된다. || wParam == VK_TAB // 2010.07.08 - prodongi ) { return true; } return false; } bool SGameWorldKeymapping::IsValidKey(const KEYEX &pKey) { //단축키는 한개만.. { int fkc=0; if(pKey.bAlt) fkc++; if(pKey.bShift) fkc++; if(pKey.bCtrl) fkc++; if(fkc>1) return false; } bool r = IsVaildUnityKey(pKey.wParam); if(pKey.bAlt && (pKey.wParam == VK_OEM_PLUS)) // alt + '=' 는 전각/반각 변환키 임으로 입력을 막는다. 2009.04.28. sfreer return false; return r; //return IsVaildUnityKey(pKey.wParam); } int SGameWorldKeymapping::SetKeymapping(int iHotKeyCode, const KEYEX &pHotKey, bool ignorevalidcheck) { if(iHotKeyCode>=HOTKEYCODE::MAX || iHotKeyCode < 0) return -1; if(!IsValidKey(pHotKey)&&!ignorevalidcheck) { eraseKey(iHotKeyCode); // 유효한 키값이 없으므로 지워주자. return -1; } m_CurKeyMapTable[iHotKeyCode] = pHotKey; m_HotKeyStringInfo[iHotKeyCode] = ""; m_HotKeyStringInfo2[iHotKeyCode] = ""; std::string tempsz = ""; if(pHotKey.bCtrl) tempsz += "Ctrl";// + "; if(pHotKey.bAlt) { if(tempsz.empty()) tempsz += "Alt";// + "; else tempsz += " + Alt";// + "; } if(pHotKey.bShift) { if(tempsz.empty()) tempsz += "Shift";// + "; else tempsz += " + Shift";// + "; } if(!tempsz.empty()) { m_HotKeyStringInfo[iHotKeyCode] = tempsz; m_HotKeyStringInfo[iHotKeyCode] += " + "; m_HotKeyStringInfo2[iHotKeyCode] = tempsz; m_HotKeyStringInfo2[iHotKeyCode] += "
+"; } tempsz = ""; WPARAM wParam = pHotKey.wParam; if(wParam >= '0' && wParam <= '9' // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 || wParam >= 'A' && wParam <= 'Z') //A~Z { tempsz += static_cast(wParam); } else { switch(wParam) { case VK_F1: tempsz += "F1"; break; case VK_F2: tempsz += "F2"; break; case VK_F3: tempsz += "F3"; break; case VK_F4: tempsz += "F4"; break; case VK_F5: tempsz += "F5"; break; case VK_F6: tempsz += "F6"; break; case VK_F7: tempsz += "F7"; break; case VK_F8: tempsz += "F8"; break; case VK_F9: tempsz += "F9"; break; case VK_F10: tempsz += "F10"; break; case VK_F11: tempsz += "F11"; break; case VK_F12: tempsz += "F12"; break; case VK_OEM_1: tempsz += ":"; break; case VK_OEM_PLUS: tempsz += "="; break; case VK_OEM_COMMA: tempsz += ","; break; case VK_OEM_MINUS: tempsz += "-"; break; case VK_OEM_PERIOD: tempsz += "."; break; case VK_OEM_2: tempsz += "/"; break; case VK_OEM_3: tempsz += "~"; break; case VK_OEM_4: tempsz += "["; break; case VK_OEM_5: tempsz += "\\"; break; case VK_OEM_6: tempsz += "]"; break; case VK_OEM_7: tempsz += "'"; break; case VK_OEM_NEC_EQUAL: tempsz += "'"; break; case VK_BACK: tempsz += "BS"; break; case VK_CAPITAL:tempsz += "CapsLock"; break; case VK_SPACE: tempsz += "Spacebar"; break; case VK_PRIOR: tempsz += "PgUp"; break; case VK_NEXT: tempsz += "PgDn"; break; case VK_END: tempsz += "End"; break; case VK_HOME: tempsz += "Home"; break; case VK_LEFT: tempsz += "Left"; break; case VK_UP: tempsz += "Up"; break; case VK_RIGHT: tempsz += "Right"; break; case VK_DOWN: tempsz += "Down"; break; case VK_INSERT: tempsz += "Ins"; break; case VK_DELETE: tempsz += "Del"; break; case VK_NUMLOCK:tempsz += "Num"; break; case VK_NUMPAD0:tempsz += "Num 0"; break; case VK_NUMPAD1:tempsz += "Num 1"; break; case VK_NUMPAD2:tempsz += "Num 2"; break; case VK_NUMPAD3:tempsz += "Num 3"; break; case VK_NUMPAD4:tempsz += "Num 4"; break; case VK_NUMPAD5:tempsz += "Num 5"; break; case VK_NUMPAD6:tempsz += "Num 6"; break; case VK_NUMPAD7:tempsz += "Num 7"; break; case VK_NUMPAD8:tempsz += "Num 8"; break; case VK_NUMPAD9:tempsz += "Num 9"; break; case VK_MULTIPLY: tempsz += "Num *"; break; case VK_ADD: tempsz += "Num +"; break; case VK_SUBTRACT: tempsz += "Num -"; break; case VK_DECIMAL:tempsz += "Num ."; break; case VK_DIVIDE: tempsz += "Num /"; break; case VK_TAB: tempsz += "Tab"; break; case VK_I_SPACE: tempsz += "( I or Space )"; break; } } m_HotKeyStringInfo[iHotKeyCode] += tempsz; m_HotKeyStringInfo2[iHotKeyCode] += tempsz; return iHotKeyCode; } std::string SGameWorldKeymapping::GetHotKeyStringInfo(int iHotKeyCode) { if(iHotKeyCode>=HOTKEYCODE::MAX || iHotKeyCode < 0) return ""; if(m_HotKeyStringInfo[iHotKeyCode].empty() ) return S(6911); return m_HotKeyStringInfo[iHotKeyCode]; } std::string SGameWorldKeymapping::GetHotKeyStringInfo2(int iHotKeyCode) { if(iHotKeyCode>=HOTKEYCODE::MAX || iHotKeyCode < 0) return ""; if(m_HotKeyStringInfo2[iHotKeyCode].empty() ) return "";//S(6911); return m_HotKeyStringInfo2[iHotKeyCode]; } KEYEX SGameWorldKeymapping::GetKeymapping(int iHotKeyCode) { if(iHotKeyCode>=HOTKEYCODE::MAX || iHotKeyCode < 0) return KEYEX(); return m_CurKeyMapTable[iHotKeyCode]; } int SGameWorldKeymapping::GetHotKeyState(int iHotKeyCode) { if(iHotKeyCode>=HOTKEYCODE::MAX || iHotKeyCode < 0) return -1; return m_StateHotKeyList[iHotKeyCode]; } int SGameWorldKeymapping::GetKeymapping(const KEYEX &HotKey) { for(int i=0;i=HOTKEYCODE::MAX || iHotKeyCode <0 ) return false; return m_PushedHotKeyList[iHotKeyCode]; } KEYEX SGameWorldKeymapping::GetKeymapTable(int iHotKeyCode) { if(iHotKeyCode>=HOTKEYCODE::MAX || iHotKeyCode <0 ) return KEYEX(); return KEYEX(m_CurKeyMapTable[iHotKeyCode]); } SGameWorldKeymapping& SGameWorldKeymapping::operator = ( const SGameWorldKeymapping& keymapping ) { Clear(); for(int i=0;ibAlt && !pMsg->bCtrl && !pMsg->bCtrlShift && !pMsg->bShift && !pMsg->bTab && *this != _tempprevrappelzstyle) { WPARAM wParam = pMsg->wParam; if( (wParam >= '0' && wParam <= '9') // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 || (wParam >= 'A' && wParam <= 'Z') //A~Z || (wParam >= VK_OEM_1 && wParam <= VK_OEM_3) // : + , - . /? ~` || (wParam >= VK_OEM_4 && wParam <= VK_OEM_7) // [{ \| ]} '" || wParam == VK_OEM_NEC_EQUAL // = || wParam == VK_BACK //백커서 || wParam == VK_SPACE //(Space) || wParam == VK_END //(End) || wParam == VK_HOME //(Home) || wParam == VK_LEFT //(화살표위), (화살표아래), (화살표좌), (화살표우) || wParam == VK_UP || wParam == VK_RIGHT || wParam == VK_DOWN || wParam == VK_INSERT // (Insert) || wParam == VK_DELETE // (Delete) ) { return; } }*/ if(!KUIControlEdit::IsNobodyHasFocus() && *this != _tempprevrappelzstyle) { return; } for(int i=0;ibUp) { m_StateHotKeyList[i] = KEYSTATE::UP; m_PushedHotKeyList[i] = false; } else { m_StateHotKeyList[i] = KEYSTATE::DOWN; m_PushedHotKeyList[i] = true; } } else if(m_CurKeyMapTable[i].wParam == VK_I_SPACE)// { if(pMsg->bAlt == m_CurKeyMapTable[i].bAlt && pMsg->bCtrl == m_CurKeyMapTable[i].bCtrl && pMsg->bShift == m_CurKeyMapTable[i].bShift && ( pMsg->wParam == 'I' || pMsg->wParam == VK_SPACE ) ) { if(pMsg->bUp) { m_StateHotKeyList[i] = KEYSTATE::UP; m_PushedHotKeyList[i] = false; } else { m_StateHotKeyList[i] = KEYSTATE::DOWN; m_PushedHotKeyList[i] = true; } } else { //VK_I_SPACE가 아닐경우 예외처리 //2009-05-14 : hunee m_StateHotKeyList[i] = KEYSTATE::NONE; } } else { m_StateHotKeyList[i] = KEYSTATE::NONE; } } } void SGameWorldKeymapping::SkipMode(bool b) { m_SkipMode = b; } bool SGameWorldKeymapping::IsEmpty() { for(int i=0;i::iterator it = m_BasicKeyMapList.begin(); it = m_BasicKeyMapList.find(hotkeycode); if(it == m_BasicKeyMapList.end() ) { assert("기본키값을 찾을 수 없음"); return KEYEX(); } DEFAULT_KEYS key = it->second; return key.getKey(keyType); } void SGameWorldKeymapping::newKeySetting(int version) { if( version <= 1 ) // 버전이 0또는 1일 경우 setKey_EPIC8_P1_1(); //if( version <= n ) // 2번 이후 부터는 여기로 추가.. // neskeyVerSion_n+1(); } void SGameWorldKeymapping::setKey_EPIC8_P1_1() { // 1. 추가된 키 { const int ADD_CODE_MAX = 2; int keyCode[ADD_CODE_MAX] = {HOTKEYCODE::TITLE, HOTKEYCODE::ARENASCORE}; for(int i=0 ; i