MIDITrail をピカピカにする。鍵盤方向自動切替・多ポート・歌詞対応等
Revision | 0e7d12d8b69b96e81a0a4769106bb6e2c986e5a4 (tree) |
---|---|
Time | 2019-08-28 05:14:27 |
Author | yoshy <yoshy@user...> |
Commiter | yoshy |
[UPGRADE] original 1.2.6
@@ -39,7 +39,8 @@ DXRenderer::~DXRenderer() | ||
39 | 39 | //****************************************************************************** |
40 | 40 | int DXRenderer::Initialize( |
41 | 41 | HWND hWnd, |
42 | - unsigned long multiSampleType //省略時はゼロ:アンチエイリアシング無効 | |
42 | + unsigned long multiSampleType, //省略時はゼロ:アンチエイリアシング無効 | |
43 | + bool isFullScreen //省略時はfalse:フルスクリーン無効 | |
43 | 44 | ) |
44 | 45 | { |
45 | 46 | int result = 0; |
@@ -48,9 +49,17 @@ int DXRenderer::Initialize( | ||
48 | 49 | bool isSupport = false; |
49 | 50 | D3DMULTISAMPLE_TYPE type = D3DMULTISAMPLE_NONE; |
50 | 51 | unsigned long qualityLevels = 0; |
52 | + BOOL apiresult = FALSE; | |
53 | + RECT windowRect; | |
51 | 54 | |
52 | 55 | m_hWnd = hWnd; |
53 | 56 | |
57 | + apiresult = GetWindowRect(m_hWnd, &windowRect); | |
58 | + if (!apiresult) { | |
59 | + result = YN_SET_ERR("Windows API error.", GetLastError(), 0); | |
60 | + goto EXIT; | |
61 | + } | |
62 | + | |
54 | 63 | if (DX_MULTI_SAMPLE_TYPE_MAX < multiSampleType) { |
55 | 64 | result = YN_SET_ERR("Program error.", multiSampleType, 0); |
56 | 65 | goto EXIT; |
@@ -81,6 +90,11 @@ int DXRenderer::Initialize( | ||
81 | 90 | m_D3DPP.SwapEffect = D3DSWAPEFFECT_DISCARD; //ダブルバッファリングスワップ指定 |
82 | 91 | m_D3DPP.EnableAutoDepthStencil = TRUE; //深度ステンシルバッファ作成 |
83 | 92 | m_D3DPP.AutoDepthStencilFormat = D3DFMT_D16; //自動深度ステンシルサーフェスフォーマット |
93 | + if (isFullScreen) { | |
94 | + m_D3DPP.Windowed = FALSE; //ウインドウ内表示の指定 | |
95 | + m_D3DPP.BackBufferWidth = windowRect.right - windowRect.left; //バッファサイズ | |
96 | + m_D3DPP.BackBufferHeight = windowRect.bottom - windowRect.top; //バッファサイズ | |
97 | + } | |
84 | 98 | |
85 | 99 | //アンチエイリアシング有効化 |
86 | 100 | if (multiSampleType >= DX_MULTI_SAMPLE_TYPE_MIN) { |
@@ -4,7 +4,7 @@ | ||
4 | 4 | // |
5 | 5 | // レンダラクラス |
6 | 6 | // |
7 | -// Copyright (C) 2010-2012 WADA Masashi. All Rights Reserved. | |
7 | +// Copyright (C) 2010-2019 WADA Masashi. All Rights Reserved. | |
8 | 8 | // |
9 | 9 | //****************************************************************************** |
10 | 10 |
@@ -39,7 +39,7 @@ public: | ||
39 | 39 | public: |
40 | 40 | |
41 | 41 | //初期化 |
42 | - int Initialize(HWND hWnd, unsigned long multiSampleType = 0); | |
42 | + int Initialize(HWND hWnd, unsigned long multiSampleType = 0, bool isFullScreen = false); | |
43 | 43 | |
44 | 44 | //デバイス取得 |
45 | 45 | LPDIRECT3DDEVICE9 GetDevice(); |
@@ -82,6 +82,7 @@ BEGIN | ||
82 | 82 | MENUITEM "Viewpoint 3\t9", IDM_VIEWPOINT3 |
83 | 83 | MENUITEM SEPARATOR |
84 | 84 | MENUITEM "Window size...", IDM_WINDOWSIZE |
85 | + MENUITEM "Full Screen\tF11", IDM_FULLSCREEN | |
85 | 86 | END |
86 | 87 | POPUP "Option" |
87 | 88 | BEGIN |
@@ -110,7 +110,7 @@ | ||
110 | 110 | <DebugInformationFormat>EditAndContinue</DebugInformationFormat> |
111 | 111 | </ClCompile> |
112 | 112 | <Link> |
113 | - <AdditionalDependencies>dxerr.lib;dxguid.lib;d3dx9.lib;d3d9.lib;dinput8.lib;winmm.lib;SMIDILib.lib;YNBaseLib.lib;imagehlp.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies> | |
113 | + <AdditionalDependencies>dxerr.lib;dxguid.lib;d3dx9.lib;d3d9.lib;dinput8.lib;winmm.lib;XInput.lib;SMIDILib.lib;YNBaseLib.lib;imagehlp.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies> | |
114 | 114 | <AdditionalLibraryDirectories>$(SolutionDir)\bin\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> |
115 | 115 | <GenerateDebugInformation>true</GenerateDebugInformation> |
116 | 116 | <SubSystem>Windows</SubSystem> |
@@ -133,7 +133,7 @@ | ||
133 | 133 | <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> |
134 | 134 | </ClCompile> |
135 | 135 | <Link> |
136 | - <AdditionalDependencies>dxerr.lib;dxguid.lib;d3dx9.lib;d3d9.lib;dinput8.lib;winmm.lib;SMIDILib.lib;YNBaseLib.lib;imagehlp.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies> | |
136 | + <AdditionalDependencies>dxerr.lib;dxguid.lib;d3dx9.lib;d3d9.lib;dinput8.lib;winmm.lib;XInput.lib;SMIDILib.lib;YNBaseLib.lib;imagehlp.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies> | |
137 | 137 | <AdditionalLibraryDirectories>$(SolutionDir)\x64\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> |
138 | 138 | <GenerateDebugInformation>true</GenerateDebugInformation> |
139 | 139 | <SubSystem>Windows</SubSystem> |
@@ -154,7 +154,7 @@ | ||
154 | 154 | </ClCompile> |
155 | 155 | <Link> |
156 | 156 | <AdditionalOptions>/PDBALTPATH:%_PDB% %(AdditionalOptions)</AdditionalOptions> |
157 | - <AdditionalDependencies>dxerr.lib;dxguid.lib;d3dx9.lib;d3d9.lib;dinput8.lib;winmm.lib;SMIDILib.lib;YNBaseLib.lib;imagehlp.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies> | |
157 | + <AdditionalDependencies>dxerr.lib;dxguid.lib;d3dx9.lib;d3d9.lib;dinput8.lib;winmm.lib;XInput.lib;SMIDILib.lib;YNBaseLib.lib;imagehlp.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies> | |
158 | 158 | <AdditionalLibraryDirectories>$(SolutionDir)\bin\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> |
159 | 159 | <GenerateDebugInformation>true</GenerateDebugInformation> |
160 | 160 | <SubSystem>Windows</SubSystem> |
@@ -180,7 +180,7 @@ | ||
180 | 180 | </ClCompile> |
181 | 181 | <Link> |
182 | 182 | <AdditionalOptions>/PDBALTPATH:%_PDB% %(AdditionalOptions)</AdditionalOptions> |
183 | - <AdditionalDependencies>dxerr.lib;dxguid.lib;d3dx9.lib;d3d9.lib;dinput8.lib;winmm.lib;SMIDILib.lib;YNBaseLib.lib;imagehlp.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies> | |
183 | + <AdditionalDependencies>dxerr.lib;dxguid.lib;d3dx9.lib;d3d9.lib;dinput8.lib;winmm.lib;XInput.lib;SMIDILib.lib;YNBaseLib.lib;imagehlp.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies> | |
184 | 184 | <AdditionalLibraryDirectories>$(SolutionDir)\x64\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> |
185 | 185 | <GenerateDebugInformation>true</GenerateDebugInformation> |
186 | 186 | <SubSystem>Windows</SubSystem> |
@@ -218,6 +218,7 @@ | ||
218 | 218 | <ClCompile Include="MTFirstPersonCam.cpp" /> |
219 | 219 | <ClCompile Include="MTFont2Bmp.cpp" /> |
220 | 220 | <ClCompile Include="MTFontTexture.cpp" /> |
221 | + <ClCompile Include="MTGamePadCtrl.cpp" /> | |
221 | 222 | <ClCompile Include="MTGraphicCfgDlg.cpp" /> |
222 | 223 | <ClCompile Include="MTGridBox.cpp" /> |
223 | 224 | <ClCompile Include="MTGridBoxLive.cpp" /> |
@@ -282,6 +283,7 @@ | ||
282 | 283 | <ClInclude Include="MTFirstPersonCam.h" /> |
283 | 284 | <ClInclude Include="MTFont2Bmp.h" /> |
284 | 285 | <ClInclude Include="MTFontTexture.h" /> |
286 | + <ClInclude Include="MTGamePadCtrl.h" /> | |
285 | 287 | <ClInclude Include="MTGraphicCfgDlg.h" /> |
286 | 288 | <ClInclude Include="MTGridBox.h" /> |
287 | 289 | <ClInclude Include="MTGridBoxLive.h" /> |
@@ -32,6 +32,9 @@ | ||
32 | 32 | <Filter Include="Sources\Dialog"> |
33 | 33 | <UniqueIdentifier>{0346b7cc-b30c-4603-870f-2f75d5d335ed}</UniqueIdentifier> |
34 | 34 | </Filter> |
35 | + <Filter Include="Sources\XInputUtility"> | |
36 | + <UniqueIdentifier>{d054de01-6c08-4761-ae2f-dacf689ea8ea}</UniqueIdentifier> | |
37 | + </Filter> | |
35 | 38 | </ItemGroup> |
36 | 39 | <ItemGroup> |
37 | 40 | <Image Include="MIDITrail.ico"> |
@@ -215,6 +218,9 @@ | ||
215 | 218 | <ClCompile Include="MTWindowSizeCfgDlg.cpp"> |
216 | 219 | <Filter>Sources\Dialog</Filter> |
217 | 220 | </ClCompile> |
221 | + <ClCompile Include="MTGamePadCtrl.cpp"> | |
222 | + <Filter>Sources\XInputUtility</Filter> | |
223 | + </ClCompile> | |
218 | 224 | </ItemGroup> |
219 | 225 | <ItemGroup> |
220 | 226 | <ClInclude Include="MIDITrailApp.h"> |
@@ -397,5 +403,8 @@ | ||
397 | 403 | <ClInclude Include="MTWindowSizeCfgDlg.h"> |
398 | 404 | <Filter>Sources\Dialog</Filter> |
399 | 405 | </ClInclude> |
406 | + <ClInclude Include="MTGamePadCtrl.h"> | |
407 | + <Filter>Sources\XInputUtility</Filter> | |
408 | + </ClInclude> | |
400 | 409 | </ItemGroup> |
401 | 410 | </Project> |
\ No newline at end of file |
@@ -49,6 +49,8 @@ MIDITrailApp::MIDITrailApp(void) | ||
49 | 49 | m_Accel = NULL; |
50 | 50 | m_Title[0] = _T('\0'); |
51 | 51 | m_WndClassName[0] = _T('\0'); |
52 | + m_isFullScreen = false; | |
53 | + m_hMenu = NULL; | |
52 | 54 | |
53 | 55 | //レンダリング系 |
54 | 56 | m_pScene = NULL; |
@@ -96,6 +98,9 @@ MIDITrailApp::MIDITrailApp(void) | ||
96 | 98 | |
97 | 99 | //次回オープン対象ファイルパス |
98 | 100 | m_NextFilePath[0] = _T('\0'); |
101 | + | |
102 | + //ゲームパッド用視点番号 | |
103 | + m_GamePadViewPointNo = 0; | |
99 | 104 | } |
100 | 105 | |
101 | 106 | //****************************************************************************** |
@@ -214,6 +219,10 @@ int MIDITrailApp::Initialize( | ||
214 | 219 | result = _StartTimer(); |
215 | 220 | if (result != 0) goto EXIT; |
216 | 221 | |
222 | + //ゲームパッド制御:ユーザインデックス0固定 | |
223 | + result = m_GamePadCtrl.Initialize(0); | |
224 | + if (result != 0) goto EXIT; | |
225 | + | |
217 | 226 | EXIT:; |
218 | 227 | return result; |
219 | 228 | } |
@@ -288,6 +297,13 @@ int MIDITrailApp::Run() | ||
288 | 297 | if (result != 0) { |
289 | 298 | YN_SHOW_ERR(m_hWnd); |
290 | 299 | } |
300 | + | |
301 | + //ゲームパッド操作処理 | |
302 | + result = _GamePadProc(); | |
303 | + if (result != 0) { | |
304 | + YN_SHOW_ERR(m_hWnd); | |
305 | + } | |
306 | + | |
291 | 307 | //ウィンドウ表示状態でのみ描画を行う |
292 | 308 | GetWindowPlacement(m_hWnd, &wndpl); |
293 | 309 | if ((wndpl.showCmd != SW_HIDE) && |
@@ -343,7 +359,7 @@ int MIDITrailApp::_RegisterClass( | ||
343 | 359 | wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MIDITRAIL)); |
344 | 360 | //アイコンリソースハンドル |
345 | 361 | wcex.hCursor = LoadCursor(NULL, IDC_ARROW); //カーソルリソースハンドル |
346 | - wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); //背景用ブラシハンドル | |
362 | + wcex.hbrBackground = CreateSolidBrush(RGB(0, 0, 0)); //背景用ブラシハンドル:黒 | |
347 | 363 | wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MIDITRAIL); //メニューリソース名称 |
348 | 364 | wcex.lpszClassName = m_WndClassName; //ウィンドウクラス名称 |
349 | 365 | wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); |
@@ -390,6 +406,9 @@ int MIDITrailApp::_CreateWindow( | ||
390 | 406 | result = YN_SET_ERR("Windows API error.", GetLastError(), 0); |
391 | 407 | goto EXIT; |
392 | 408 | } |
409 | + | |
410 | + //メニューバー表示切替のためウィンドウ生成直後にハンドルを取得しておく | |
411 | + m_hMenu = GetMenu(m_hWnd); | |
393 | 412 | |
394 | 413 | //ユーザー設定ウィンドウサイズ変更 |
395 | 414 | result = _SetWindowSize(); |
@@ -419,6 +438,12 @@ int MIDITrailApp::_SetWindowSize() | ||
419 | 438 | RECT wrect, crect; |
420 | 439 | int ww, wh, cw, ch, framew, frameh; |
421 | 440 | int applyToViewArea = 0; |
441 | + LONG apiresult = 0; | |
442 | + | |
443 | + if (m_isFullScreen) { | |
444 | + result = _SetWindowSizeFullScreen(); | |
445 | + goto EXIT; | |
446 | + } | |
422 | 447 | |
423 | 448 | //ユーザ選択ウィンドウサイズ取得 |
424 | 449 | result = m_ViewConf.SetCurSection(_T("WindowSize")); |
@@ -455,7 +480,18 @@ int MIDITrailApp::_SetWindowSize() | ||
455 | 480 | width = width + framew; |
456 | 481 | height = height + frameh; |
457 | 482 | } |
458 | - | |
483 | + | |
484 | + //ウィンドウスタイル設定 | |
485 | + apiresult = SetWindowLong(m_hWnd, GWL_STYLE, MIDITRAIL_WINDOW_STYLE); | |
486 | + if (apiresult == 0) { | |
487 | + result = YN_SET_ERR("Windows API error.", GetLastError(), (DWORD64)m_hWnd); | |
488 | + goto EXIT; | |
489 | + } | |
490 | + | |
491 | + //メニューバー表示 | |
492 | + result = _ShowMenu(); | |
493 | + if (result != 0) goto EXIT; | |
494 | + | |
459 | 495 | //ウィンドウサイズ変更 |
460 | 496 | bresult = SetWindowPos( |
461 | 497 | m_hWnd, //ウィンドウハンドル |
@@ -464,7 +500,73 @@ int MIDITrailApp::_SetWindowSize() | ||
464 | 500 | 0, //縦方向の位置 |
465 | 501 | width, //幅 |
466 | 502 | height, //高さ |
467 | - SWP_NOMOVE //ウィンドウ位置指定 | |
503 | + SWP_NOMOVE | SWP_FRAMECHANGED | SWP_SHOWWINDOW //ウィンドウ位置指定 | |
504 | + ); | |
505 | + if (!bresult) { | |
506 | + result = YN_SET_ERR("Windows API error.", GetLastError(), (DWORD64)m_hWnd); | |
507 | + goto EXIT; | |
508 | + } | |
509 | + | |
510 | +EXIT:; | |
511 | + return result; | |
512 | +} | |
513 | + | |
514 | +//****************************************************************************** | |
515 | +// ウィンドウサイズ変更:フルスクリーン | |
516 | +//****************************************************************************** | |
517 | +int MIDITrailApp::_SetWindowSizeFullScreen() | |
518 | +{ | |
519 | + int result = 0; | |
520 | + BOOL bresult = FALSE; | |
521 | + LONG apiresult = 0; | |
522 | + POINT mouseCursorPoint; | |
523 | + HMONITOR hMonitor = NULL; | |
524 | + MONITORINFOEX monitorInfo; | |
525 | + int width = 0; | |
526 | + int height = 0; | |
527 | + | |
528 | + //マウスカーソル位置を取得 | |
529 | + bresult = GetCursorPos(&mouseCursorPoint); | |
530 | + if (!bresult) { | |
531 | + result = YN_SET_ERR("Windows API error.", GetLastError(), 0); | |
532 | + goto EXIT; | |
533 | + } | |
534 | + | |
535 | + //マウスカーソルの位置に該当するモニタを選択 | |
536 | + hMonitor = MonitorFromPoint(mouseCursorPoint, MONITOR_DEFAULTTONEAREST); | |
537 | + | |
538 | + //モニタ情報取得 | |
539 | + monitorInfo.cbSize = sizeof(MONITORINFOEX); | |
540 | + bresult = GetMonitorInfo(hMonitor, &monitorInfo); | |
541 | + if (!bresult) { | |
542 | + result = YN_SET_ERR("Windows API error.", GetLastError(), (DWORD64)hMonitor); | |
543 | + goto EXIT; | |
544 | + } | |
545 | + | |
546 | + //ウィンドウ縦横サイズ | |
547 | + width = monitorInfo.rcMonitor.right - monitorInfo.rcMonitor.left; | |
548 | + height = monitorInfo.rcMonitor.bottom - monitorInfo.rcMonitor.top; | |
549 | + | |
550 | + //ウィンドウスタイル設定 | |
551 | + apiresult = SetWindowLong(m_hWnd, GWL_STYLE, WS_POPUP); | |
552 | + if (apiresult == 0) { | |
553 | + result = YN_SET_ERR("Windows API error.", GetLastError(), (DWORD64)m_hWnd); | |
554 | + goto EXIT; | |
555 | + } | |
556 | + | |
557 | + //メニューバー非表示 | |
558 | + result = _HideMenu(); | |
559 | + if (result != 0) goto EXIT; | |
560 | + | |
561 | + //ウィンドウサイズ変更 | |
562 | + bresult = SetWindowPos( | |
563 | + m_hWnd, //ウィンドウハンドル | |
564 | + HWND_TOP, //配置順序:Zオーダー先頭 | |
565 | + monitorInfo.rcMonitor.left, //横方向の位置 | |
566 | + monitorInfo.rcMonitor.top, //縦方向の位置 | |
567 | + width, //幅 | |
568 | + height, //高さ | |
569 | + SWP_FRAMECHANGED | SWP_SHOWWINDOW //ウィンドウ位置指定 | |
468 | 570 | ); |
469 | 571 | if (!bresult) { |
470 | 572 | result = YN_SET_ERR("Windows API error.", GetLastError(), (DWORD64)m_hWnd); |
@@ -626,31 +728,6 @@ LRESULT MIDITrailApp::_WndProcImpl( | ||
626 | 728 | if (result != 0) goto EXIT; |
627 | 729 | break; |
628 | 730 | //TAG: シーン追加 |
629 | - case IDM_AUTO_SAVE_VIEWPOINT: | |
630 | - //自動視点保存 | |
631 | - result = _OnMenuAutoSaveViewpoint(); | |
632 | - if (result != 0) goto EXIT; | |
633 | - break; | |
634 | - case IDM_SAVE_VIEWPOINT: | |
635 | - //視点保存 | |
636 | - result = _OnMenuSaveViewpoint(); | |
637 | - if (result != 0) goto EXIT; | |
638 | - break; | |
639 | - case IDM_RESET_VIEWPOINT: | |
640 | - //視点リセット | |
641 | - result = _OnMenuResetViewpoint(); | |
642 | - if (result != 0) goto EXIT; | |
643 | - break; | |
644 | - case IDM_VIEWPOINT2: | |
645 | - //静的視点2に移動 | |
646 | - result = _OnMenuViewpoint(2); | |
647 | - if (result != 0) goto EXIT; | |
648 | - break; | |
649 | - case IDM_VIEWPOINT3: | |
650 | - //静的視点3に移動 | |
651 | - result = _OnMenuViewpoint(3); | |
652 | - if (result != 0) goto EXIT; | |
653 | - break; | |
654 | 731 | case IDM_ENABLE_PIANOKEYBOARD: |
655 | 732 | //表示効果:ピアノキーボード |
656 | 733 | result = _OnMenuEnableEffect(MTScene::EffectPianoKeyboard); |
@@ -681,11 +758,42 @@ LRESULT MIDITrailApp::_WndProcImpl( | ||
681 | 758 | result = _OnMenuEnableEffect(MTScene::EffectBackgroundImage); |
682 | 759 | if (result != 0) goto EXIT; |
683 | 760 | break; |
761 | + //自動視点保存と視点保存は廃止 | |
762 | + //case IDM_AUTO_SAVE_VIEWPOINT: | |
763 | + // //自動視点保存 | |
764 | + // result = _OnMenuAutoSaveViewpoint(); | |
765 | + // if (result != 0) goto EXIT; | |
766 | + // break; | |
767 | + //case IDM_SAVE_VIEWPOINT: | |
768 | + // //視点保存 | |
769 | + // result = _OnMenuSaveViewpoint(); | |
770 | + // if (result != 0) goto EXIT; | |
771 | + // break; | |
772 | + case IDM_RESET_VIEWPOINT: | |
773 | + //静的視点1に移動(視点リセット) | |
774 | + result = _OnMenuResetViewpoint(); | |
775 | + if (result != 0) goto EXIT; | |
776 | + break; | |
777 | + case IDM_VIEWPOINT2: | |
778 | + //静的視点2に移動 | |
779 | + result = _OnMenuViewpoint(2); | |
780 | + if (result != 0) goto EXIT; | |
781 | + break; | |
782 | + case IDM_VIEWPOINT3: | |
783 | + //静的視点3に移動 | |
784 | + result = _OnMenuViewpoint(3); | |
785 | + if (result != 0) goto EXIT; | |
786 | + break; | |
684 | 787 | case IDM_WINDOWSIZE: |
685 | 788 | //ウィンドウサイズ設定 |
686 | 789 | result = _OnMenuWindowSize(); |
687 | 790 | if (result != 0) goto EXIT; |
688 | 791 | break; |
792 | + case IDM_FULLSCREEN: | |
793 | + //フルスクリーン | |
794 | + result = _OnMenuFullScreen(); | |
795 | + if (result != 0) goto EXIT; | |
796 | + break; | |
689 | 797 | case IDM_OPTION_MIDIOUT: |
690 | 798 | //MIDI出力デバイス設定 |
691 | 799 | result = _OnMenuOptionMIDIOUT(); |
@@ -735,6 +843,10 @@ LRESULT MIDITrailApp::_WndProcImpl( | ||
735 | 843 | result = _OnMouseButtonDown(message, wParam, lParam); |
736 | 844 | if (result != 0) goto EXIT; |
737 | 845 | break; |
846 | + case WM_MOUSEMOVE: | |
847 | + result = _OnMouseMove(message, wParam, lParam); | |
848 | + if (result != 0) goto EXIT; | |
849 | + break; | |
738 | 850 | case WM_DROPFILES: |
739 | 851 | //ファイルドロップ |
740 | 852 | result = _OnDropFiles(wParam, lParam); |
@@ -756,6 +868,14 @@ LRESULT MIDITrailApp::_WndProcImpl( | ||
756 | 868 | result = _OnFilePathPosted(); |
757 | 869 | if (result != 0) goto EXIT; |
758 | 870 | break; |
871 | + case WM_SIZE: | |
872 | + //ウィンドウサイズ変更 | |
873 | + if (wParam == SIZE_MAXIMIZED) { | |
874 | + //最大化:フルスクリーン | |
875 | + result = _OnMenuFullScreen(); | |
876 | + if (result != 0) goto EXIT; | |
877 | + } | |
878 | + break; | |
759 | 879 | default: |
760 | 880 | lresult = DefWindowProc(hWnd, message, wParam, lParam); |
761 | 881 | break; |
@@ -794,6 +914,13 @@ int MIDITrailApp::_OnMenuFileOpen() | ||
794 | 914 | |
795 | 915 | //ファイル選択時の処理 |
796 | 916 | if (isSelected) { |
917 | + //フルスクリーンでメニューからファイル選択した場合 | |
918 | + // シーン生成処理でクライアントウィンドウのサイズを参照しているため | |
919 | + // 一時的に表示したメニューを非表示に戻しておく | |
920 | + if (m_isFullScreen) { | |
921 | + _HideMenu(); | |
922 | + } | |
923 | + | |
797 | 924 | //演奏/モニタ停止とファイルオープン処理 |
798 | 925 | result = _StopPlaybackAndOpenFile(filePath); |
799 | 926 | if (result != 0) goto EXIT; |
@@ -1287,6 +1414,21 @@ EXIT:; | ||
1287 | 1414 | } |
1288 | 1415 | |
1289 | 1416 | //****************************************************************************** |
1417 | +// メニュー選択:フルスクリーン | |
1418 | +//****************************************************************************** | |
1419 | +int MIDITrailApp::_OnMenuFullScreen() | |
1420 | +{ | |
1421 | + int result = 0; | |
1422 | + | |
1423 | + //フルスクリーン切替 | |
1424 | + result = _ToggleFullScreen(); | |
1425 | + if (result != 0) goto EXIT; | |
1426 | + | |
1427 | +EXIT:; | |
1428 | + return result; | |
1429 | +} | |
1430 | + | |
1431 | +//****************************************************************************** | |
1290 | 1432 | // メニュー選択:MIDI出力デバイス設定 |
1291 | 1433 | //****************************************************************************** |
1292 | 1434 | int MIDITrailApp::_OnMenuOptionMIDIOUT() |
@@ -1524,11 +1666,46 @@ int MIDITrailApp::_OnMouseButtonDown( | ||
1524 | 1666 | ) |
1525 | 1667 | { |
1526 | 1668 | int result = 0; |
1527 | - | |
1669 | + | |
1528 | 1670 | if ((m_pScene != NULL) && (m_PlayStatus != NoData)) { |
1529 | 1671 | result = m_pScene->OnWindowClicked(button, wParam, lParam); |
1530 | 1672 | if (result != 0) goto EXIT; |
1531 | 1673 | } |
1674 | + | |
1675 | +EXIT:; | |
1676 | + return result; | |
1677 | +} | |
1678 | + | |
1679 | +//****************************************************************************** | |
1680 | +// マウス移動イベント | |
1681 | +//****************************************************************************** | |
1682 | +int MIDITrailApp::_OnMouseMove( | |
1683 | + UINT button, | |
1684 | + WPARAM wParam, | |
1685 | + LPARAM lParam | |
1686 | + ) | |
1687 | +{ | |
1688 | + int result = 0; | |
1689 | + LONG apiresult = 0; | |
1690 | + POINT point; | |
1691 | + | |
1692 | + point.x = LOWORD(lParam); | |
1693 | + point.y = HIWORD(lParam); | |
1694 | + | |
1695 | + //フルスクリーンの場合 | |
1696 | + if (m_isFullScreen) { | |
1697 | + //マウスカーソルがスクリーン上端に移動した場合 | |
1698 | + if (point.y == 0) { | |
1699 | + //メニューバー表示 | |
1700 | + result = _ShowMenu(); | |
1701 | + if (result != 0) goto EXIT; | |
1702 | + } | |
1703 | + else { | |
1704 | + //メニューバー非表示 | |
1705 | + result = _HideMenu(); | |
1706 | + if (result != 0) goto EXIT; | |
1707 | + } | |
1708 | + } | |
1532 | 1709 | |
1533 | 1710 | EXIT:; |
1534 | 1711 | return result; |
@@ -1629,6 +1806,13 @@ int MIDITrailApp::_OnKeyDown( | ||
1629 | 1806 | if (result != 0) goto EXIT; |
1630 | 1807 | } |
1631 | 1808 | break; |
1809 | + case VK_F11: | |
1810 | + //フルスクリーン | |
1811 | + result = _OnMenuFullScreen(); | |
1812 | + if (result != 0) goto EXIT; | |
1813 | + break; | |
1814 | + default: | |
1815 | + break; | |
1632 | 1816 | } |
1633 | 1817 | |
1634 | 1818 | EXIT:; |
@@ -2038,16 +2222,17 @@ int MIDITrailApp::_ChangeMenuStyle() | ||
2038 | 2222 | IDM_VIEW_2DPIANOROLL, |
2039 | 2223 | IDM_VIEW_PIANOROLLRAIN, |
2040 | 2224 | IDM_VIEW_PIANOROLLRAIN2D, |
2041 | - IDM_RESET_VIEWPOINT, | |
2042 | - IDM_VIEWPOINT2, | |
2043 | - IDM_VIEWPOINT3, | |
2044 | 2225 | IDM_ENABLE_PIANOKEYBOARD, |
2045 | 2226 | IDM_ENABLE_RIPPLE, |
2046 | 2227 | IDM_ENABLE_PITCHBEND, |
2047 | 2228 | IDM_ENABLE_STARS, |
2048 | 2229 | IDM_ENABLE_COUNTER, |
2049 | 2230 | IDM_ENABLE_BACKGROUNDIMAGE, |
2231 | + IDM_RESET_VIEWPOINT, | |
2232 | + IDM_VIEWPOINT2, | |
2233 | + IDM_VIEWPOINT3, | |
2050 | 2234 | IDM_WINDOWSIZE, |
2235 | + IDM_FULLSCREEN, | |
2051 | 2236 | IDM_OPTION_MIDIOUT, |
2052 | 2237 | IDM_OPTION_MIDIIN, |
2053 | 2238 | IDM_OPTION_GRAPHIC, |
@@ -2074,16 +2259,17 @@ int MIDITrailApp::_ChangeMenuStyle() | ||
2074 | 2259 | { MF_ENABLED, MF_ENABLED, MF_GRAYED, MF_GRAYED, MF_ENABLED, MF_GRAYED }, //IDM_VIEW_2DPIANOROLL |
2075 | 2260 | { MF_ENABLED, MF_ENABLED, MF_GRAYED, MF_GRAYED, MF_ENABLED, MF_GRAYED }, //IDM_VIEW_PIANOROLLRAIN |
2076 | 2261 | { MF_ENABLED, MF_ENABLED, MF_GRAYED, MF_GRAYED, MF_ENABLED, MF_GRAYED }, //IDM_VIEW_PIANOROLLRAIN2D |
2077 | - { MF_GRAYED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED }, //IDM_RESET_VIEWPOINT | |
2078 | - { MF_GRAYED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED }, //IDM_VIEWPOINT2 | |
2079 | - { MF_GRAYED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED }, //IDM_VIEWPOINT3 | |
2080 | 2262 | { MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED }, //IDM_ENABLE_PIANOKEYBOARD |
2081 | 2263 | { MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED }, //IDM_ENABLE_RIPPLE |
2082 | 2264 | { MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED }, //IDM_ENABLE_PITCHBEND |
2083 | 2265 | { MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED }, //IDM_ENABLE_STARS |
2084 | 2266 | { MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED }, //IDM_ENABLE_COUNTER |
2085 | 2267 | { MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED }, //IDM_ENABLE_BACKGROUNDIMAGE |
2268 | + { MF_GRAYED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED }, //IDM_RESET_VIEWPOINT | |
2269 | + { MF_GRAYED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED }, //IDM_VIEWPOINT2 | |
2270 | + { MF_GRAYED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED }, //IDM_VIEWPOINT3 | |
2086 | 2271 | { MF_ENABLED, MF_ENABLED, MF_GRAYED, MF_GRAYED, MF_ENABLED, MF_GRAYED }, //IDM_WINDOWSIZE |
2272 | + { MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED, MF_ENABLED }, //IDM_FULLSCREEN | |
2087 | 2273 | { MF_ENABLED, MF_ENABLED, MF_GRAYED, MF_GRAYED, MF_ENABLED, MF_GRAYED }, //IDM_OPTION_MIDIOUT |
2088 | 2274 | { MF_ENABLED, MF_ENABLED, MF_GRAYED, MF_GRAYED, MF_ENABLED, MF_GRAYED }, //IDM_OPTION_MIDIIN |
2089 | 2275 | { MF_ENABLED, MF_ENABLED, MF_GRAYED, MF_GRAYED, MF_ENABLED, MF_GRAYED }, //IDM_OPTION_GRAPHIC |
@@ -2705,6 +2891,9 @@ int MIDITrailApp::_UpdateMenuCheckmark() | ||
2705 | 2891 | //自動視点保存 |
2706 | 2892 | _CheckMenuItem(IDM_AUTO_SAVE_VIEWPOINT, m_isAutoSaveViewpoint); |
2707 | 2893 | |
2894 | + //フルスクリーン | |
2895 | + _CheckMenuItem(IDM_FULLSCREEN, m_isFullScreen); | |
2896 | + | |
2708 | 2897 | EXIT:; |
2709 | 2898 | return result; |
2710 | 2899 | } |
@@ -3300,3 +3489,174 @@ EXIT:; | ||
3300 | 3489 | return result; |
3301 | 3490 | } |
3302 | 3491 | |
3492 | +//****************************************************************************** | |
3493 | +// フルスクリーン切替 | |
3494 | +//****************************************************************************** | |
3495 | +int MIDITrailApp::_ToggleFullScreen() | |
3496 | +{ | |
3497 | + int result = 0; | |
3498 | + | |
3499 | + m_isFullScreen = m_isFullScreen ? false : true; | |
3500 | + | |
3501 | + result = _ChangeWindowSize(); | |
3502 | + if (result != 0) goto EXIT; | |
3503 | + | |
3504 | +EXIT:; | |
3505 | + return result; | |
3506 | +} | |
3507 | + | |
3508 | +//****************************************************************************** | |
3509 | +// メニュー表示 | |
3510 | +//****************************************************************************** | |
3511 | +int MIDITrailApp::_ShowMenu() | |
3512 | +{ | |
3513 | + int result = 0; | |
3514 | + LONG apiresult = 0; | |
3515 | + | |
3516 | + //メニューバー表示処理 | |
3517 | + if (GetMenu(m_hWnd) == NULL) { | |
3518 | + apiresult = SetMenu(m_hWnd, m_hMenu); | |
3519 | + if (apiresult == 0) { | |
3520 | + result = YN_SET_ERR("Windows API error.", GetLastError(), (DWORD64)m_hWnd); | |
3521 | + goto EXIT; | |
3522 | + } | |
3523 | + } | |
3524 | + | |
3525 | + //メニュー選択マーク更新 | |
3526 | + result = _UpdateMenuCheckmark(); | |
3527 | + if (result != 0) goto EXIT; | |
3528 | + | |
3529 | + //メニュースタイル更新 | |
3530 | + result = _ChangeMenuStyle(); | |
3531 | + if (result != 0) goto EXIT; | |
3532 | + | |
3533 | +EXIT:; | |
3534 | + return result; | |
3535 | +} | |
3536 | + | |
3537 | +//****************************************************************************** | |
3538 | +// メニュー非表示 | |
3539 | +//****************************************************************************** | |
3540 | +int MIDITrailApp::_HideMenu() | |
3541 | +{ | |
3542 | + int result = 0; | |
3543 | + LONG apiresult = 0; | |
3544 | + | |
3545 | + //メニューバー非表示処理 | |
3546 | + //すでにメニューバー非表示なら何もしない | |
3547 | + if (GetMenu(m_hWnd) != NULL) { | |
3548 | + //GetMenuで取得したハンドルは破棄されない | |
3549 | + apiresult = SetMenu(m_hWnd, NULL); | |
3550 | + if (apiresult == 0) { | |
3551 | + result = YN_SET_ERR("Windows API error.", GetLastError(), (DWORD64)m_hWnd); | |
3552 | + goto EXIT; | |
3553 | + } | |
3554 | + } | |
3555 | + | |
3556 | +EXIT:; | |
3557 | + return result; | |
3558 | +} | |
3559 | + | |
3560 | +//****************************************************************************** | |
3561 | +// ゲームパッド操作処理 | |
3562 | +//****************************************************************************** | |
3563 | +int MIDITrailApp::_GamePadProc() | |
3564 | +{ | |
3565 | + int result = 0; | |
3566 | + | |
3567 | + result = m_GamePadCtrl.UpdateState(); | |
3568 | + if (result != 0) goto EXIT; | |
3569 | + | |
3570 | + //_RPTN(_CRT_WARN, "GamePad: %d %d\n", m_GamePadCtrl.DidPressNow_A(), m_GamePadCtrl.DidPressNow_B()); | |
3571 | + | |
3572 | + //スタート 押下 | |
3573 | + if (m_GamePadCtrl.DidPressNow_Start()) { | |
3574 | + //演奏開始/一時停止 | |
3575 | + result = _OnMenuPlay(); | |
3576 | + if (result != 0) goto EXIT; | |
3577 | + } | |
3578 | + | |
3579 | + //ボタンA 押下 | |
3580 | + if (m_GamePadCtrl.DidPressNow_A()) { | |
3581 | + //演奏開始/一時停止 | |
3582 | + result = _OnMenuPlay(); | |
3583 | + if (result != 0) goto EXIT; | |
3584 | + } | |
3585 | + | |
3586 | + //ボタンB 押下 | |
3587 | + if (m_GamePadCtrl.DidPressNow_B()) { | |
3588 | + //演奏停止 | |
3589 | + result = _OnMenuStop(); | |
3590 | + if (result != 0) goto EXIT; | |
3591 | + } | |
3592 | + | |
3593 | + //左ショルダー 押下 | |
3594 | + if (m_GamePadCtrl.DidPressNow_LShoulder()) { | |
3595 | + //視点切り替え | |
3596 | + result = _ChangeViewPoint(-1); | |
3597 | + if (result != 0) goto EXIT; | |
3598 | + } | |
3599 | + | |
3600 | + //右ショルダー 押下 | |
3601 | + if (m_GamePadCtrl.DidPressNow_RShoulder()) { | |
3602 | + //視点切り替え | |
3603 | + result = _ChangeViewPoint(+1); | |
3604 | + if (result != 0) goto EXIT; | |
3605 | + } | |
3606 | + | |
3607 | + //左トリガー 押下 | |
3608 | + if (m_GamePadCtrl.DidPressNow_LTrigger()) { | |
3609 | + //再生リワインド | |
3610 | + result = _OnMenuSkipBack(); | |
3611 | + if (result != 0) goto EXIT; | |
3612 | + } | |
3613 | + | |
3614 | + //右トリガー 押下 | |
3615 | + if (m_GamePadCtrl.DidPressNow_RTrigger()) { | |
3616 | + //再生スキップ | |
3617 | + result = _OnMenuSkipForward(); | |
3618 | + if (result != 0) goto EXIT; | |
3619 | + } | |
3620 | + | |
3621 | +EXIT:; | |
3622 | + return result; | |
3623 | +} | |
3624 | + | |
3625 | +//****************************************************************************** | |
3626 | +// 視点切り替え | |
3627 | +//****************************************************************************** | |
3628 | +int MIDITrailApp::_ChangeViewPoint(int step) | |
3629 | +{ | |
3630 | + int result = 0; | |
3631 | + | |
3632 | + //ゲームパッド用視点番号更新 | |
3633 | + m_GamePadViewPointNo += step; | |
3634 | + | |
3635 | + if (m_GamePadViewPointNo < 0) { | |
3636 | + m_GamePadViewPointNo = 2; | |
3637 | + } | |
3638 | + else if (m_GamePadViewPointNo > 2) { | |
3639 | + m_GamePadViewPointNo = 0; | |
3640 | + } | |
3641 | + | |
3642 | + //視点切り替え | |
3643 | + switch (m_GamePadViewPointNo) { | |
3644 | + case 0: | |
3645 | + result = _OnMenuResetViewpoint(); | |
3646 | + if (result != 0) goto EXIT; | |
3647 | + break; | |
3648 | + case 1: | |
3649 | + result = _OnMenuViewpoint(2); | |
3650 | + if (result != 0) goto EXIT; | |
3651 | + break; | |
3652 | + case 2: | |
3653 | + result = _OnMenuViewpoint(3); | |
3654 | + if (result != 0) goto EXIT; | |
3655 | + break; | |
3656 | + default: | |
3657 | + break; | |
3658 | + } | |
3659 | + | |
3660 | +EXIT:; | |
3661 | + return result; | |
3662 | +} |
@@ -4,7 +4,7 @@ | ||
4 | 4 | // |
5 | 5 | // MIDITrail アプリケーションクラス |
6 | 6 | // |
7 | -// Copyright (C) 2010-2018 WADA Masashi. All Rights Reserved. | |
7 | +// Copyright (C) 2010-2019 WADA Masashi. All Rights Reserved. | |
8 | 8 | // |
9 | 9 | //****************************************************************************** |
10 | 10 |
@@ -23,6 +23,7 @@ | ||
23 | 23 | #include "MTHowToViewDlg.h" |
24 | 24 | #include "MTAboutDlg.h" |
25 | 25 | #include "MTCmdLineParser.h" |
26 | +#include "MTGamePadCtrl.h" | |
26 | 27 | |
27 | 28 | using namespace YNBaseLib; |
28 | 29 | using namespace SMIDILib; |
@@ -36,14 +37,13 @@ using namespace SMIDILib; | ||
36 | 37 | //ウィンドウスタイル |
37 | 38 | // WS_OVERLAPPEDWINDOW から次のスタイルを削ったもの |
38 | 39 | // WS_THICKFRAME サイズ変更可 |
39 | -// WS_MAXIMIZEBOX 最大化ボタン | |
40 | -#define MIDITRAIL_WINDOW_STYLE (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX) | |
40 | +#define MIDITRAIL_WINDOW_STYLE (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX) | |
41 | 41 | |
42 | 42 | //後続起動プロセスのファイルパスポスト通知 |
43 | 43 | #define WM_FILEPATH_POSTED (WM_USER + 100) |
44 | 44 | |
45 | 45 | //メニュースタイル制御 |
46 | -#define MT_MENU_NUM (31) | |
46 | +#define MT_MENU_NUM (32) | |
47 | 47 | #define MT_PLAYSTATUS_NUM (6) |
48 | 48 | |
49 | 49 | //デバイスロスト警告メッセージ |
@@ -146,6 +146,8 @@ private: | ||
146 | 146 | HACCEL m_Accel; |
147 | 147 | TCHAR m_Title[MAX_LOADSTRING]; |
148 | 148 | TCHAR m_WndClassName[MAX_LOADSTRING]; |
149 | + bool m_isFullScreen; | |
150 | + HMENU m_hMenu; | |
149 | 151 | |
150 | 152 | //レンダリング系 |
151 | 153 | DXRenderer m_Renderer; |
@@ -225,6 +227,12 @@ private: | ||
225 | 227 | //次回オープン対象ファイルパス |
226 | 228 | TCHAR m_NextFilePath[_MAX_PATH]; |
227 | 229 | |
230 | + //ゲームパッド制御 | |
231 | + MTGamePadCtrl m_GamePadCtrl; | |
232 | + | |
233 | + //ゲームパッド用視点番号 | |
234 | + int m_GamePadViewPointNo; | |
235 | + | |
228 | 236 | //---------------------------------------------------------------- |
229 | 237 | //メソッド定義 |
230 | 238 | //---------------------------------------------------------------- |
@@ -232,6 +240,7 @@ private: | ||
232 | 240 | int _RegisterClass(HINSTANCE hInstance); |
233 | 241 | int _CreateWindow(HINSTANCE hInstance, int nCmdShow); |
234 | 242 | int _SetWindowSize(); |
243 | + int _SetWindowSizeFullScreen(); | |
235 | 244 | |
236 | 245 | //設定ファイル初期化 |
237 | 246 | int _InitConfFile(); |
@@ -257,6 +266,7 @@ private: | ||
257 | 266 | int _OnMenuSaveViewpoint(); |
258 | 267 | int _OnMenuEnableEffect(MTScene::EffectType type); |
259 | 268 | int _OnMenuWindowSize(); |
269 | + int _OnMenuFullScreen(); | |
260 | 270 | int _OnMenuOptionMIDIOUT(); |
261 | 271 | int _OnMenuOptionMIDIIN(); |
262 | 272 | int _OnMenuOptionGraphic(); |
@@ -268,6 +278,7 @@ private: | ||
268 | 278 | int _SequencerMsgProc(); |
269 | 279 | int _OnRecvSequencerMsg(unsigned long wParam, unsigned long lParam); |
270 | 280 | int _OnMouseButtonDown(UINT button, WPARAM wParam, LPARAM lParam); |
281 | + int _OnMouseMove(UINT button, WPARAM wParam, LPARAM lParam); | |
271 | 282 | int _OnKeyDown(WPARAM wParam, LPARAM lParam); |
272 | 283 | int _OnDropFiles(WPARAM wParam, LPARAM lParam); |
273 | 284 |
@@ -306,6 +317,11 @@ private: | ||
306 | 317 | int _PostFilePathToFirstMIDITrail(LPTSTR pCmdLine); |
307 | 318 | int _StopPlaybackAndOpenFile(TCHAR* pFilePath); |
308 | 319 | int _FileOpenProc(TCHAR* pFilePath); |
320 | + int _ToggleFullScreen(); | |
321 | + int _ShowMenu(); | |
322 | + int _HideMenu(); | |
323 | + int _GamePadProc(); | |
324 | + int _ChangeViewPoint(int step); | |
309 | 325 | |
310 | 326 | }; |
311 | 327 |
@@ -16,8 +16,8 @@ | ||
16 | 16 | //****************************************************************************** |
17 | 17 | |
18 | 18 | //バージョン文字列 |
19 | -#define MIDITRAIL_VERSION_STRING_X86 _T("Version 1.2.5 (32bit)") | |
20 | -#define MIDITRAIL_VERSION_STRING_X64 _T("Version 1.2.5 (64bit)") | |
19 | +#define MIDITRAIL_VERSION_STRING_X86 _T("Version 1.2.6 (32bit)") | |
20 | +#define MIDITRAIL_VERSION_STRING_X64 _T("Version 1.2.6 (64bit)") | |
21 | 21 | |
22 | 22 | //コピーライト |
23 | 23 | #define MIDITRAIL_COPYRIGHT _T("Copyright (C) 2010-2019 WADA Masashi"); |
@@ -90,6 +90,10 @@ int MTFirstPersonCam::Initialize( | ||
90 | 90 | m_DIKeyCtrl.Acquire(); |
91 | 91 | m_DIMouseCtrl.Acquire(); |
92 | 92 | |
93 | + //ゲームパッド初期化:ユーザインデックス0固定 | |
94 | + result = m_GamePadCtrl.Initialize(0); | |
95 | + if (result != 0) goto EXIT; | |
96 | + | |
93 | 97 | //カメラ初期化 |
94 | 98 | result = m_Camera.Initialize(); |
95 | 99 | if (result != 0) goto EXIT; |
@@ -201,10 +205,14 @@ int MTFirstPersonCam::Transform( | ||
201 | 205 | ) |
202 | 206 | { |
203 | 207 | int result = 0; |
208 | + float dt = 0.0f; | |
204 | 209 | int dX = 0; |
205 | 210 | int dY = 0; |
206 | 211 | int dW = 0; |
207 | - | |
212 | + | |
213 | + //デルタタイム | |
214 | + dt = (float)m_DeltaTime / 1000.0f; | |
215 | + | |
208 | 216 | //TODO: ここじゃないどこかへ移す |
209 | 217 | m_DIKeyCtrl.Acquire(); |
210 | 218 | m_DIMouseCtrl.Acquire(); |
@@ -222,6 +230,12 @@ int MTFirstPersonCam::Transform( | ||
222 | 230 | //if (result != 0) goto EXIT; |
223 | 231 | result = 0; |
224 | 232 | |
233 | + //ゲームパッド状態更新 | |
234 | + result = m_GamePadCtrl.UpdateState(); | |
235 | + if (result != 0) goto EXIT; | |
236 | + | |
237 | + //_RPTN(_CRT_WARN, "GamePad: %f %f\n", m_GamePadCtrl.GetState_ThumbRX(), m_GamePadCtrl.GetState_ThumbRY()); | |
238 | + | |
225 | 239 | //マウス/ホイール移動量 |
226 | 240 | dX = m_DIMouseCtrl.GetDelta(DIMouseCtrl::AxisX); |
227 | 241 | dY = m_DIMouseCtrl.GetDelta(DIMouseCtrl::AxisY); |
@@ -232,6 +246,11 @@ int MTFirstPersonCam::Transform( | ||
232 | 246 | dX = 0; |
233 | 247 | dY = 0; |
234 | 248 | } |
249 | + | |
250 | + //ゲームパッド操作:右スティック | |
251 | + //スティック値は-1.0から1.0の範囲 | |
252 | + dX += m_VelocityPT * dt * m_GamePadCtrl.GetState_ThumbRX() * (100.0f); | |
253 | + dY += m_VelocityPT * dt * m_GamePadCtrl.GetState_ThumbRY() * (-100.0f); | |
235 | 254 | |
236 | 255 | //CTRL+移動キーで視線方向を変化させる |
237 | 256 | if (m_DIKeyCtrl.IsKeyDown(DIK_LCONTROL) || m_DIKeyCtrl.IsKeyDown(DIK_RCONTROL)) { |
@@ -335,6 +354,8 @@ int MTFirstPersonCam::_TransformEyeDirection( | ||
335 | 354 | int MTFirstPersonCam::_TransformCamPosition() |
336 | 355 | { |
337 | 356 | int result = 0; |
357 | + float dFB = 0.0f; | |
358 | + float dLR = 0.0f; | |
338 | 359 | float phi = 0.0f; |
339 | 360 | float phiRad = 0.0f; |
340 | 361 | float distance = 0.0f; |
@@ -396,7 +417,40 @@ int MTFirstPersonCam::_TransformCamPosition() | ||
396 | 417 | m_CamVector.x += +(m_VelocityFB * dt * rate); |
397 | 418 | } |
398 | 419 | } |
399 | - | |
420 | + | |
421 | + //ゲームパッド操作:十字キー>前後左右移動 | |
422 | + if (distance == 0.0f) { | |
423 | + if (m_GamePadCtrl.GetState_DPadUp()) { | |
424 | + dFB = m_VelocityFB * dt * (1.0f); | |
425 | + } | |
426 | + if (m_GamePadCtrl.GetState_DPadDown()) { | |
427 | + dFB = m_VelocityFB * dt * (-1.0f); | |
428 | + } | |
429 | + if (m_GamePadCtrl.GetState_DPadRight()) { | |
430 | + dLR = m_VelocityLR * dt * (-1.0f); | |
431 | + } | |
432 | + if (m_GamePadCtrl.GetState_DPadLeft()) { | |
433 | + dLR = m_VelocityLR * dt * (1.0f); | |
434 | + } | |
435 | + distance = sqrt((dFB * dFB) + (dLR * dLR)); | |
436 | + phi += D3DXToDegree(atan2(dLR, dFB)); | |
437 | + } | |
438 | + //ゲームパッド操作:左スティック>前後左右移動 | |
439 | + if (distance == 0.0f) { | |
440 | + //スティック値は-1.0から1.0の範囲 | |
441 | + dFB += m_VelocityFB * dt * m_GamePadCtrl.GetState_ThumbLX() * -1.0f; | |
442 | + dLR += m_VelocityLR * dt * m_GamePadCtrl.GetState_ThumbLY(); | |
443 | + distance = sqrt((dFB * dFB) + (dLR * dLR)); | |
444 | + phi += D3DXToDegree(atan2(dFB, dLR)); | |
445 | + } | |
446 | + //ゲームパッド操作:X,Yボタン>下降,上昇移動 | |
447 | + if (m_GamePadCtrl.GetState_X()) { | |
448 | + m_CamVector.y += -(m_VelocityUD * dt); | |
449 | + } | |
450 | + if (m_GamePadCtrl.GetState_Y()) { | |
451 | + m_CamVector.y += +(m_VelocityUD * dt); | |
452 | + } | |
453 | + | |
400 | 454 | //クリッピング |
401 | 455 | if (phi >= 360.0f) { |
402 | 456 | phi -= 360.0f; |
@@ -4,7 +4,7 @@ | ||
4 | 4 | // |
5 | 5 | // 一人称カメラクラス |
6 | 6 | // |
7 | -// Copyright (C) 2010 WADA Masashi. All Rights Reserved. | |
7 | +// Copyright (C) 2010-2019 WADA Masashi. All Rights Reserved. | |
8 | 8 | // |
9 | 9 | //****************************************************************************** |
10 | 10 |
@@ -21,6 +21,7 @@ | ||
21 | 21 | #include "DXCamera.h" |
22 | 22 | #include "SMIDILib.h" |
23 | 23 | #include "MTNoteDesign.h" |
24 | +#include "MTGamePadCtrl.h" | |
24 | 25 | |
25 | 26 | using namespace SMIDILib; |
26 | 27 |
@@ -116,6 +117,7 @@ private: | ||
116 | 117 | |
117 | 118 | DIKeyCtrl m_DIKeyCtrl; |
118 | 119 | DIMouseCtrl m_DIMouseCtrl; |
120 | + MTGamePadCtrl m_GamePadCtrl; | |
119 | 121 | bool m_IsMouseCamMode; |
120 | 122 | bool m_IsAutoRollMode; |
121 | 123 | HWND m_hWnd; |
@@ -0,0 +1,615 @@ | ||
1 | +//****************************************************************************** | |
2 | +// | |
3 | +// MIDITrail / MTGamePadCtrl | |
4 | +// | |
5 | +// ゲームパッド制御クラス | |
6 | +// | |
7 | +// Copyright (C) 2019 WADA Masashi. All Rights Reserved. | |
8 | +// | |
9 | +//****************************************************************************** | |
10 | + | |
11 | +#include "StdAfx.h" | |
12 | +#include "YNBaseLib.h" | |
13 | +#include "MTGamePadCtrl.h" | |
14 | + | |
15 | +using namespace YNBaseLib; | |
16 | + | |
17 | + | |
18 | +//****************************************************************************** | |
19 | +// コンストラクタ | |
20 | +//****************************************************************************** | |
21 | +MTGamePadCtrl::MTGamePadCtrl(void) | |
22 | +{ | |
23 | + m_isConnected = false; | |
24 | + ZeroMemory(&m_PrevGamePadState, sizeof(XINPUT_GAMEPAD)); | |
25 | + ZeroMemory(&m_CurGamePadState, sizeof(XINPUT_GAMEPAD)); | |
26 | + m_ThumbLX = 0.0f; | |
27 | + m_ThumbLY = 0.0f; | |
28 | + m_ThumbRX = 0.0f; | |
29 | + m_ThumbRY = 0.0f; | |
30 | +} | |
31 | + | |
32 | +//****************************************************************************** | |
33 | +// デストラクタ | |
34 | +//****************************************************************************** | |
35 | +MTGamePadCtrl::~MTGamePadCtrl(void) | |
36 | +{ | |
37 | +} | |
38 | + | |
39 | +//****************************************************************************** | |
40 | +// 初期化 | |
41 | +//****************************************************************************** | |
42 | +int MTGamePadCtrl::Initialize(int userIndex) | |
43 | +{ | |
44 | + int result = 0; | |
45 | + DWORD dwResult = 0; | |
46 | + XINPUT_STATE xInputState; | |
47 | + | |
48 | + if (userIndex >= XUSER_MAX_COUNT) { | |
49 | + result = YN_SET_ERR("Program error.", userIndex, 0); | |
50 | + goto EXIT; | |
51 | + } | |
52 | + | |
53 | + //ユーザインデックス | |
54 | + m_UserIndex = userIndex; | |
55 | + | |
56 | + //ゲームパッド状態取得 | |
57 | + m_isConnected = false; | |
58 | + dwResult = XInputGetState(m_UserIndex, &xInputState); | |
59 | + if (dwResult == ERROR_DEVICE_NOT_CONNECTED) { | |
60 | + //ゲームパッド未接続 | |
61 | + //何もしない | |
62 | + } | |
63 | + else if (dwResult == ERROR_SUCCESS) { | |
64 | + //ゲームパッド状態取得成功 | |
65 | + m_isConnected = true; | |
66 | + m_CurGamePadState = xInputState.Gamepad; | |
67 | + } | |
68 | + else if (dwResult != ERROR_SUCCESS) { | |
69 | + result = YN_SET_ERR("XInput API error.", m_UserIndex, dwResult); | |
70 | + goto EXIT; | |
71 | + } | |
72 | + | |
73 | +EXIT:; | |
74 | + return result; | |
75 | +} | |
76 | + | |
77 | +//****************************************************************************** | |
78 | +// ゲームパッド状態更新 | |
79 | +//****************************************************************************** | |
80 | +int MTGamePadCtrl::UpdateState() | |
81 | +{ | |
82 | + int result = 0; | |
83 | + DWORD dwResult = 0; | |
84 | + XINPUT_STATE xInputState; | |
85 | + | |
86 | + m_PrevGamePadState = m_CurGamePadState; | |
87 | + ZeroMemory(&m_CurGamePadState, sizeof(XINPUT_GAMEPAD)); | |
88 | + | |
89 | + //ゲームパッド状態取得 | |
90 | + m_isConnected = false; | |
91 | + dwResult = XInputGetState(m_UserIndex, &xInputState); | |
92 | + if (dwResult == ERROR_DEVICE_NOT_CONNECTED) { | |
93 | + //ゲームパッド未接続 | |
94 | + //何もしない | |
95 | + } | |
96 | + else if (dwResult == ERROR_SUCCESS) { | |
97 | + //ゲームパッド状態取得成功 | |
98 | + m_isConnected = true; | |
99 | + m_CurGamePadState = xInputState.Gamepad; | |
100 | + } | |
101 | + else if (dwResult != ERROR_SUCCESS) { | |
102 | + result = YN_SET_ERR("XInput API error.", m_UserIndex, dwResult); | |
103 | + goto EXIT; | |
104 | + } | |
105 | + | |
106 | + //スティック状態正規化 | |
107 | + if (m_isConnected) { | |
108 | + _NormalizeLStickState(); | |
109 | + _NormalizeRStickState(); | |
110 | + } | |
111 | + else { | |
112 | + m_ThumbLX = 0.0f; | |
113 | + m_ThumbLY = 0.0f; | |
114 | + m_ThumbRX = 0.0f; | |
115 | + m_ThumbRY = 0.0f; | |
116 | + } | |
117 | + | |
118 | +EXIT:; | |
119 | + return result; | |
120 | +} | |
121 | + | |
122 | +//****************************************************************************** | |
123 | +// 左スティック状態正規化 | |
124 | +//****************************************************************************** | |
125 | +void MTGamePadCtrl::_NormalizeLStickState() | |
126 | +{ | |
127 | + float rawX = 0.0f; | |
128 | + float rawY = 0.0f; | |
129 | + float normalizedX = 0.0f; | |
130 | + float normalizedY = 0.0f; | |
131 | + float magnitude = 0.0f; | |
132 | + | |
133 | + rawX = m_CurGamePadState.sThumbLX; | |
134 | + rawY = m_CurGamePadState.sThumbLY; | |
135 | + | |
136 | + magnitude = sqrt((rawX * rawX) + (rawY * rawY)); | |
137 | + normalizedX = rawX / magnitude; | |
138 | + normalizedY = rawY / magnitude; | |
139 | + | |
140 | + if (magnitude > XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE) { | |
141 | + if (magnitude > 0x7FFF) { | |
142 | + magnitude = 0x7FFF; | |
143 | + } | |
144 | + magnitude -= XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE; | |
145 | + } | |
146 | + else { | |
147 | + magnitude = 0.0f; | |
148 | + normalizedX = 0.0f; | |
149 | + normalizedY = 0.0f; | |
150 | + } | |
151 | + | |
152 | + m_ThumbLX = normalizedX; | |
153 | + m_ThumbLY = normalizedY; | |
154 | + | |
155 | + return; | |
156 | +} | |
157 | + | |
158 | +//****************************************************************************** | |
159 | +// 右スティック状態正規化 | |
160 | +//****************************************************************************** | |
161 | +void MTGamePadCtrl::_NormalizeRStickState() | |
162 | +{ | |
163 | + float rawX = 0.0f; | |
164 | + float rawY = 0.0f; | |
165 | + float normalizedX = 0.0f; | |
166 | + float normalizedY = 0.0f; | |
167 | + float magnitude = 0.0f; | |
168 | + | |
169 | + rawX = m_CurGamePadState.sThumbRX; | |
170 | + rawY = m_CurGamePadState.sThumbRY; | |
171 | + | |
172 | + magnitude = sqrt((rawX * rawX) + (rawY * rawY)); | |
173 | + normalizedX = rawX / magnitude; | |
174 | + normalizedY = rawY / magnitude; | |
175 | + | |
176 | + if (magnitude > XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE) { | |
177 | + if (magnitude > 0x7FFF) { | |
178 | + magnitude = 0x7FFF; | |
179 | + } | |
180 | + magnitude -= XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE; | |
181 | + } | |
182 | + else { | |
183 | + magnitude = 0.0f; | |
184 | + normalizedX = 0.0f; | |
185 | + normalizedY = 0.0f; | |
186 | + } | |
187 | + | |
188 | + m_ThumbRX = normalizedX; | |
189 | + m_ThumbRY = normalizedY; | |
190 | + | |
191 | + return; | |
192 | +} | |
193 | + | |
194 | +//****************************************************************************** | |
195 | +// ボタン状態取得:上 | |
196 | +//****************************************************************************** | |
197 | +bool MTGamePadCtrl::GetState_DPadUp() | |
198 | +{ | |
199 | + bool state = false; | |
200 | + | |
201 | + if ((m_isConnected) && (m_CurGamePadState.wButtons & XINPUT_GAMEPAD_DPAD_UP)) { | |
202 | + state = true; | |
203 | + } | |
204 | + | |
205 | + return state; | |
206 | +} | |
207 | + | |
208 | +//****************************************************************************** | |
209 | +// ボタン状態取得:下 | |
210 | +//****************************************************************************** | |
211 | +bool MTGamePadCtrl::GetState_DPadDown() | |
212 | +{ | |
213 | + bool state = false; | |
214 | + | |
215 | + if ((m_isConnected) && (m_CurGamePadState.wButtons & XINPUT_GAMEPAD_DPAD_DOWN)) { | |
216 | + state = true; | |
217 | + } | |
218 | + | |
219 | + return state; | |
220 | +} | |
221 | + | |
222 | +//****************************************************************************** | |
223 | +// ボタン状態取得:左 | |
224 | +//****************************************************************************** | |
225 | +bool MTGamePadCtrl::GetState_DPadLeft() | |
226 | +{ | |
227 | + bool state = false; | |
228 | + | |
229 | + if ((m_isConnected) && (m_CurGamePadState.wButtons & XINPUT_GAMEPAD_DPAD_LEFT)) { | |
230 | + state = true; | |
231 | + } | |
232 | + | |
233 | + return state; | |
234 | +} | |
235 | + | |
236 | +//****************************************************************************** | |
237 | +// ボタン状態取得:右 | |
238 | +//****************************************************************************** | |
239 | +bool MTGamePadCtrl::GetState_DPadRight() | |
240 | +{ | |
241 | + bool state = false; | |
242 | + | |
243 | + if ((m_isConnected) && (m_CurGamePadState.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT)) { | |
244 | + state = true; | |
245 | + } | |
246 | + | |
247 | + return state; | |
248 | +} | |
249 | + | |
250 | +//****************************************************************************** | |
251 | +// ボタン状態取得:A | |
252 | +//****************************************************************************** | |
253 | +bool MTGamePadCtrl::GetState_A() | |
254 | +{ | |
255 | + bool state = false; | |
256 | + | |
257 | + if ((m_isConnected) && (m_CurGamePadState.wButtons & XINPUT_GAMEPAD_A)) { | |
258 | + state = true; | |
259 | + } | |
260 | + | |
261 | + return state; | |
262 | +} | |
263 | + | |
264 | +//****************************************************************************** | |
265 | +// ボタン状態取得:B | |
266 | +//****************************************************************************** | |
267 | +bool MTGamePadCtrl::GetState_B() | |
268 | +{ | |
269 | + bool state = false; | |
270 | + | |
271 | + if ((m_isConnected) && (m_CurGamePadState.wButtons & XINPUT_GAMEPAD_B)) { | |
272 | + state = true; | |
273 | + } | |
274 | + | |
275 | + return state; | |
276 | +} | |
277 | + | |
278 | +//****************************************************************************** | |
279 | +// ボタン状態取得:X | |
280 | +//****************************************************************************** | |
281 | +bool MTGamePadCtrl::GetState_X() | |
282 | +{ | |
283 | + bool state = false; | |
284 | + | |
285 | + if ((m_isConnected) && (m_CurGamePadState.wButtons & XINPUT_GAMEPAD_X)) { | |
286 | + state = true; | |
287 | + } | |
288 | + | |
289 | + return state; | |
290 | +} | |
291 | + | |
292 | +//****************************************************************************** | |
293 | +// ボタン状態取得:Y | |
294 | +//****************************************************************************** | |
295 | +bool MTGamePadCtrl::GetState_Y() | |
296 | +{ | |
297 | + bool state = false; | |
298 | + | |
299 | + if ((m_isConnected) && (m_CurGamePadState.wButtons & XINPUT_GAMEPAD_Y)) { | |
300 | + state = true; | |
301 | + } | |
302 | + | |
303 | + return state; | |
304 | +} | |
305 | + | |
306 | +//****************************************************************************** | |
307 | +// ボタン状態取得:左ショルダー | |
308 | +//****************************************************************************** | |
309 | +bool MTGamePadCtrl::GetState_LShoulder() | |
310 | +{ | |
311 | + bool state = false; | |
312 | + | |
313 | + if ((m_isConnected) && (m_CurGamePadState.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER)) { | |
314 | + state = true; | |
315 | + } | |
316 | + | |
317 | + return state; | |
318 | +} | |
319 | + | |
320 | +//****************************************************************************** | |
321 | +// ボタン状態取得:右ショルダー | |
322 | +//****************************************************************************** | |
323 | +bool MTGamePadCtrl::GetState_RShoulder() | |
324 | +{ | |
325 | + bool state = false; | |
326 | + | |
327 | + if ((m_isConnected) && (m_CurGamePadState.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER)) { | |
328 | + state = true; | |
329 | + } | |
330 | + | |
331 | + return state; | |
332 | +} | |
333 | + | |
334 | +//****************************************************************************** | |
335 | +// ボタン状態取得:左トリガー | |
336 | +//****************************************************************************** | |
337 | +bool MTGamePadCtrl::GetState_LTrigger() | |
338 | +{ | |
339 | + bool state = false; | |
340 | + | |
341 | + if ((m_isConnected) && (m_CurGamePadState.bLeftTrigger > 250)) { | |
342 | + state = true; | |
343 | + } | |
344 | + | |
345 | + return state; | |
346 | +} | |
347 | + | |
348 | +//****************************************************************************** | |
349 | +// ボタン状態取得:右トリガー | |
350 | +//****************************************************************************** | |
351 | +bool MTGamePadCtrl::GetState_RTrigger() | |
352 | +{ | |
353 | + bool state = false; | |
354 | + | |
355 | + if ((m_isConnected) && (m_CurGamePadState.bRightTrigger > 250)) { | |
356 | + state = true; | |
357 | + } | |
358 | + | |
359 | + return state; | |
360 | +} | |
361 | + | |
362 | +//****************************************************************************** | |
363 | +// ボタン状態取得:スタート | |
364 | +//****************************************************************************** | |
365 | +bool MTGamePadCtrl::GetState_Start() | |
366 | +{ | |
367 | + bool state = false; | |
368 | + | |
369 | + if ((m_isConnected) && (m_CurGamePadState.wButtons & XINPUT_GAMEPAD_START)) { | |
370 | + state = true; | |
371 | + } | |
372 | + | |
373 | + return state; | |
374 | +} | |
375 | + | |
376 | +//****************************************************************************** | |
377 | +// ボタン状態取得:バック | |
378 | +//****************************************************************************** | |
379 | +bool MTGamePadCtrl::GetState_Back() | |
380 | +{ | |
381 | + bool state = false; | |
382 | + | |
383 | + if ((m_isConnected) && (m_CurGamePadState.wButtons & XINPUT_GAMEPAD_BACK)) { | |
384 | + state = true; | |
385 | + } | |
386 | + | |
387 | + return state; | |
388 | +} | |
389 | + | |
390 | +//****************************************************************************** | |
391 | +// スティック状態取得:左スティックX | |
392 | +//****************************************************************************** | |
393 | +float MTGamePadCtrl::GetState_ThumbLX() | |
394 | +{ | |
395 | + float state = 0.0f; | |
396 | + | |
397 | + if (m_isConnected) { | |
398 | + state = m_ThumbLX; | |
399 | + } | |
400 | + | |
401 | + return state; | |
402 | +} | |
403 | + | |
404 | +//****************************************************************************** | |
405 | +// スティック状態取得:左スティックY | |
406 | +//****************************************************************************** | |
407 | +float MTGamePadCtrl::GetState_ThumbLY() | |
408 | +{ | |
409 | + float state = 0.0f; | |
410 | + | |
411 | + if (m_isConnected) { | |
412 | + state = m_ThumbLY; | |
413 | + } | |
414 | + | |
415 | + return state; | |
416 | +} | |
417 | + | |
418 | +//****************************************************************************** | |
419 | +// スティック状態取得:右スティックX | |
420 | +//****************************************************************************** | |
421 | +float MTGamePadCtrl::GetState_ThumbRX() | |
422 | +{ | |
423 | + float state = 0.0f; | |
424 | + | |
425 | + if (m_isConnected) { | |
426 | + state = m_ThumbRX; | |
427 | + } | |
428 | + | |
429 | + return state; | |
430 | +} | |
431 | + | |
432 | +//****************************************************************************** | |
433 | +// スティック状態取得:右スティックY | |
434 | +//****************************************************************************** | |
435 | +float MTGamePadCtrl::GetState_ThumbRY() | |
436 | +{ | |
437 | + float state = 0.0f; | |
438 | + | |
439 | + if (m_isConnected) { | |
440 | + state = m_ThumbRY; | |
441 | + } | |
442 | + | |
443 | + return state; | |
444 | +} | |
445 | + | |
446 | +//****************************************************************************** | |
447 | +// ボタン押下確認:A | |
448 | +//****************************************************************************** | |
449 | +bool MTGamePadCtrl::DidPressNow_A() | |
450 | +{ | |
451 | + bool isNow = false; | |
452 | + | |
453 | + if (m_isConnected) { | |
454 | + if (((m_PrevGamePadState.wButtons & XINPUT_GAMEPAD_A) == 0) | |
455 | + && ((m_CurGamePadState.wButtons & XINPUT_GAMEPAD_A) != 0)) { | |
456 | + isNow = true; | |
457 | + } | |
458 | + } | |
459 | + | |
460 | + return isNow; | |
461 | +} | |
462 | + | |
463 | +//****************************************************************************** | |
464 | +// ボタン押下確認:B | |
465 | +//****************************************************************************** | |
466 | +bool MTGamePadCtrl::DidPressNow_B() | |
467 | +{ | |
468 | + bool isNow = false; | |
469 | + | |
470 | + if (m_isConnected) { | |
471 | + if (((m_PrevGamePadState.wButtons & XINPUT_GAMEPAD_B) == 0) | |
472 | + && ((m_CurGamePadState.wButtons & XINPUT_GAMEPAD_B) != 0)) { | |
473 | + isNow = true; | |
474 | + } | |
475 | + } | |
476 | + | |
477 | + return isNow; | |
478 | +} | |
479 | + | |
480 | +//****************************************************************************** | |
481 | +// ボタン押下確認:X | |
482 | +//****************************************************************************** | |
483 | +bool MTGamePadCtrl::DidPressNow_X() | |
484 | +{ | |
485 | + bool isNow = false; | |
486 | + | |
487 | + if (m_isConnected) { | |
488 | + if (((m_PrevGamePadState.wButtons & XINPUT_GAMEPAD_X) == 0) | |
489 | + && ((m_CurGamePadState.wButtons & XINPUT_GAMEPAD_X) != 0)) { | |
490 | + isNow = true; | |
491 | + } | |
492 | + } | |
493 | + | |
494 | + return isNow; | |
495 | +} | |
496 | + | |
497 | +//****************************************************************************** | |
498 | +// ボタン押下確認:Y | |
499 | +//****************************************************************************** | |
500 | +bool MTGamePadCtrl::DidPressNow_Y() | |
501 | +{ | |
502 | + bool isNow = false; | |
503 | + | |
504 | + if (m_isConnected) { | |
505 | + if (((m_PrevGamePadState.wButtons & XINPUT_GAMEPAD_Y) == 0) | |
506 | + && ((m_CurGamePadState.wButtons & XINPUT_GAMEPAD_Y) != 0)) { | |
507 | + isNow = true; | |
508 | + } | |
509 | + } | |
510 | + | |
511 | + return isNow; | |
512 | +} | |
513 | + | |
514 | +//****************************************************************************** | |
515 | +// ボタン押下確認:左ショルダー | |
516 | +//****************************************************************************** | |
517 | +bool MTGamePadCtrl::DidPressNow_LShoulder() | |
518 | +{ | |
519 | + bool isNow = false; | |
520 | + | |
521 | + if (m_isConnected) { | |
522 | + if (((m_PrevGamePadState.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER) == 0) | |
523 | + && ((m_CurGamePadState.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER) != 0)) { | |
524 | + isNow = true; | |
525 | + } | |
526 | + } | |
527 | + | |
528 | + return isNow; | |
529 | +} | |
530 | + | |
531 | +//****************************************************************************** | |
532 | +// ボタン押下確認:右ショルダー | |
533 | +//****************************************************************************** | |
534 | +bool MTGamePadCtrl::DidPressNow_RShoulder() | |
535 | +{ | |
536 | + bool isNow = false; | |
537 | + | |
538 | + if (m_isConnected) { | |
539 | + if (((m_PrevGamePadState.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER) == 0) | |
540 | + && ((m_CurGamePadState.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER) != 0)) { | |
541 | + isNow = true; | |
542 | + } | |
543 | + } | |
544 | + | |
545 | + return isNow; | |
546 | +} | |
547 | + | |
548 | +//****************************************************************************** | |
549 | +// ボタン押下確認:左トリガー | |
550 | +//****************************************************************************** | |
551 | +bool MTGamePadCtrl::DidPressNow_LTrigger() | |
552 | +{ | |
553 | + bool isNow = false; | |
554 | + | |
555 | + if (m_isConnected) { | |
556 | + if ((m_PrevGamePadState.bLeftTrigger < MT_GAME_PAD_TRRIGER_ON_THRESHOLD) | |
557 | + && (m_CurGamePadState.bLeftTrigger >= MT_GAME_PAD_TRRIGER_ON_THRESHOLD)) { | |
558 | + isNow = true; | |
559 | + } | |
560 | + } | |
561 | + | |
562 | + return isNow; | |
563 | +} | |
564 | + | |
565 | +//****************************************************************************** | |
566 | +// ボタン押下確認:右トリガー | |
567 | +//****************************************************************************** | |
568 | +bool MTGamePadCtrl::DidPressNow_RTrigger() | |
569 | +{ | |
570 | + bool isNow = false; | |
571 | + | |
572 | + if (m_isConnected) { | |
573 | + if ((m_PrevGamePadState.bRightTrigger < MT_GAME_PAD_TRRIGER_ON_THRESHOLD) | |
574 | + && (m_CurGamePadState.bRightTrigger >= MT_GAME_PAD_TRRIGER_ON_THRESHOLD)) { | |
575 | + isNow = true; | |
576 | + } | |
577 | + } | |
578 | + | |
579 | + return isNow; | |
580 | +} | |
581 | + | |
582 | +//****************************************************************************** | |
583 | +// ボタン押下確認:スタート | |
584 | +//****************************************************************************** | |
585 | +bool MTGamePadCtrl::DidPressNow_Start() | |
586 | +{ | |
587 | + bool isNow = false; | |
588 | + | |
589 | + if (m_isConnected) { | |
590 | + if (((m_PrevGamePadState.wButtons & XINPUT_GAMEPAD_START) == 0) | |
591 | + && ((m_CurGamePadState.wButtons & XINPUT_GAMEPAD_START) != 0)) { | |
592 | + isNow = true; | |
593 | + } | |
594 | + } | |
595 | + | |
596 | + return isNow; | |
597 | +} | |
598 | + | |
599 | +//****************************************************************************** | |
600 | +// ボタン押下確認:バック | |
601 | +//****************************************************************************** | |
602 | +bool MTGamePadCtrl::DidPressNow_Back() | |
603 | +{ | |
604 | + bool isNow = false; | |
605 | + | |
606 | + if (m_isConnected) { | |
607 | + if (((m_PrevGamePadState.wButtons & XINPUT_GAMEPAD_BACK) == 0) | |
608 | + && ((m_CurGamePadState.wButtons & XINPUT_GAMEPAD_BACK) != 0)) { | |
609 | + isNow = true; | |
610 | + } | |
611 | + } | |
612 | + | |
613 | + return isNow; | |
614 | +} | |
615 | + |
@@ -0,0 +1,105 @@ | ||
1 | +//****************************************************************************** | |
2 | +// | |
3 | +// MIDITrail / MTGamePadCtrl | |
4 | +// | |
5 | +// ゲームパッド制御クラス | |
6 | +// | |
7 | +// Copyright (C) 2019 WADA Masashi. All Rights Reserved. | |
8 | +// | |
9 | +//****************************************************************************** | |
10 | + | |
11 | +// MEMO: | |
12 | +// XInputを用いてゲームパッドの状態を取得する。 | |
13 | + | |
14 | +#pragma once | |
15 | + | |
16 | +#include <XInput.h> | |
17 | + | |
18 | + | |
19 | +//****************************************************************************** | |
20 | +// パラメータ定義 | |
21 | +//****************************************************************************** | |
22 | + | |
23 | +//トリガーON閾値(0-255) | |
24 | +#define MT_GAME_PAD_TRRIGER_ON_THRESHOLD (250) | |
25 | + | |
26 | + | |
27 | +//****************************************************************************** | |
28 | +// ゲームパッド制御クラス | |
29 | +//****************************************************************************** | |
30 | +class MTGamePadCtrl | |
31 | +{ | |
32 | +public: | |
33 | + | |
34 | + //コンストラクタ/デストラクタ | |
35 | + MTGamePadCtrl(void); | |
36 | + virtual ~MTGamePadCtrl(); | |
37 | + | |
38 | + //初期化 | |
39 | + int Initialize(int userIndex); | |
40 | + | |
41 | + //状態更新 | |
42 | + int UpdateState(); | |
43 | + | |
44 | + //ボタン状態取得 | |
45 | + bool GetState_DPadUp(); | |
46 | + bool GetState_DPadDown(); | |
47 | + bool GetState_DPadLeft(); | |
48 | + bool GetState_DPadRight(); | |
49 | + bool GetState_A(); | |
50 | + bool GetState_B(); | |
51 | + bool GetState_X(); | |
52 | + bool GetState_Y(); | |
53 | + bool GetState_LShoulder(); | |
54 | + bool GetState_RShoulder(); | |
55 | + bool GetState_LTrigger(); | |
56 | + bool GetState_RTrigger(); | |
57 | + bool GetState_Start(); | |
58 | + bool GetState_Back(); | |
59 | + | |
60 | + //スティック状態取得(0.0 - 1.0) | |
61 | + float GetState_ThumbLX(); | |
62 | + float GetState_ThumbLY(); | |
63 | + float GetState_ThumbRX(); | |
64 | + float GetState_ThumbRY(); | |
65 | + | |
66 | + //ボタン押下確認 | |
67 | + bool DidPressNow_A(); | |
68 | + bool DidPressNow_B(); | |
69 | + bool DidPressNow_X(); | |
70 | + bool DidPressNow_Y(); | |
71 | + bool DidPressNow_LShoulder(); | |
72 | + bool DidPressNow_RShoulder(); | |
73 | + bool DidPressNow_LTrigger(); | |
74 | + bool DidPressNow_RTrigger(); | |
75 | + bool DidPressNow_Start(); | |
76 | + bool DidPressNow_Back(); | |
77 | + | |
78 | +private: | |
79 | + | |
80 | + //ユーザインデックス | |
81 | + int m_UserIndex; | |
82 | + | |
83 | + //ゲームパッド接続状態 | |
84 | + bool m_isConnected; | |
85 | + | |
86 | + //ゲームパッド状態 | |
87 | + XINPUT_GAMEPAD m_PrevGamePadState; | |
88 | + XINPUT_GAMEPAD m_CurGamePadState; | |
89 | + | |
90 | + //スティック状態 | |
91 | + float m_ThumbLX; | |
92 | + float m_ThumbLY; | |
93 | + float m_ThumbRX; | |
94 | + float m_ThumbRY; | |
95 | + | |
96 | + void _NormalizeLStickState(); | |
97 | + void _NormalizeRStickState(); | |
98 | + | |
99 | +}; | |
100 | + | |
101 | + | |
102 | + | |
103 | + | |
104 | + | |
105 | + |
@@ -70,6 +70,7 @@ | ||
70 | 70 | #define IDM_ENABLE_BACKGROUNDIMAGE 32842 |
71 | 71 | #define IDM_VIEWPOINT2 32843 |
72 | 72 | #define IDM_VIEWPOINT3 32844 |
73 | +#define IDM_FULLSCREEN 32849 | |
73 | 74 | #define IDC_STATIC -1 |
74 | 75 | |
75 | 76 | // Next default values for new objects |
@@ -78,7 +79,7 @@ | ||
78 | 79 | #ifndef APSTUDIO_READONLY_SYMBOLS |
79 | 80 | #define _APS_NO_MFC 1 |
80 | 81 | #define _APS_NEXT_RESOURCE_VALUE 134 |
81 | -#define _APS_NEXT_COMMAND_VALUE 32848 | |
82 | +#define _APS_NEXT_COMMAND_VALUE 32850 | |
82 | 83 | #define _APS_NEXT_CONTROL_VALUE 1025 |
83 | 84 | #define _APS_NEXT_SYMED_VALUE 110 |
84 | 85 | #endif |
@@ -1,6 +1,6 @@ | ||
1 | 1 | ****************************************************************************** |
2 | 2 | |
3 | - MIDITrail source code Ver.1.2.5 for Windows | |
3 | + MIDITrail source code Ver.1.2.6 for Windows | |
4 | 4 | |
5 | 5 | Copyright (C) 2010-2019 WADA Masashi. All Rights Reserved. |
6 | 6 |
@@ -1,6 +1,6 @@ | ||
1 | 1 | ****************************************************************************** |
2 | 2 | |
3 | - MIDITrail ソースコード Ver.1.2.5 for Windows | |
3 | + MIDITrail ソースコード Ver.1.2.6 for Windows | |
4 | 4 | |
5 | 5 | Copyright (C) 2010-2019 WADA Masashi. All Rights Reserved. |
6 | 6 |
@@ -4,7 +4,7 @@ | ||
4 | 4 | <meta http-equiv="content-type" content="text/html; charset=UTF-8"> |
5 | 5 | <meta http-equiv="Content-Language" content="en"> |
6 | 6 | <link rel="stylesheet" href="Files/doc.css" type="text/css"> |
7 | -<title>MIDITrail Ver.1.2.5 for Windows User Manual</title> | |
7 | +<title>MIDITrail Ver.1.2.6 for Windows User Manual</title> | |
8 | 8 | </head> |
9 | 9 | <body> |
10 | 10 |
@@ -15,7 +15,7 @@ | ||
15 | 15 | English / <a href="MANUAL.ja.html">Japanese</a> |
16 | 16 | </div> |
17 | 17 | |
18 | -<h1>MIDITrail Ver.1.2.5 for Windows User Manual</h1> | |
18 | +<h1>MIDITrail Ver.1.2.6 for Windows User Manual</h1> | |
19 | 19 | |
20 | 20 | <p> |
21 | 21 | Copyright (c) 2010-2019, WADA Masashi All rights reserved.<br> |
@@ -262,7 +262,7 @@ or when you push following key, you can move to a fixed viewpoint. | ||
262 | 262 | |
263 | 263 | <h3>(5) Change of window size</h3> |
264 | 264 | <p> |
265 | -Select "Window size..." from "View" menu, the Window size configuration dialog will appear.<br> | |
265 | +When you select "Window size..." from "View" menu, the Window size configuration dialog will appear.<br> | |
266 | 266 | Select your favorite window size, and push the OK button.<br> |
267 | 267 | You can not change window size while playing or pausing. |
268 | 268 | </p> |
@@ -275,7 +275,13 @@ If you want to specify any window size, fill in "Width" "Height".<br> | ||
275 | 275 | If you want to apply that size to the view area, check "Apply to the view area". |
276 | 276 | </p> |
277 | 277 | |
278 | -<h3>(6) Display counters</h3> | |
278 | +<h3>(6) Full Screen</h3> | |
279 | +<p> | |
280 | +When you select "Full Screen" from "View" menu, you can switch between window mode and full screen mode.<br> | |
281 | +By F11 key, you can switch the mode too. | |
282 | +</p> | |
283 | + | |
284 | +<h3>(7) Display counters</h3> | |
279 | 285 | |
280 | 286 | <p> |
281 | 287 | <img src="Files/Counter.png"><br> |
@@ -294,7 +300,7 @@ If you want to apply that size to the view area, check "Apply to the view area" | ||
294 | 300 | </table> |
295 | 301 | </p> |
296 | 302 | |
297 | -<h3>(7) View mode select</h3> | |
303 | +<h3>(8) View mode select</h3> | |
298 | 304 | <p> |
299 | 305 | You can select the view mode from "View" menu. |
300 | 306 | You can not change the view mode while playing or pausing. |
@@ -303,7 +309,7 @@ You can not change the view mode while playing or pausing. | ||
303 | 309 | <img src="Files/ViewMenu-Mode.png"><br> |
304 | 310 | </p> |
305 | 311 | |
306 | -<h3>(8) Display/Effect switch</h3> | |
312 | +<h3>(9) Display/Effect switch</h3> | |
307 | 313 | <p> |
308 | 314 | You can switch the display/effect at "View" menu. |
309 | 315 | </p> |
@@ -316,7 +322,7 @@ Some MIDI animation works are using pitch bend to shift the piano roll bars with | ||
316 | 322 | If the MIDI animation is not displayed correctly, please disable the pitch bend effect to fix the piano roll bars. |
317 | 323 | </p> |
318 | 324 | |
319 | -<h3>(9) MIDITrail command line interface</h3> | |
325 | +<h3>(10) MIDITrail command line interface</h3> | |
320 | 326 | <p> |
321 | 327 | If you want to start MIDITrail by command line, you can use following arguments. |
322 | 328 | </p> |
@@ -335,7 +341,7 @@ MIDITrail.exe [-p] [-q] ["path\to\file"] | ||
335 | 341 | If you drop a MIDI file to the shortcut of MIDITrail, MIDITrail open the file on startup. |
336 | 342 | </p> |
337 | 343 | |
338 | -<h3>(10) Graphic configuration</h3> | |
344 | +<h3>(11) Graphic configuration</h3> | |
339 | 345 | <p> |
340 | 346 | Select "Graphic..." from "Option" menu, the graphic configuration dialog will appear.<br> |
341 | 347 | You can not change graphic configuration while playing or pausing. |
@@ -360,7 +366,7 @@ You can change a quarter note length of piano roll.<br> | ||
360 | 366 | You can specify a value from 0% to 1000%. The default value is 100%.<br> |
361 | 367 | </p> |
362 | 368 | |
363 | -<h3>(11) MIDI IN Monitor</h3> | |
369 | +<h3>(12) MIDI IN Monitor</h3> | |
364 | 370 | <p> |
365 | 371 | You can view data sets received from MIDI IN device in realtime.<br> |
366 | 372 | Select "MIDI IN..." from "Option" menu, then "MIDI IN configuration" dialog will appear.<br> |
@@ -375,6 +381,29 @@ When you select "Start Monitoring" from "Playback" menu, MIDI IN monitoring will | ||
375 | 381 | NOTE: MIDITrail can not record data sets received from MIDI IN.<br> |
376 | 382 | </p> |
377 | 383 | |
384 | +<h3>(13) Game Controller</h3> | |
385 | +<p> | |
386 | +You can operate by XInput game controller.<br> | |
387 | +</p> | |
388 | +<p> | |
389 | +<table> | |
390 | + <tr><th>Button / Stick</th><th>Action</th></tr> | |
391 | + <tr><td>START button</td><td>Play / Pause / Resume</td></tr> | |
392 | + <tr><td>A button</td><td>Play / Pause / Resume</td></tr> | |
393 | + <tr><td>B button</td><td>Stop</td></tr> | |
394 | + <tr><td>X button</td><td>Viewpoint: down</td></tr> | |
395 | + <tr><td>Y button</td><td>Viewpoint: up</td></tr> | |
396 | + <tr><td>LB/RB shoulder button</td><td>Change viewpoint</td></tr> | |
397 | + <tr><td>LT/RT trigger button</td><td>Skip back/forward</td></tr> | |
398 | + <tr><td>Directional pad</td><td>Viewpoint movement: front and back, right and left</td></tr> | |
399 | + <tr><td>Left stick</td><td>Viewpoint movement: front and back, right and left</td></tr> | |
400 | + <tr><td>Right stick</td><td>Eye direction</td></tr> | |
401 | +</table> | |
402 | +</p> | |
403 | +<p> | |
404 | +NOTE: MIDITrail does not support DirectInput game controller. | |
405 | +</p> | |
406 | + | |
378 | 407 | <!-- ************************************************************* --> |
379 | 408 | <h2><a name="restriction"></a>5. Restriction</h2> |
380 | 409 |
@@ -445,18 +474,12 @@ Width=800 | ||
445 | 474 | Height=600 |
446 | 475 | </pre> |
447 | 476 | |
448 | -<h3>(4) Q. I want to display in full screen.</h3> | |
449 | -<p> | |
450 | -In present version, MIDITrail can not display in full screen. | |
451 | -It may support in the future. | |
452 | -</p> | |
453 | - | |
454 | -<h3>(5) Q. When I display the menu, the animation stops.</h3> | |
477 | +<h3>(4) Q. When I display the menu, the animation stops.</h3> | |
455 | 478 | <p> |
456 | 479 | Sorry, it is a specification. |
457 | 480 | </p> |
458 | 481 | |
459 | -<h3>(6) Q. I got "DirectX API error. / FUNC: DXRenderer::Initialize / INFO: 8876086A" error.</h3> | |
482 | +<h3>(5) Q. I got "DirectX API error. / FUNC: DXRenderer::Initialize / INFO: 8876086A" error.</h3> | |
460 | 483 | <p> |
461 | 484 | If your PC does not support Direct3D, this error occurs.<br> |
462 | 485 | Please execute "DirectX Diagnostic Tool"(dxdiag.exe), and select "Display" tab. |
@@ -465,7 +488,7 @@ If you can't change "Direct3D Acceleration" to "Enabled", your PC does not suppo | ||
465 | 488 | Please use the PC which supports DirectX 9.0c graphics. |
466 | 489 | </p> |
467 | 490 | |
468 | -<h3>(7) Q. I want to change the ripple more showily.</h3> | |
491 | +<h3>(6) Q. I want to change the ripple more showily.</h3> | |
469 | 492 | <p> |
470 | 493 | You can change size of the ripple by editing configuration file.<br> |
471 | 494 | Please Check "7. Customize - (2) Piano roll".<br> |
@@ -913,6 +936,10 @@ This version was released with MIDITrail for Mac OS X.<br> | ||
913 | 936 | #39228 Changed appendix of user's manual<br> |
914 | 937 | #39229 fixed bug (Code analysis found some mistakes)<br> |
915 | 938 | </td></tr> |
939 | + <tr><td>2019/06/02</td><td>Ver.1.2.6</td><td> | |
940 | +#39274 Added full screen mode<br> | |
941 | +#39275 Added support for game controller<br> | |
942 | + </td></tr> | |
916 | 943 | </table> |
917 | 944 | </p> |
918 | 945 |
@@ -4,7 +4,7 @@ | ||
4 | 4 | <meta http-equiv="content-type" content="text/html; charset=UTF-8"> |
5 | 5 | <meta http-equiv="Content-Language" content="ja"> |
6 | 6 | <link rel="stylesheet" href="Files/doc.css" type="text/css"> |
7 | -<title>MIDITrail Ver.1.2.5 for Windows ユーザーマニュアル</title> | |
7 | +<title>MIDITrail Ver.1.2.6 for Windows ユーザーマニュアル</title> | |
8 | 8 | </head> |
9 | 9 | <body> |
10 | 10 |
@@ -14,7 +14,7 @@ | ||
14 | 14 | <a href="MANUAL.en.html">English</a> / Japanese |
15 | 15 | </div> |
16 | 16 | |
17 | -<h1>MIDITrail Ver.1.2.5 for Windows ユーザーマニュアル</h1> | |
17 | +<h1>MIDITrail Ver.1.2.6 for Windows ユーザーマニュアル</h1> | |
18 | 18 | |
19 | 19 | <p> |
20 | 20 | Copyright (c) 2010-2019, WADA Masashi All rights reserved.<br> |
@@ -272,8 +272,14 @@ Viewメニューから「Viewpoint 1 / Viewpoint 2 / Viewpoint 3」を選択す | ||
272 | 272 | 「Aplly to the view area」を選択すると、設定値が画像領域のサイズに反映されます。<br> |
273 | 273 | </p> |
274 | 274 | |
275 | -<h3>(6) 表示カウンタの種類</h3> | |
275 | +<h3>(6) フルスクリーン表示</h3> | |
276 | +<p> | |
277 | +「View」メニューから「Full Screen」を選択すると、ウィンドウ表示とフルスクリーン表示を | |
278 | +切り替えることができます。<br> | |
279 | +F11キーを押すことで、表示を切り替えることも可能です。 | |
280 | +</p> | |
276 | 281 | |
282 | +<h3>(7) 表示カウンタの種類</h3> | |
277 | 283 | <p> |
278 | 284 | <img src="Files/Counter.png"><br> |
279 | 285 | </p> |
@@ -291,7 +297,7 @@ Viewメニューから「Viewpoint 1 / Viewpoint 2 / Viewpoint 3」を選択す | ||
291 | 297 | </table> |
292 | 298 | </p> |
293 | 299 | |
294 | -<h3>(7) ビューモード選択</h3> | |
300 | +<h3>(8) ビューモード選択</h3> | |
295 | 301 | <p> |
296 | 302 | 「View」メニューでビューモードを選択することができます。 |
297 | 303 | 演奏中/一時停止中にビューモードの変更はできません。 |
@@ -300,7 +306,7 @@ Viewメニューから「Viewpoint 1 / Viewpoint 2 / Viewpoint 3」を選択す | ||
300 | 306 | <img src="Files/ViewMenu-Mode.png"><br> |
301 | 307 | </p> |
302 | 308 | |
303 | -<h3>(8) 表示/エフェクト選択</h3> | |
309 | +<h3>(9) 表示/エフェクト選択</h3> | |
304 | 310 | <p> |
305 | 311 | 「View」メニューで表示/エフェクトの有無を切り替えることができます。 |
306 | 312 | </p> |
@@ -315,7 +321,7 @@ MIDIアニメ作品が正常に表示されない場合は、バーの表示位 | ||
315 | 321 | ピッチベンドのエフェクトをOFFにしてください。 |
316 | 322 | </p> |
317 | 323 | |
318 | -<h3>(9) MIDITrailコマンドラインインターフェース</h3> | |
324 | +<h3>(10) MIDITrailコマンドラインインターフェース</h3> | |
319 | 325 | <p> |
320 | 326 | コマンドラインからMIDITrailを起動する場合は、以下の引数を指定できます。 |
321 | 327 | </p> |
@@ -334,7 +340,7 @@ MIDITrail.exe [-p] [-q] ["path\to\file"] | ||
334 | 340 | MIDITrailのショートカットにMIDIファイルをドロップすると、MIDITrail起動時にファイルを開くことができます。 |
335 | 341 | </p> |
336 | 342 | |
337 | -<h3>(10) グラフィック設定</h3> | |
343 | +<h3>(11) グラフィック設定</h3> | |
338 | 344 | <p> |
339 | 345 | 「Option」メニューから「Graphic...」を選択すると、グラフィック設定ダイアログが表示されます。<br> |
340 | 346 | 演奏中/一時停止中にグラフィック設定の変更はできません。 |
@@ -359,7 +365,7 @@ PCがアンチエイリアシングに対応していない場合は「Not suppo | ||
359 | 365 | 0%から1000%を指定できます。デフォルトは100%です。 |
360 | 366 | </p> |
361 | 367 | |
362 | -<h3>(11) MIDI IN モニタ</h3> | |
368 | +<h3>(12) MIDI IN モニタ</h3> | |
363 | 369 | <p> |
364 | 370 | MIDI INデバイスで受信したデータをリアルタイム表示することができます。<br> |
365 | 371 | 「Option」メニューから「MIDI IN...」を選択すると、MIDI IN設定ダイアログが表示されます。<br> |
@@ -374,6 +380,29 @@ MIDI INで受信したデータをそのままMIDI OUTに出力する場合は | ||
374 | 380 | なお、MIDITrailはMIDI INで受信したデータを保存することはできません。<br> |
375 | 381 | </p> |
376 | 382 | |
383 | +<h3>(13) ゲームコントローラー</h3> | |
384 | +<p> | |
385 | +XInput対応のゲームコントローラーを用いて操作することができます。<br> | |
386 | +</p> | |
387 | +<p> | |
388 | +<table> | |
389 | + <tr><th>ボタン / スティック</th><th>操作</th></tr> | |
390 | + <tr><td>START ボタン</td><td>再生/一時停止</td></tr> | |
391 | + <tr><td>A ボタン</td><td>再生/一時停止</td></tr> | |
392 | + <tr><td>B ボタン</td><td>停止</td></tr> | |
393 | + <tr><td>X ボタン</td><td>視点移動:下降</td></tr> | |
394 | + <tr><td>Y ボタン</td><td>視点移動:上昇</td></tr> | |
395 | + <tr><td>LB/RB ショルダーボタン</td><td>視点切り替え</td></tr> | |
396 | + <tr><td>LT/RT トリガーボタン</td><td>再生スキップ</td></tr> | |
397 | + <tr><td>十字キー</td><td>視点移動:前後左右</td></tr> | |
398 | + <tr><td>左スティック</td><td>視点移動:前後左右</td></tr> | |
399 | + <tr><td>右スティック</td><td>視線方向</td></tr> | |
400 | +</table> | |
401 | +</p> | |
402 | +<p> | |
403 | +注意:MIDITrailはDirectInputのゲームコントローラーをサポートしていません。 | |
404 | +</p> | |
405 | + | |
377 | 406 | <!-- ************************************************************* --> |
378 | 407 | <h2><a name="restriction"></a>5. 制限事項</h2> |
379 | 408 |
@@ -448,18 +477,12 @@ Width=800 | ||
448 | 477 | Height=600 |
449 | 478 | </pre> |
450 | 479 | |
451 | -<h3>(4) フルスクリーン表示にしたい</h3> | |
452 | -<p> | |
453 | -現時点では、フルスクリーン表示には対応していません。<br> | |
454 | -そのうち対応するかもしれません。 | |
455 | -</p> | |
456 | - | |
457 | -<h3>(5) メニューを表示すると画面の描画が止まります</h3> | |
480 | +<h3>(4) メニューを表示すると画面の描画が止まります</h3> | |
458 | 481 | <p> |
459 | 482 | すいません。仕様です。<br> |
460 | 483 | </p> |
461 | 484 | |
462 | -<h3>(6) 「DirectX API error. / FUNC: DXRenderer::Initialize / INFO: 8876086A」というエラーが出ます</h3> | |
485 | +<h3>(5) 「DirectX API error. / FUNC: DXRenderer::Initialize / INFO: 8876086A」というエラーが出ます</h3> | |
463 | 486 | <p> |
464 | 487 | お使いのPCがDirect3Dをサポートしていない場合にこのエラーが発生します。<br> |
465 | 488 | DirectX診断ツール(dxdiag.exe)を起動して「ディスプレイ」タブを選択し、 |
@@ -468,7 +491,7 @@ DirectX診断ツール(dxdiag.exe)を起動して「ディスプレイ」タブ | ||
468 | 491 | DirectX 9.0cをサポートしているPCを使用してください。 |
469 | 492 | </p> |
470 | 493 | |
471 | -<h3>(7) 波紋を派手にしたい</h3> | |
494 | +<h3>(6) 波紋を派手にしたい</h3> | |
472 | 495 | <p> |
473 | 496 | 設定ファイルを編集することにより、波紋の大きさを変更することができます。<br> |
474 | 497 | 詳しくは「7. カスタマイズ - (2) ピアノロール表示のカスタマイズ」を参照してください。<br> |
@@ -903,6 +926,10 @@ MIDITrail for Mac OS Xと同時にリリース<br> | ||
903 | 926 | #39228 仕様変更:ユーザマニュアル補遺修正<br> |
904 | 927 | #39229 バグ修正:コード分析対応<br> |
905 | 928 | </td></tr> |
929 | + <tr><td>2019/06/02</td><td>Ver.1.2.6</td><td> | |
930 | +#39274 機能追加:フルスクリーン表示対応<br> | |
931 | +#39275 機能追加:ゲームコントローラー対応<br> | |
932 | + </td></tr> | |
906 | 933 | </table> |
907 | 934 | </p> |
908 | 935 |