void KeyState::Update(){ CheckKeyDown(); CheckKeyUp(); //store previous state previousState = InputMan::GetKeyboard()->GetKeyState(myKey); }
LRESULT WINAPI LoopFafaCheck( HWND w, UINT msg, WPARAM mw, LPARAM ml ) { HDC h ; switch( msg ) { case WM_SYSCOLORCHANGE: CreatePensBrushes() ; break ; case WM_CREATE : InitButtonWords( w ) ; if ( TstF( GetStyle(), FC_PRESELECT ) ) SetState( (WORD)FB_SELECTED ) ; break ; case WM_SETFONT: { HFONT f = (HFONT)mw ; SetFont(f) ; h = GetDC( w ) ; if ( TstF( GetStyle(), FC_BUTTONDRAW ) ) DrawFafaButton( w ,h ) ; else DrawFafaCheck( w ,h ) ; ReleaseDC( w, h ) ; break ; } case WM_CHANGEBITMAP: { HBITMAP f = (HBITMAP)ml ; WORD width = LOBYTE(mw) ; WORD height = HIBYTE(mw) ; LONG style = GetStyle() ; if (width == 255) { SIZE s; GetBitmapDimensionEx(f, &s); width = s.cx; height = s.cy; } SetBitmap(f) ; SetBitmapW(width) ; SetBitmapH(height) ; if (f) { /* Switch to Bitmap button */ style &= 0xffffff70 ; style |= (FC_BUTTONDRAW|FB_BITMAP) ; } else { /* Switch to Text button */ style &= 0xffffff70 ; /* default text style for check items */ if (style&FC_RADIO) style |= FC_CIR_DWN ; else style |= FC_REC_DWN ; } SetStyle(style) ; h = GetDC( w ) ; if ( TstF( GetStyle(), FC_BUTTONDRAW ) ) DrawFafaButton( w ,h) ; else DrawFafaCheck( w ,h) ; ReleaseDC( w, h ) ; break ; } case WM_GETFONT: return (LRESULT)GetFont() ; case WM_PAINT : if ( TstF( GetStyle(), FC_BUTTONDRAW ) ) RedrawFafaButton( w ) ; else RedrawFafaCheck( w ) ; break ; case WM_SETFOCUS: ChangeCheckFocus( w, 1 ) ; if ( GetAcc() && KeyIsDown( GetAcc() ) ) CheckKeyDown( w, 1 ) ; break ; case WM_KILLFOCUS: ChangeCheckFocus( w, 0 ) ; break ; case WM_ENABLE: if ( ( mw != 0 ) ^ IsDisabled() ) InvalidateRect( w, 0, 0 ) ; break ; case WM_RBUTTONDOWN: if ( ! TstF( GetStyle(), FC_RIGHTBUT ) ) break ; case WM_LBUTTONDOWN: SetFocus( w ) ; MouseDown( w ) ; break ; case WM_MOUSEMOVE: MouseMove( w, ml ) ; break ; case WM_RBUTTONUP: if ( ! TstF( GetStyle(), FC_RIGHTBUT ) ) break ; case WM_LBUTTONUP: MouseUp( w, ml ) ; break ; case FAFA_GETCHECK : #ifdef DEBUG_FAFA MyDebugMsg("State of check %x is %d\n",w,TstState(FB_SELECTED)); #endif return ( LONG ) TstState( FB_SELECTED ) ; case FAFA_SETCHECK : #ifdef DEBUG_FAFA MyDebugMsg("Setting Check %x to %d\n",w,mw) ; #endif if ( ChangeCheckSelect( w, ( mw != 0 ) ) && mw ) MakeRadioIteration( w ) ; break ; case WM_KEYDOWN: case WM_SYSKEYDOWN: case WM_KEYUP: case WM_SYSKEYUP: if ( mw == ' ' || KeyIsAcc( w, mw ) ) CheckKeyDown( w, IsMessDown( msg ) ) ; else return DefWindowProc( w, msg, mw, ml ) ; break; case WM_WHOAREYOU : return ( LONG ) FB_CHECK ; case WM_SETTEXT : InvalidateRect( w, 0, 0 ) ; default: return DefWindowProc( w, msg, mw, ml ) ; } return 0l ; }
void Player::Ctrl() { //プレイヤーがマップから落ちた場合はHPを0にする if(y > Screen_Height + 30)HP = 0; //プレイヤーが地面に接触しているかを確認 bool Flag = false; for(b2ContactEdge *i = GetBody()->GetContactList();i;i = i->next) { string Str = (char*)i->contact->GetFixtureB()->GetBody()->GetUserData(); if(i->contact->GetManifold()->localNormal.y == 1) { Flag = true; } } //プレイヤーのコンボが途切れていて、かつ地面にいる場合はADを初期化する if(ComboCount == 0 && Flag && JudgeSkillCancel())InitAllSkillAvailableCount(); //コンボが繋がった場合、EXゲージを増やす if(ComboCount > BeforeComboCount)EX += ComboCount; if(EX > MaxEX)EX = MaxEX; //スタン中は行動できない if(State == Skill_None_Stan && StateTime > 0)return; //スキルウィンドウ表示中は行動できない if(SkillWindow.Visible)return; //スキル使用 int Key[9] = {KEY_INPUT_Q,KEY_INPUT_W,KEY_INPUT_E, KEY_INPUT_A,KEY_INPUT_S,KEY_INPUT_D, KEY_INPUT_Z,KEY_INPUT_X,KEY_INPUT_C}; for(int i=0;i<9;i++) { if(CheckKeyDown(Key[i]) && (SkillSet[i%3][(int)(i/3)][3] > 0 || SkillSet[i%3][(int)(i/3)][3] == -1)) { if(SkillConsumeEX[SkillSet[i%3][(int)(i/3)][0]] <= EX) { if(UseSkill(SkillSet[i%3][(int)(i/3)][0],Equipments[0])) {//スキル使用成功時にはAD,EXを減らす EX -= SkillConsumeEX[SkillSet[i%3][(int)(i/3)][0]]; SkillSet[i%3][(int)(i/3)][3]--; } } } } //スキル使用中には移動、ジャンプができない if(!JudgeSkillCancel())return; b2Vec2 Vect = GetBody()->GetLinearVelocity(); //移動 if(CheckHitKey(KEY_INPUT_LEFT)) { Vect.x = -MoveSpeed; Direction = ImageDirection_Left; } if(CheckHitKey(KEY_INPUT_RIGHT)) { Vect.x = MoveSpeed; Direction = ImageDirection_Right; } if(Flag && CheckKeyDown(KEY_INPUT_SPACE)) {//ジャンプ(空中不可) Vect.y = -MoveSpeed*2.5; } //地面との摩擦 if(Flag && Vect.x != 0)Vect.x -= (float32)(Vect.x / fabs(Vect.x) * 0.13); //ベクトルを適用 GetBody()->SetLinearVelocity(Vect); }
int ReadAnalogEvent(int padnum, int analognum, int analogdir) { SDL_Joystick *js; int i, changed = 0, t; Sint16 axis; if (g.cfg.PadDef[padnum].DevNum >= 0) { js = SDL_JoystickOpen(g.cfg.PadDef[padnum].DevNum); SDL_JoystickEventState(SDL_IGNORE); } else { js = NULL; } for (t = 0; t < 1000000 / 1000; t++) { // check joystick events if (js != NULL) { SDL_JoystickUpdate(); for (i = 0; i < SDL_JoystickNumButtons(js); i++) { if (SDL_JoystickGetButton(js, i)) { g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].JoyEvType = BUTTON; g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].J.Button = i; changed = 1; goto end; } } for (i = 0; i < NUM_AXES(js); i++) { axis = SDL_JoystickGetAxis(js, i); if (abs(axis) > 16383 && (abs(axis - PrevAxisPos[i]) > 4096 || abs(axis - InitialAxisPos[i]) > 4096)) { g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].JoyEvType = AXIS; g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].J.Axis = (i + 1) * (axis > 0 ? 1 : -1); changed = 1; goto end; } PrevAxisPos[i] = axis; } for (i = 0; i < SDL_JoystickNumHats(js); i++) { axis = SDL_JoystickGetHat(js, i); if (axis != SDL_HAT_CENTERED) { g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].JoyEvType = HAT; if (axis & SDL_HAT_UP) { g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].J.Hat = ((i << 8) | SDL_HAT_UP); } else if (axis & SDL_HAT_DOWN) { g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].J.Hat = ((i << 8) | SDL_HAT_DOWN); } else if (axis & SDL_HAT_LEFT) { g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].J.Hat = ((i << 8) | SDL_HAT_LEFT); } else if (axis & SDL_HAT_RIGHT) { g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].J.Hat = ((i << 8) | SDL_HAT_RIGHT); } changed = 1; goto end; } } } // check keyboard events i = CheckKeyDown(); if (i != 0) { if (i != (kVK_Escape + 1)) g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].Key = i; changed = 1; goto end; } // check mouse events if (GetCurrentButtonState()) { changed = 2; goto end; } usleep(1000); } end: if (js != NULL) { SDL_JoystickClose(js); } return changed; }
void Player::StepSkillWindow() { //スキルウィンドウトグル if(CheckKeyDown(KEY_INPUT_LALT))SkillWindow.Visible = 1 - SkillWindow.Visible; //スキルウィンドウが有効であるかどうか確認 if(!SkillWindow.Visible)return; for(int i=0;i<3;i++) {//装備中武器に合わせたスキルセットを取得 EnableSkillList[i] = GetSkillList(GetEquipmentNameforEquipment(Equipments[i])); } //操作 if(!SkillChangeFlag) {//カーソルが左にあり、変更操作をおこなっていない状態 if(CheckKeyDown(KEY_INPUT_LEFT))SkillCursorPoint.x--; if(CheckKeyDown(KEY_INPUT_RIGHT))SkillCursorPoint.x++; if(CheckKeyDown(KEY_INPUT_UP))SkillCursorPoint.y--; if(CheckKeyDown(KEY_INPUT_DOWN))SkillCursorPoint.y++; if(SkillCursorPoint.x < 0)SkillCursorPoint.x = 2; else if(SkillCursorPoint.x > 2)SkillCursorPoint.x = 0; if(SkillCursorPoint.y < 0)SkillCursorPoint.y = 3; else if(SkillCursorPoint.y > 3)SkillCursorPoint.y = 0; }else {//スキル変更を行おうとしている状態 if(CheckKeyDown(KEY_INPUT_LEFT))ChangeSkillPoint.x--; if(CheckKeyDown(KEY_INPUT_RIGHT))ChangeSkillPoint.x++; if(SkillCursorPoint.y != 0) {//スキル変更 if(CheckKeyDown(KEY_INPUT_UP)) { ChangeSkillPoint.x = 0; ChangeSkillPoint.y--; } if(CheckKeyDown(KEY_INPUT_DOWN)) { ChangeSkillPoint.x = 0; ChangeSkillPoint.y++; } int Length = EnableSkillList[ChangeSkillPoint.y-1].size()-1; if(Length < ChangeSkillPoint.x)ChangeSkillPoint.x = 0; else if(0 > ChangeSkillPoint.x)ChangeSkillPoint.x = Length; if(ChangeSkillPoint.y < 1)ChangeSkillPoint.y = 3; else if(ChangeSkillPoint.y > 3)ChangeSkillPoint.y = 1; }else {//装備変更 int Length = GetArrayLength(EquipmentNames)-1; if(ChangeSkillPoint.x < 0)ChangeSkillPoint.x = Length; else if(ChangeSkillPoint.x > Length)ChangeSkillPoint.x = 0; } } if(CheckKeyDown(KEY_INPUT_RETURN)) {//変更決定 if(!SkillChangeFlag) { ChangeSkillPoint.x = 0; ChangeSkillPoint.y = SkillCursorPoint.y; }else { if(SkillCursorPoint.y != 0) { SkillSet[SkillCursorPoint.x][SkillCursorPoint.y-1][0] = EnableSkillList[ChangeSkillPoint.y-1][ChangeSkillPoint.x]; SkillSet[SkillCursorPoint.x][SkillCursorPoint.y-1][3] = 0; }else Equipments[SkillCursorPoint.x] = ChangeSkillPoint.x; for(int i=0;i<3;i++) {//装備中武器に合わせたスキルセットを取得 EnableSkillList[i] = GetSkillList(GetEquipmentNameforEquipment(Equipments[i])); } #pragma region 使用できないスキルを検索し、無効にする vector<POINT> Points; int Skill[3][3]; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { Skill[i][j] = 0; } } for(int i=0;i<3;i++) { int Length = EnableSkillList[i].size(); for(int j=0;j<Length;j++) { for(int x=0;x<3;x++) { for(int y=0;y<3;y++) { if(SkillSet[x][y][0] == EnableSkillList[i][j]) { Skill[x][y] = 1; } } } } } for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { if(!Skill[i][j]) { SkillSet[i][j][0] = 0; } } } #pragma endregion } if(SkillChangeFlag)ChangeSkillPoint.x = ChangeSkillPoint.y = -1; SkillChangeFlag = 1 - SkillChangeFlag; } //描画 SkillWindow.ReWindow(); SkillWindow.SetDrawThisWindow(); //DrawBox(15,10,110,35,Black,false); //パネルの制作 int Length = AnimeGraphs.size(); for(int i=0;i<Length;i++) { SkillPanels[i].ReWindow(); SkillPanels[i].SetDrawThisWindow(); SkillImages[i].x = SkillPanels[i].GetWidth()/2; SkillImages[i].y = SkillPanels[i].GetHeight()/2+24; SkillImages[i].Draw(true); } Length = EquipmentGraphs.size(); for(int i=0;i<Length;i++) { EquipmentPanels[i].ReWindow(); EquipmentPanels[i].SetDrawThisWindow(); EquipmentImages[i].x = EquipmentPanels[i].GetWidth()/2; EquipmentImages[i].y = EquipmentPanels[i].GetHeight()/2+24; EquipmentImages[i].Draw(true); } SkillWindow.SetDrawThisWindow(); for(int i=0;i<4;i++) { for(int j=0;j<3;j++) { int Select1 = 0,Select2 = 0; if(SkillCursorPoint.x == j && SkillCursorPoint.y == i)Select1 = 10; if(ChangeSkillPoint.x == j && ChangeSkillPoint.y == i && SkillChangeFlag)Select2 = 10; if(i>0) {//スキル窓の描画 //DrawRotaGraph2(15+j*70+32,50+i*70+32,64,40,1,0,AnimeGraphs[SkillSet[j][i-1][0]][0],true); if(i < 4) {//使用中スキル SkillPanels[SkillSet[j][i-1][0]].x = 15+j*70; SkillPanels[SkillSet[j][i-1][0]].y = 50+i*70-Select1; SkillPanels[SkillSet[j][i-1][0]].Draw(); } /* if(EnableSkillList[i-1].size() > j) { SkillPanels[EnableSkillList[i-1][j]].x = 15+j*70 + SkillWindow.GetWidth()/2; SkillPanels[EnableSkillList[i-1][j]].y = 50+i*70-Select2; SkillPanels[EnableSkillList[i-1][j]].Draw(); } */ }else {//装備窓の描画 //使用中装備 EquipmentPanels[Equipments[j]].x = 15+j*70; EquipmentPanels[Equipments[j]].y = 50+i*70-Select1; EquipmentPanels[Equipments[j]].Draw(); } //DrawBox(15+j*70,50+i*70,15+j*70+64,50+i*70+64,Black,false); } } for(int i=0;i<4;i++) { for(int j=0;j<5;j++) { int Select2 = 0; if(i>0) {//スキル窓の描画 int ShowSkill = j + ChangeSkillPoint.x - 2; if(ChangeSkillPoint.x < 2)ShowSkill += 2 - ChangeSkillPoint.x; else if(ChangeSkillPoint.x >= EnableSkillList[i-1].size()-2)ShowSkill -= ChangeSkillPoint.x - (EnableSkillList[i-1].size()-3); if(ChangeSkillPoint.x == ShowSkill && ChangeSkillPoint.y == i && SkillChangeFlag)Select2 = 10; if(EnableSkillList[i-1].size() <= j)continue; SkillPanels[EnableSkillList[i-1][ShowSkill]].x = 15+j*70 + SkillWindow.GetWidth()/2; SkillPanels[EnableSkillList[i-1][ShowSkill]].y = 50+i*70-Select2; SkillPanels[EnableSkillList[i-1][ShowSkill]].Draw(); }else {//装備窓の描画 int ShowEquip = j; if(ChangeSkillPoint.x >= 5 && ChangeSkillPoint.y == i)ShowEquip += ChangeSkillPoint.x - 4; if(ChangeSkillPoint.x == ShowEquip && ChangeSkillPoint.y == i && SkillChangeFlag)Select2 = 10; if(GetArrayLength(EquipmentValueNames) > ShowEquip) { EquipmentPanels[ShowEquip].x = 15+j*70 + SkillWindow.GetWidth()/2; EquipmentPanels[ShowEquip].y = 50+i*70-Select2; EquipmentPanels[ShowEquip].Draw(); } } } } InfoPanel.ReWindow(); InfoPanel2.ReWindow(); //装備、スキル説明の描画 string StrInfo; if(SkillCursorPoint.y != 0)StrInfo = SkillInfo[SkillSet[SkillCursorPoint.x][SkillCursorPoint.y-1][0]]; else StrInfo = EquipmentInfo[Equipments[SkillCursorPoint.x]]; InfoPanel.DrawStringInWindow(5,5,DrawString_Left,StrInfo,FontSmall,White); SkillWindow.SetDrawThisWindow(); InfoPanel.Draw(); StrInfo = ""; if(SkillChangeFlag) { if(SkillCursorPoint.y != 0)StrInfo = SkillInfo[EnableSkillList[ChangeSkillPoint.y-1][ChangeSkillPoint.x]]; else StrInfo = EquipmentInfo[ChangeSkillPoint.x]; InfoPanel2.DrawStringInWindow(5,5,DrawString_Left,StrInfo,FontSmall,White); } SkillWindow.SetDrawThisWindow(); InfoPanel2.Draw(); SetDrawScreen(DX_SCREEN_BACK); SkillWindow.Draw(); }