diff --git a/JGE/include/JGE.h b/JGE/include/JGE.h index 76da15084..650834b62 100644 --- a/JGE/include/JGE.h +++ b/JGE/include/JGE.h @@ -85,6 +85,10 @@ class JGE #if defined (WIN32) || defined (LINUX) float mDeltaTime; JMusic *mCurrentMusic; +#else + public: + void Run(); + private: #endif bool mDone; diff --git a/JGE/src/JGE.cpp b/JGE/src/JGE.cpp index e1fcfb663..fda44540c 100644 --- a/JGE/src/JGE.cpp +++ b/JGE/src/JGE.cpp @@ -48,21 +48,16 @@ u8 JGE::GetAnalogY() u8 JGE::GetAnalogX() { - /* FIXME - if (JGEGetKeyState(VK_LEFT)) return 0; - if (JGEGetKeyState(VK_RIGHT)) return 0xff; - */ + if (GetButtonState(JGE_BTN_LEFT)) return 0; + if (GetButtonState(JGE_BTN_RIGHT)) return 0xff; return 0x80; } u8 JGE::GetAnalogY() { - /* FIXME - if (JGEGetKeyState(VK_UP)) return 0; - if (JGEGetKeyState(VK_DOWN)) return 0xff; - */ - + if (GetButtonState(JGE_BTN_UP)) return 0; + if (GetButtonState(JGE_BTN_DOWN)) return 0xff; return 0x80; } @@ -315,43 +310,78 @@ u8 JGE::GetAnalogY() return JGEGetAnalogY(); } +static SceCtrlData gCtrlPad; - -/* -bool JGE::GetButtonState(u32 button) +void JGE::Run() { - return (mCtrlPad.Buttons&button)==button; + static const int keyCodeList[] = { + PSP_CTRL_SELECT, // Select button. + PSP_CTRL_START, // Start button. + PSP_CTRL_UP, // Up D-Pad button. + PSP_CTRL_RIGHT, // Right D-Pad button. + PSP_CTRL_DOWN, // Down D-Pad button. + PSP_CTRL_LEFT, // Left D-Pad button. + PSP_CTRL_LTRIGGER, // Left trigger. + PSP_CTRL_RTRIGGER, // Right trigger. + PSP_CTRL_TRIANGLE, // Triangle button. + PSP_CTRL_CIRCLE, // Circle button. + PSP_CTRL_CROSS, // Cross button. + PSP_CTRL_SQUARE, // Square button. + PSP_CTRL_HOLD, // Hold button. + }; + u64 curr; + long long int nextInput = 0; + u64 lastTime; + u32 oldButtons; + u32 veryOldButtons; + u32 gTickFrequency = sceRtcGetTickResolution(); + sceRtcGetCurrentTick(&lastTime); + oldButtons = veryOldButtons = 0; + JGECreateDefaultBindings(); + while (!mDone) + { + if (!mPaused) + { + sceRtcGetCurrentTick(&curr); + float dt = (curr - lastTime) / (float)gTickFrequency; + mDelta = dt; + sceCtrlPeekBufferPositive(&gCtrlPad, 1); + for (signed int i = sizeof(keyCodeList)/sizeof(keyCodeList[0]) - 1; i >= 0; --i) + { + if (keyCodeList[i] & gCtrlPad.Buttons) + { + if (!(keyCodeList[i] & oldButtons)) + HoldKey(keyCodeList[i]); + } + else + if (keyCodeList[i] & oldButtons) + ReleaseKey(keyCodeList[i]); + } + oldButtons = gCtrlPad.Buttons; + Update(dt); + Render(); + if (mDebug) + { + if (strlen(mDebuggingMsg)>0) + { + pspDebugScreenSetXY(0, 0); + pspDebugScreenPrintf(mDebuggingMsg); + } + } + veryOldButtons = gCtrlPad.Buttons; + } + else + sceKernelDelayThread(1); + lastTime = curr; + } } - -bool JGE::GetButtonClick(u32 button) -{ - return (mCtrlPad.Buttons&button)==button && (mVeryOldButtons&button)!=button; -} - -u32 JGE::ReadButton() -{ - if (gKeyBuffer.empty()) return 0; - u32 val = gKeyBuffer.front(); - gHolds &= ~val; - gKeyBuffer.pop(); - return val; -} - -void JGE::ResetInput() -{ - while (!gKeyBuffer.empty()) gKeyBuffer.pop(); -} -*/ - - #endif ///// PSP specific code ////////////////////////////////////////////////////////////////////////// JGE* JGE::mInstance = NULL; -//static int gCount = 0; // returns number of milliseconds since game started int JGE::GetTime() @@ -362,19 +392,13 @@ int JGE::GetTime() JGE* JGE::GetInstance() { - if (mInstance == NULL) - { - mInstance = new JGE(); - } - - //gCount++; + if (mInstance == NULL) mInstance = new JGE(); return mInstance; } void JGE::Destroy() { - //gCount--; if (mInstance) { delete mInstance; @@ -397,14 +421,11 @@ void JGE::Render() renderer->EndScene(); } - void JGE::End() { mDone = true; } - - void JGE::printf(const char *format, ...) { va_list list; @@ -415,14 +436,12 @@ void JGE::printf(const char *format, ...) } - void JGE::Pause() { if (mPaused) return; mPaused = true; - if (mApp != NULL) - mApp->Pause(); + if (mApp != NULL) mApp->Pause(); } @@ -436,14 +455,11 @@ void JGE::Resume() } } - void JGE::Assert(const char *filename, long lineNumber) { mAssertFile = filename; mAssertLine = lineNumber; mCriticalAssert = true; - - } std::queue< pair > JGE::keyBuffer; diff --git a/JGE/src/main.cpp b/JGE/src/main.cpp index dd858e8a1..69fabe7ae 100644 --- a/JGE/src/main.cpp +++ b/JGE/src/main.cpp @@ -326,36 +326,30 @@ void Run() while (!g_engine->mDone) { + sceRtcGetCurrentTick(&curr); + float dt = (curr - lastTime) / (float)gTickFrequency; + g_engine->mDelta = dt; if (!g_engine->mPaused) { - sceRtcGetCurrentTick(&curr); - float dt = (curr - lastTime) / (float)gTickFrequency; - g_engine->mDelta = dt; - sceCtrlPeekBufferPositive(&gCtrlPad, 1); for (signed int i = sizeof(keyCodeList)/sizeof(keyCodeList[0]) - 1; i >= 0; --i) - { - if (keyCodeList[i] & gCtrlPad.Buttons) - { - if (!(keyCodeList[i] & oldButtons)) - g_engine->HoldKey(keyCodeList[i]); - } - else - if (keyCodeList[i] & oldButtons) - g_engine->ReleaseKey(keyCodeList[i]); - } - oldButtons = gCtrlPad.Buttons; + if (keyCodeList[i] & gCtrlPad.Buttons) + { + if (!(keyCodeList[i] & oldButtons)) + g_engine->HoldKey(keyCodeList[i]); + } + else + if (keyCodeList[i] & oldButtons) + g_engine->ReleaseKey(keyCodeList[i]); + oldButtons = gCtrlPad.Buttons; g_engine->Update(dt); g_engine->Render(); - if (g_engine->mDebug) - { - if (strlen(g_engine->mDebuggingMsg)>0) - { - pspDebugScreenSetXY(0, 0); - pspDebugScreenPrintf(g_engine->mDebuggingMsg); - } + if (g_engine->mDebug && strlen(g_engine->mDebuggingMsg) > 0) + { + pspDebugScreenSetXY(0, 0); + pspDebugScreenPrintf(g_engine->mDebuggingMsg); } veryOldButtons = gCtrlPad.Buttons; } @@ -388,7 +382,7 @@ int main() game->Create(); g_engine->SetApp(game); - Run(); + g_engine->Run(); game->Destroy(); delete game;