MIDITrail をピカピカにする。鍵盤方向自動切替・多ポート・歌詞対応等
Revisão | 93847d9f0a725bde4765fdb9936cbebb9e3eb79a (tree) |
---|---|
Hora | 2019-08-28 07:06:19 |
Autor | yoshy <yoshy@user...> |
Commiter | yoshy |
[CLEAN] ポートとキーボードのマッピング処理を制御クラスからデザインクラス側に移動
@@ -48,14 +48,10 @@ public: | ||
48 | 48 | ); |
49 | 49 | |
50 | 50 | //更新 |
51 | -// >>> modify 20120728 yossiepon begin | |
52 | - virtual int Transform(LPDIRECT3DDEVICE9 pD3DDevice, float rollAngle); | |
53 | -// <<< modify 20120728 yossiepon end | |
51 | + int Transform(LPDIRECT3DDEVICE9 pD3DDevice, float rollAngle); | |
54 | 52 | |
55 | 53 | //描画 |
56 | -// >>> modify 20120728 yossiepon begin | |
57 | - virtual int Draw(LPDIRECT3DDEVICE9 pD3DDevice); | |
58 | -// <<< modify 20120728 yossiepon end | |
54 | + int Draw(LPDIRECT3DDEVICE9 pD3DDevice); | |
59 | 55 | |
60 | 56 | //解放 |
61 | 57 | void Release(); |
@@ -67,9 +63,7 @@ public: | ||
67 | 63 | void SetPlayTimeMSec(unsigned long playTimeMsec); |
68 | 64 | |
69 | 65 | //リセット |
70 | -// >>> modify 20120728 yossiepon begin | |
71 | - virtual void Reset(); | |
72 | -// <<< modify 20120728 yossiepon end | |
66 | + void Reset(); | |
73 | 67 | |
74 | 68 | //表示設定 |
75 | 69 | void SetEnable(bool isEnable); |
@@ -139,9 +133,7 @@ protected: | ||
139 | 133 | bool m_isSingleKeyboard; |
140 | 134 | |
141 | 135 | int _CreateNoteStatus(); |
142 | -// >>> modify 20120728 yossiepon begin | |
143 | - virtual int _CreateKeyboards(LPDIRECT3DDEVICE9 pD3DDevice, const TCHAR* pSceneName, SMSeqData* pSeqData); | |
144 | -// <<< modify 20120728 yossiepon end | |
136 | + int _CreateKeyboards(LPDIRECT3DDEVICE9 pD3DDevice, const TCHAR* pSceneName, SMSeqData* pSeqData); | |
145 | 137 | |
146 | 138 | int _TransformActiveNotes(LPDIRECT3DDEVICE9 pD3DDevice); |
147 | 139 |
@@ -27,7 +27,6 @@ using namespace YNBaseLib; | ||
27 | 27 | //****************************************************************************** |
28 | 28 | MTPianoKeyboardCtrlMod::MTPianoKeyboardCtrlMod(void) |
29 | 29 | { |
30 | - m_MaxKeyboardIndex = 0; | |
31 | 30 | ZeroMemory(m_KeyDownRateMod, sizeof(float) * SM_MAX_CH_NUM* SM_MAX_CH_NUM * SM_MAX_NOTE_NUM); |
32 | 31 | } |
33 | 32 |
@@ -71,35 +70,8 @@ int MTPianoKeyboardCtrlMod::Create( | ||
71 | 70 | result = m_KeyboardDesignMod.Initialize(pSceneName, pSeqData); |
72 | 71 | if (result != 0) goto EXIT; |
73 | 72 | |
74 | - //シーケンスデータ:ポートリスト取得 | |
75 | - result = pSeqData->GetPortList(&m_PortList); | |
76 | - if (result != 0) goto EXIT; | |
77 | - | |
78 | - for (index = 0; index < SM_MAX_PORT_NUM; index++) { | |
79 | - m_KeyboardIndex[index] = -1; | |
80 | - } | |
81 | - | |
82 | - //シングルキーボードでない場合 | |
83 | - if (!isSingleKeyboard) { | |
84 | - //ポート番号に昇順のキーボードインデックスを振る | |
85 | - //ポート 0番 3番 5番 に出力する場合のインデックスはそれぞれ 0, 1, 2 | |
86 | - for (index = 0; index < m_PortList.GetSize(); index++) { | |
87 | - m_PortList.GetPort(index, &portNo); | |
88 | - m_KeyboardIndex[portNo] = keyboardIndex; | |
89 | - keyboardIndex++; | |
90 | - if(keyboardIndex == m_KeyboardDesignMod.GetKeyboardMaxDispNum()){ | |
91 | - break; | |
92 | - } | |
93 | - } | |
94 | - m_MaxKeyboardIndex = (unsigned char)keyboardIndex; | |
95 | - } | |
96 | - //シングルキーボードの場合 | |
97 | - else { | |
98 | - //キーボードデザインをシングルモードに設定 | |
73 | + if (isSingleKeyboard) { | |
99 | 74 | m_KeyboardDesignMod.SetKeyboardSingle(); |
100 | - //ポートとキーボードの対応を1:1に固定 | |
101 | - m_KeyboardIndex[0] = 0; | |
102 | - m_MaxKeyboardIndex = 1; | |
103 | 75 | } |
104 | 76 | |
105 | 77 | //トラック取得 |
@@ -141,7 +113,7 @@ int MTPianoKeyboardCtrlMod::_CreateKeyboards( | ||
141 | 113 | unsigned char index = 0; |
142 | 114 | LPDIRECT3DTEXTURE9 pTexture = NULL; |
143 | 115 | |
144 | - for (index = 0; index < m_MaxKeyboardIndex; index++) { | |
116 | + for (index = 0; index < m_KeyboardDesignMod.GetKeyboardDispNum(); index++) { | |
145 | 117 | try { |
146 | 118 | m_pPianoKeyboard[index] = new MTPianoKeyboardMod; |
147 | 119 | } |
@@ -166,6 +138,7 @@ EXIT:; | ||
166 | 138 | //****************************************************************************** |
167 | 139 | int MTPianoKeyboardCtrlMod::Transform( |
168 | 140 | LPDIRECT3DDEVICE9 pD3DDevice, |
141 | + D3DXVECTOR3 camVector, | |
169 | 142 | float rollAngle |
170 | 143 | ) |
171 | 144 | { |
@@ -189,35 +162,16 @@ int MTPianoKeyboardCtrlMod::Transform( | ||
189 | 162 | playbackPosVector = m_NoteDesignMod.GetWorldMoveVector(); |
190 | 163 | playbackPosVector.x += m_NoteDesignMod.GetPlayPosX(m_CurTickTime); |
191 | 164 | |
192 | - unsigned char lastPortNo = 0; | |
193 | - | |
194 | - if (!m_isSingleKeyboard) { | |
195 | - //シングルキーボードでない場合、最終ポート番号を取得 | |
196 | - m_PortList.GetPort(m_PortList.GetSize()-1, &lastPortNo); | |
197 | - } | |
198 | - else { | |
199 | - //シングルキーボードの場合、最終ポート番号は0固定 | |
200 | - lastPortNo = 0; | |
201 | - } | |
202 | - | |
203 | - for(portNo = 0; portNo <= lastPortNo; portNo ++) { | |
204 | - | |
205 | - //ポート番号からキーボードインデックスを取得 | |
206 | - //シングルキーボードの場合、インデックスは0固定 | |
207 | - int keyboardIndex = !m_isSingleKeyboard ? m_KeyboardIndex[portNo] : 0; | |
208 | - | |
209 | - if(keyboardIndex == -1) { | |
210 | - continue; | |
211 | - } | |
165 | + for(index = 0; index < m_KeyboardDesignMod.GetKeyboardDispNum(); index ++) { | |
212 | 166 | |
213 | 167 | //移動ベクトル:キーボード基準座標 |
214 | - basePosVector = m_KeyboardDesignMod.GetKeyboardBasePos(keyboardIndex, rollAngle); | |
168 | + basePosVector = m_KeyboardDesignMod.GetKeyboardBasePos(index, rollAngle); | |
215 | 169 | |
216 | 170 | //移動ベクトル:ピッチベンドシフトを反映 |
217 | - basePosVector.x += GetMaxPitchBendShift(portNo); | |
171 | + basePosVector.x += _GetMaxPitchBendShift(index); | |
218 | 172 | |
219 | 173 | //キーボード移動 |
220 | - result = m_pPianoKeyboard[keyboardIndex]->Transform(pD3DDevice, basePosVector, playbackPosVector, rollAngle); | |
174 | + result = m_pPianoKeyboard[index]->Transform(pD3DDevice, basePosVector, playbackPosVector, rollAngle); | |
221 | 175 | if (result != 0) goto EXIT; |
222 | 176 | } |
223 | 177 |
@@ -267,7 +221,7 @@ int MTPianoKeyboardCtrlMod::_UpdateNoteStatus( | ||
267 | 221 | else { |
268 | 222 | //ノート情報を破棄 |
269 | 223 | //発音中のキーをリセットする |
270 | - result = m_pPianoKeyboard[_GetKeyboardIndexFromNote(note)]->ResetKey(note.noteNo); | |
224 | + result = m_pPianoKeyboard[m_KeyboardDesignMod.GetKeyboardIndex(note)]->ResetKey(note.noteNo); | |
271 | 225 | if (result != 0) goto EXIT; |
272 | 226 | |
273 | 227 | pNoteStatus->isActive = false; |
@@ -298,7 +252,6 @@ int MTPianoKeyboardCtrlMod::_UpdateVertexOfActiveNotes( | ||
298 | 252 | unsigned long elapsedTime = 0; |
299 | 253 | SMNote note; |
300 | 254 | D3DXCOLOR noteColor; |
301 | - unsigned char notePortNo; | |
302 | 255 | |
303 | 256 | ZeroMemory(m_KeyDownRateMod, sizeof(float) * SM_MAX_CH_NUM* SM_MAX_CH_NUM * SM_MAX_NOTE_NUM); |
304 | 257 |
@@ -320,31 +273,23 @@ int MTPianoKeyboardCtrlMod::_UpdateVertexOfActiveNotes( | ||
320 | 273 | //ノートの色 |
321 | 274 | noteColor = m_NoteDesignMod.GetNoteBoxColor(note.portNo, note.chNo, note.noteNo); |
322 | 275 | |
323 | - //シングルキーボードでない場合 | |
324 | - if (!m_isSingleKeyboard) { | |
325 | - //ノートのポート番号を取得 | |
326 | - notePortNo = note.portNo; | |
327 | - } | |
328 | - //シングルキーボードの場合 | |
329 | - else { | |
330 | - //ノートのポート番号を0固定に | |
331 | - notePortNo = 0; | |
332 | - } | |
276 | + int portNo = m_KeyboardDesignMod.GetPortNo(note); | |
277 | + int keyboardIndex = m_KeyboardDesignMod.GetKeyboardIndex(note); | |
333 | 278 | |
334 | 279 | //発音対象キーを回転 |
335 | 280 | // すでに同一ノートに対して頂点を更新している場合 |
336 | 281 | // 押下率が前回よりも上回る場合に限り頂点を更新する |
337 | - if (m_KeyDownRateMod[notePortNo][note.chNo][note.noteNo] < m_pNoteStatus[i].keyDownRate) { | |
282 | + if (m_KeyDownRateMod[portNo][note.chNo][note.noteNo] < m_pNoteStatus[i].keyDownRate) { | |
338 | 283 | //複数チャンネルのキー状態をポート別に集約する |
339 | - result = m_pPianoKeyboard[_GetKeyboardIndexFromNote(note)]->PushKey( | |
340 | - note.chNo, | |
341 | - note.noteNo, | |
342 | - m_pNoteStatus[i].keyDownRate, | |
343 | - elapsedTime, | |
344 | - ¬eColor | |
345 | - ); | |
284 | + result = m_pPianoKeyboard[keyboardIndex]->PushKey( | |
285 | + note.chNo, | |
286 | + note.noteNo, | |
287 | + m_pNoteStatus[i].keyDownRate, | |
288 | + elapsedTime, | |
289 | + ¬eColor | |
290 | + ); | |
346 | 291 | if (result != 0) goto EXIT; |
347 | - m_KeyDownRateMod[notePortNo][note.chNo][note.noteNo] = m_pNoteStatus[i].keyDownRate; | |
292 | + m_KeyDownRateMod[portNo][note.chNo][note.noteNo] = m_pNoteStatus[i].keyDownRate; | |
348 | 293 | } |
349 | 294 | } |
350 | 295 |
@@ -366,19 +311,13 @@ int MTPianoKeyboardCtrlMod::Draw( | ||
366 | 311 | |
367 | 312 | if (!m_isEnable) goto EXIT; |
368 | 313 | |
369 | - //レンダリングステート設定:Zバッファへの書き込みオフ | |
370 | -// pD3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, FALSE); | |
371 | - | |
372 | 314 | //キーボードの描画 |
373 | - for (index = 0; index < m_MaxKeyboardIndex; index++) { | |
315 | + for (index = 0; index < m_KeyboardDesignMod.GetKeyboardDispNum(); index++) { | |
374 | 316 | |
375 | 317 | result = m_pPianoKeyboard[index]->Draw(pD3DDevice); |
376 | 318 | if (result != 0) goto EXIT; |
377 | 319 | } |
378 | 320 | |
379 | - //レンダリングステート設定:Zバッファへの書き込みオン | |
380 | -// pD3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, TRUE); | |
381 | - | |
382 | 321 | EXIT:; |
383 | 322 | return result; |
384 | 323 | } |
@@ -402,7 +341,7 @@ void MTPianoKeyboardCtrlMod::Reset() | ||
402 | 341 | //if (result != 0) goto EXIT; |
403 | 342 | |
404 | 343 | //発音中のキーをリセットする |
405 | - result = m_pPianoKeyboard[_GetKeyboardIndexFromNote(note)]->ResetKey(note.noteNo); | |
344 | + result = m_pPianoKeyboard[m_KeyboardDesignMod.GetKeyboardIndex(note)]->ResetKey(note.noteNo); | |
406 | 345 | //if (result != 0) goto EXIT; |
407 | 346 | } |
408 | 347 | m_pNoteStatus[i].isActive = false; |
@@ -414,52 +353,44 @@ void MTPianoKeyboardCtrlMod::Reset() | ||
414 | 353 | return; |
415 | 354 | } |
416 | 355 | |
417 | -int MTPianoKeyboardCtrlMod::_GetKeyboardIndexFromNote(const SMNote ¬e) | |
418 | -{ | |
419 | - //シングルキーボードでない場合 | |
420 | - if (!m_isSingleKeyboard) { | |
421 | - //ノートのピアノ番号を取得 | |
422 | - return m_KeyboardIndex[note.portNo]; | |
423 | - } | |
424 | - //シングルキーボードの場合 | |
425 | - else { | |
426 | - //ノートのピアノ番号を0固定に | |
427 | - return 0; | |
428 | - } | |
429 | -} | |
430 | - | |
431 | 356 | //****************************************************************************** |
432 | 357 | // ピッチベンドシフトの最大量を求める |
433 | 358 | //****************************************************************************** |
434 | -float MTPianoKeyboardCtrlMod::GetMaxPitchBendShift(unsigned char portNo) { | |
359 | +float MTPianoKeyboardCtrlMod::_GetMaxPitchBendShift(int keyboardIndex) { | |
360 | + | |
361 | + if (!m_KeyboardDesignMod.IsKeyboardSingle()) { | |
362 | + return _GetMaxPitchBendShift(keyboardIndex, 0.0f); | |
363 | + } | |
435 | 364 | |
436 | 365 | float max = 0.0f; |
437 | - float cur = 0.0f; | |
438 | 366 | |
439 | - //シングルキーボードでない場合、指定のポート番号から求める | |
440 | - //シングルキーボードの場合、シーケンスに含まれるポート番号すべてから求める | |
441 | - int portListSize = !m_isSingleKeyboard ? 1 : m_PortList.GetSize(); | |
367 | + int portListSize = m_KeyboardDesignMod.GetPortListSize(); | |
442 | 368 | |
443 | 369 | for (int i = 0; i < portListSize; i++) { |
444 | 370 | |
445 | - if (m_isSingleKeyboard) { | |
446 | - m_PortList.GetPort(i, &portNo); | |
447 | - } | |
371 | + max = _GetMaxPitchBendShift(i, max); | |
372 | + } | |
448 | 373 | |
449 | - if (!m_isActivePort[portNo]) { | |
450 | - continue; | |
451 | - } | |
374 | + return max; | |
375 | +} | |
376 | + | |
377 | +float MTPianoKeyboardCtrlMod::_GetMaxPitchBendShift(int keyboardIndex, float max) { | |
378 | + | |
379 | + unsigned char portNo = m_KeyboardDesignMod.GetPortNoFromKeyboardIndex(keyboardIndex); | |
380 | + | |
381 | + if (!m_isActivePort[portNo]) { | |
382 | + return max; | |
383 | + } | |
384 | + | |
385 | + for (unsigned char chNo = 0; chNo < SM_MAX_CH_NUM; chNo++) { | |
452 | 386 | |
453 | - for (unsigned char chNo = 0; chNo < SM_MAX_CH_NUM; chNo++) { | |
387 | + float pitchBendShift = _GetPichBendShiftPosX(portNo, chNo); | |
454 | 388 | |
455 | - float pitchBendShift = _GetPichBendShiftPosX(portNo, chNo); | |
456 | - if(max < fabs(pitchBendShift)) { | |
389 | + if(fabs(max) < fabs(pitchBendShift)) { | |
457 | 390 | |
458 | - cur = pitchBendShift; | |
459 | - max = fabs(pitchBendShift); | |
460 | - } | |
391 | + max = pitchBendShift; | |
461 | 392 | } |
462 | 393 | } |
463 | 394 | |
464 | - return cur; | |
395 | + return max; | |
465 | 396 | } |
\ No newline at end of file |
@@ -36,17 +36,21 @@ public: | ||
36 | 36 | ); |
37 | 37 | |
38 | 38 | //更新 |
39 | - virtual int Transform(LPDIRECT3DDEVICE9 pD3DDevice, float rollAngle); | |
39 | + int Transform( | |
40 | + LPDIRECT3DDEVICE9 pD3DDevice, | |
41 | + D3DXVECTOR3 camVector, | |
42 | + float rollAngle | |
43 | + ); | |
40 | 44 | |
41 | 45 | //描画 |
42 | - virtual int Draw(LPDIRECT3DDEVICE9 pD3DDevice); | |
46 | + int Draw(LPDIRECT3DDEVICE9 pD3DDevice); | |
43 | 47 | |
44 | 48 | //リセット |
45 | - virtual void Reset(); | |
49 | + void Reset(); | |
46 | 50 | |
47 | 51 | protected: |
48 | 52 | |
49 | - virtual int _CreateKeyboards(LPDIRECT3DDEVICE9 pD3DDevice, const TCHAR* pSceneName, SMSeqData* pSeqData); | |
53 | + int _CreateKeyboards(LPDIRECT3DDEVICE9 pD3DDevice, const TCHAR* pSceneName, SMSeqData* pSeqData); | |
50 | 54 | |
51 | 55 | private: |
52 | 56 |
@@ -56,16 +60,9 @@ private: | ||
56 | 60 | //キーボードデザイン |
57 | 61 | MTPianoKeyboardDesignMod m_KeyboardDesignMod; |
58 | 62 | |
59 | - //ポートリスト | |
60 | - SMPortList m_PortList; | |
61 | - | |
62 | 63 | //アクティブポートフラグ |
63 | 64 | bool m_isActivePort[SM_MAX_PORT_NUM]; |
64 | 65 | |
65 | - //キーボードインデックス | |
66 | - int m_KeyboardIndex[SM_MAX_PORT_NUM]; | |
67 | - unsigned char m_MaxKeyboardIndex; | |
68 | - | |
69 | 66 | //キー押下率配列 |
70 | 67 | float m_KeyDownRateMod[SM_MAX_CH_NUM][SM_MAX_CH_NUM][SM_MAX_NOTE_NUM]; |
71 | 68 |
@@ -78,9 +75,8 @@ private: | ||
78 | 75 | ); |
79 | 76 | virtual int _UpdateVertexOfActiveNotes(LPDIRECT3DDEVICE9 pD3DDevice); |
80 | 77 | |
81 | - int _GetKeyboardIndexFromNote(const SMNote ¬e); | |
82 | - | |
83 | - float GetMaxPitchBendShift(unsigned char portNo); | |
78 | + float _GetMaxPitchBendShift(int keyboardIndex); | |
79 | + float _GetMaxPitchBendShift(int keyboardIndex, float max); | |
84 | 80 | }; |
85 | 81 | |
86 | 82 |
@@ -921,16 +921,6 @@ unsigned long MTPianoKeyboardDesign::GetKeyboardMaxDispNum() | ||
921 | 921 | return (unsigned long)m_KeyboardMaxDispNum; |
922 | 922 | } |
923 | 923 | |
924 | -// >>> add 20180404 yossiepon begin | |
925 | -//****************************************************************************** | |
926 | -// キーボード表示数設定 | |
927 | -//****************************************************************************** | |
928 | -void MTPianoKeyboardDesign::SetKeyboardSingle() | |
929 | -{ | |
930 | - m_KeyboardMaxDispNum = 1; | |
931 | -} | |
932 | -// <<< add 20180404 yossiepon end | |
933 | - | |
934 | 924 | //****************************************************************************** |
935 | 925 | // キー表示範囲:開始 |
936 | 926 | //****************************************************************************** |
@@ -185,10 +185,6 @@ public: | ||
185 | 185 | //キーボード最大表示数取得 |
186 | 186 | unsigned long GetKeyboardMaxDispNum(); |
187 | 187 | |
188 | -// >>> add 20180404 yossiepon begin | |
189 | - void SetKeyboardSingle(); | |
190 | -// <<< add 20180404 yossiepon end | |
191 | - | |
192 | 188 | //キー表示範囲取得 |
193 | 189 | unsigned char GetKeyDispRangeStart(); |
194 | 190 | unsigned char GetKeyDispRangeEnd(); |
@@ -282,9 +278,7 @@ private: | ||
282 | 278 | protected: |
283 | 279 | // <<< modify 20161224 yossiepon end |
284 | 280 | |
285 | -// >>> modify 20120728 yossiepon begin | |
286 | - virtual void _Initialize(); | |
287 | -// <<< modify 20120728 yossiepon end | |
281 | + void _Initialize(); | |
288 | 282 | |
289 | 283 | // >>> modify access level 20161224 yossiepon begin |
290 | 284 | private: |
@@ -297,10 +291,7 @@ private: | ||
297 | 291 | protected: |
298 | 292 | // <<< modify 20161224 yossiepon end |
299 | 293 | |
300 | -// >>> modify 20120728 yossiepon begin | |
301 | - virtual int _LoadConfFile(const TCHAR* pSceneName); | |
302 | -// <<< modify 20120728 yossiepon end | |
303 | - | |
294 | + int _LoadConfFile(const TCHAR* pSceneName); | |
304 | 295 | }; |
305 | 296 | |
306 | 297 |
@@ -51,6 +51,8 @@ int MTPianoKeyboardDesignMod::Initialize( | ||
51 | 51 | //基底クラスの初期化処理を呼び出す |
52 | 52 | MTPianoKeyboardDesign::Initialize(pSceneName, pSeqData); |
53 | 53 | |
54 | + m_KeyboardDispNum = m_PortList.GetSize(); | |
55 | + | |
54 | 56 | //設定ファイル読み込み |
55 | 57 | result = _LoadConfFile(pSceneName); |
56 | 58 | if (result != 0) goto EXIT; |
@@ -60,16 +62,86 @@ EXIT:; | ||
60 | 62 | } |
61 | 63 | |
62 | 64 | //****************************************************************************** |
65 | +// シングルキーボードフラグ設定 | |
66 | +//****************************************************************************** | |
67 | +void MTPianoKeyboardDesignMod::SetKeyboardSingle() | |
68 | +{ | |
69 | + m_isKeyboardSingle = true; | |
70 | + m_KeyboardDispNum = 1; | |
71 | + | |
72 | + for (int i = 0; i < SM_MAX_PORT_NUM; i++) { | |
73 | + m_PortIndex[i] = 0; | |
74 | + } | |
75 | +} | |
76 | + | |
77 | +//****************************************************************************** | |
78 | +// シングルキーボードフラグ取得 | |
79 | +//****************************************************************************** | |
80 | +bool MTPianoKeyboardDesignMod::IsKeyboardSingle() | |
81 | +{ | |
82 | + return m_isKeyboardSingle; | |
83 | +} | |
84 | +//****************************************************************************** | |
85 | +// キーボード表示数取得 | |
86 | +//****************************************************************************** | |
87 | +int MTPianoKeyboardDesignMod::GetKeyboardDispNum() | |
88 | +{ | |
89 | + return m_KeyboardDispNum; | |
90 | +} | |
91 | + | |
92 | +//****************************************************************************** | |
93 | +// ノートからキーボードインデックス取得 | |
94 | +//****************************************************************************** | |
95 | +int MTPianoKeyboardDesignMod::GetKeyboardIndex(const SMNote ¬e) | |
96 | +{ | |
97 | + return m_PortIndex[note.portNo]; | |
98 | +} | |
99 | + | |
100 | +//****************************************************************************** | |
101 | +// ポートリストサイズ取得 | |
102 | +//****************************************************************************** | |
103 | +int MTPianoKeyboardDesignMod::GetPortListSize() | |
104 | +{ | |
105 | + return m_PortList.GetSize(); | |
106 | +} | |
107 | + | |
108 | +//****************************************************************************** | |
109 | +// ノートからポート番号取得 | |
110 | +//****************************************************************************** | |
111 | +unsigned char MTPianoKeyboardDesignMod::GetPortNo(const SMNote ¬e) | |
112 | +{ | |
113 | + if (m_isKeyboardSingle) { | |
114 | + return 0; | |
115 | + } | |
116 | + else { | |
117 | + return note.portNo; | |
118 | + } | |
119 | +} | |
120 | + | |
121 | +//****************************************************************************** | |
122 | +// キーボードインデックスからポート番号取得 | |
123 | +//****************************************************************************** | |
124 | +unsigned char MTPianoKeyboardDesignMod::GetPortNoFromKeyboardIndex(int index) | |
125 | +{ | |
126 | + unsigned char portNo; | |
127 | + | |
128 | + m_PortList.GetPort(index, &portNo); | |
129 | + | |
130 | + return portNo; | |
131 | +} | |
132 | + | |
133 | +//****************************************************************************** | |
63 | 134 | // 初期化 |
64 | 135 | //****************************************************************************** |
65 | 136 | void MTPianoKeyboardDesignMod::_Initialize() |
66 | 137 | { |
67 | - unsigned long i = 0; | |
68 | - | |
69 | 138 | //基底クラスの初期化処理を呼び出す |
70 | 139 | MTPianoKeyboardDesign::_Initialize(); |
71 | 140 | |
72 | - for (i = 0; i < 16; i++) { | |
141 | + m_isKeyboardSingle = false; | |
142 | + m_KeyboardDispNum = 0; | |
143 | + | |
144 | + for (int i = 0; i < 16; i++) { | |
73 | 145 | m_ActiveKeyColorList[i] = DXColorUtil::MakeColorFromHexRGBA(_T("FF0000FF")); //設定ファイル |
74 | 146 | } |
75 | 147 |
@@ -188,8 +260,7 @@ float MTPianoKeyboardDesignMod::GetPortOriginY( | ||
188 | 260 | |
189 | 261 | float portWidth = GetPortWidth(); |
190 | 262 | |
191 | - // TODO シングルキーボードの判定方法を再検討 | |
192 | - int keyboardDispNum = GetKeyboardMaxDispNum() > 1 ? m_PortList.GetSize() : 1; | |
263 | + int keyboardDispNum = GetKeyboardDispNum(); | |
193 | 264 | |
194 | 265 | float originY; |
195 | 266 |
@@ -27,6 +27,15 @@ public: | ||
27 | 27 | //初期化 |
28 | 28 | virtual int Initialize(const TCHAR* pSceneName, SMSeqData* pSeqData); |
29 | 29 | |
30 | + void SetKeyboardSingle(); | |
31 | + bool IsKeyboardSingle(); | |
32 | + int GetKeyboardDispNum(); | |
33 | + int GetKeyboardIndex(const SMNote ¬e); | |
34 | + | |
35 | + int GetPortListSize(); | |
36 | + unsigned char GetPortNo(const SMNote ¬e); | |
37 | + unsigned char GetPortNoFromKeyboardIndex(int index); | |
38 | + | |
30 | 39 | //キーボード基準座標取得 |
31 | 40 | D3DXVECTOR3 GetKeyboardBasePos( |
32 | 41 | int keyboardIndex, |
@@ -83,11 +92,16 @@ public: | ||
83 | 92 | |
84 | 93 | protected: |
85 | 94 | |
86 | - virtual void _Initialize(); | |
87 | - virtual int _LoadConfFile(const TCHAR* pSceneName); | |
95 | + void _Initialize(); | |
96 | + int _LoadConfFile(const TCHAR* pSceneName); | |
88 | 97 | |
89 | 98 | private: |
90 | 99 | |
100 | + //シングルキーボードフラグ | |
101 | + bool m_isKeyboardSingle; | |
102 | + //表示するキーボードの数 | |
103 | + unsigned char m_KeyboardDispNum; | |
104 | + | |
91 | 105 | //ノートボックス高さ |
92 | 106 | float m_NoteBoxHeight; |
93 | 107 | //ノートボックス幅 |
@@ -134,7 +134,7 @@ int MTScenePianoRoll3DMod::Transform( | ||
134 | 134 | if (result != 0) goto EXIT; |
135 | 135 | |
136 | 136 | //ピアノキーボード更新 |
137 | - result = m_PianoKeyboardCtrlMod.Transform(pD3DDevice, rollAngle); | |
137 | + result = m_PianoKeyboardCtrlMod.Transform(pD3DDevice, camVector, rollAngle); | |
138 | 138 | if (result != 0) goto EXIT; |
139 | 139 | |
140 | 140 | EXIT:; |