[Intel Mac, Big Sur 11.6.5, clang 13.0.0, SDL 2.24.1, ChatGPT Plus, NO IDE]
Apple Silicon MacではワイヤレスPS4コントローラーが操作できませんでしたが、Intel Macでは動きました。
void App::Run()
{
Uint32 lastTimeMs = SDL_GetTicks();
auto lastTime = std::chrono::high_resolution_clock::now();
bool bDone = false;
while( !bDone )
{
GameInput gameInput = {};
SDL_JoystickUpdate();
// respond to events
SDL_Event event;
while( SDL_PollEvent( &event ) )
{
if(event.type == SDL_QUIT)
{
bDone = true;
}
if(event.type == SDL_JOYBUTTONDOWN)
{
switch (event.jbutton.button){
case 3:{ // △ボタン:終了
bDone = true;
break;
}
case 2:{ // □ボタン:スタート
gameInput.bStart = true;
// cout << "□ボタン押下" << endl;
break;
}
case 13:{ // 左ボタン
gameInput.bMoveLeft = true;
break;
}
case 14:{ // 右ボタン
gameInput.bMoveRight = true;
break;
}
case 1:{ // ○ボタン:時計回り回転
gameInput.bRotateClockwise = true;
break;
}
case 0:{ // ×ボタン:反時計回り回転
gameInput.bRotateAnticlockwise = true;
break;
}
case 12:{ // 下ボタン:一気に落下
gameInput.bHardDrop = true;
break;
}
case 11:{ // 上ボタン:徐々に落下
gameInput.bSoftDrop = true;
break;
}
case 4:{ // shareボタン:停止(効かない)
gameInput.bPause = true;
// cout << "shareボタン押下" << endl;
break;
}
default:{
cout << "default" << endl;
break;
}
}
}
}
Uint32 currentTimeMs = SDL_GetTicks();
Uint32 deltaTimeMs = currentTimeMs - lastTimeMs;
lastTimeMs = currentTimeMs;
HP_UNUSED( deltaTimeMs );
auto currentTime = std::chrono::high_resolution_clock::now();
auto deltaTime = currentTime - lastTime;
std::chrono::microseconds deltaTimeMicroseconds = std::chrono::duration_cast<std::chrono::microseconds>(deltaTime);
float deltaTimeSeconds = 0.000001f * (float)deltaTimeMicroseconds.count();
lastTime = currentTime;
mGame->Update( gameInput, deltaTimeSeconds );
mRenderer->Clear();
mGame->Draw(*mRenderer );
mRenderer->Present();
}
}