From d7ea37233cf80c1cf0da6eb2fd4854c264ca6f8e Mon Sep 17 00:00:00 2001 From: "jean.chalard" Date: Fri, 21 Nov 2008 14:13:01 +0000 Subject: [PATCH] J : * Key buffer update : Add functions & clean the file --- JGE/include/JGE.h | 476 ++++++++++++----------- JGE/src/JGE.cpp | 958 +++++++++++++++++++++++----------------------- 2 files changed, 727 insertions(+), 707 deletions(-) diff --git a/JGE/include/JGE.h b/JGE/include/JGE.h index 4ed0b5653..72188e0d3 100644 --- a/JGE/include/JGE.h +++ b/JGE/include/JGE.h @@ -1,228 +1,248 @@ -//------------------------------------------------------------------------------------- -// -// JGE++ is a hardware accelerated 2D game SDK for PSP/Windows. -// -// Licensed under the BSD license, see LICENSE in JGE root for details. -// -// Copyright (c) 2007 James Hui (a.k.a. Dr.Watson) -// -//------------------------------------------------------------------------------------- - -#ifndef _JGE_H_ -#define _JGE_H_ - - -#include -#include -#include -#include - -#include "JTypes.h" - -#define DEBUG_PRINT - -//#define _MP3_ENABLED_ - -#ifdef WIN32 - - #include - - void JGEControl(); - BOOL JGEGetKeyState(int key); - bool JGEGetButtonState(u32 button); - bool JGEGetButtonClick(u32 button); - -#elif LINUX - - void JGEControl(); - BOOL JGEGetKeyState(int key); - bool JGEGetButtonState(uint32_t button); - bool JGEGetButtonClick(uint32_t button); - -#else - - #include - #include - #include - #include - #include - #include - #include - #include - #include - -#endif - -//#include "JGEInit.h" - -//#include "JTypes.h" - -#include "Vector2D.h" - -class JApp; -class JResourceManager; -class JFileSystem; -class JParticleSystem; -class JMotionSystem; -class JMusic; - -////////////////////////////////////////////////////////////////////////// -/// Game engine main interface. -////////////////////////////////////////////////////////////////////////// -class JGE -{ -private: - JApp *mApp; -// JResourceManager *mResourceManager; -// JFileSystem* mFileSystem; - -// JParticleSystem* mParticleSystem; -// JMotionSystem* mMotionSystem; - - -#if defined (WIN32) || defined (LINUX) - float mDeltaTime; - - JMusic *mCurrentMusic; - -#else - SceCtrlData mCtrlPad; - u32 mOldButtons; - - u64 mLastTime; - u32 mTickFrequency; - -#endif - - bool mDone; - - float mDelta; - - bool mDebug; - - bool mPaused; - - char mDebuggingMsg[256]; - - bool mCriticalAssert; - const char *mAssertFile; - int mAssertLine; - - - static JGE* mInstance; - - -public: - - ////////////////////////////////////////////////////////////////////////// - /// Get JGE instance. - /// - /// @return JGE instance. - ////////////////////////////////////////////////////////////////////////// - static JGE* GetInstance(); - static void Destroy(); - - void Init(); - void Run(); - void End(); - - void Update(); - void Render(); - - void Pause(); - void Resume(); - - ////////////////////////////////////////////////////////////////////////// - /// Return system timer in milliseconds. - /// - /// @return System time in milliseconds. - ////////////////////////////////////////////////////////////////////////// - int GetTime(void); - - ////////////////////////////////////////////////////////////////////////// - /// Return elapsed time since last frame update. - /// - /// @return Elapsed time in seconds. - ////////////////////////////////////////////////////////////////////////// - float GetDelta(); - - ////////////////////////////////////////////////////////////////////////// - /// Return frame rate. - /// - /// @note This is just 1.0f/GetDelat(). - /// - /// @return Number of frames per second. - ////////////////////////////////////////////////////////////////////////// - float GetFPS(); - - ////////////////////////////////////////////////////////////////////////// - /// Check the current state of a button. - /// - /// @param button - Button id. - /// - /// @return Button state. - ////////////////////////////////////////////////////////////////////////// - bool GetButtonState(u32 button); - - ////////////////////////////////////////////////////////////////////////// - /// Check if a button is down the first time. - /// - /// @param button - Button id. - /// - /// @return Button state. - ////////////////////////////////////////////////////////////////////////// - bool GetButtonClick(u32 button); - - ////////////////////////////////////////////////////////////////////////// - /// Get x value of the analog pad. - /// - /// @return X value (0 to 255). - ////////////////////////////////////////////////////////////////////////// - u8 GetAnalogX(); - - ////////////////////////////////////////////////////////////////////////// - /// Get y value of the analog pad. - /// - /// @return Y value (0 to 255). - ////////////////////////////////////////////////////////////////////////// - u8 GetAnalogY(); - - - ////////////////////////////////////////////////////////////////////////// - /// Get if the system is ended or not. - /// - /// @return Status of the system. - ////////////////////////////////////////////////////////////////////////// - bool IsDone() { return mDone; } - - - ////////////////////////////////////////////////////////////////////////// - /// Set the user's core application class. - /// - /// @param app - User defined application class. - ////////////////////////////////////////////////////////////////////////// - void SetApp(JApp *app); - - - ////////////////////////////////////////////////////////////////////////// - /// Print debug message. - /// - ////////////////////////////////////////////////////////////////////////// - void printf(const char *format, ...); - - - void Assert(const char *filename, long lineNumber); - -#if defined (WIN32) || defined (LINUX) - void SetDelta(int delta); -#endif - -protected: - JGE(); - ~JGE(); - - -}; - - -#endif +//------------------------------------------------------------------------------------- +// +// JGE++ is a hardware accelerated 2D game SDK for PSP/Windows. +// +// Licensed under the BSD license, see LICENSE in JGE root for details. +// +// Copyright (c) 2007 James Hui (a.k.a. Dr.Watson) +// +//------------------------------------------------------------------------------------- + +#ifndef _JGE_H_ +#define _JGE_H_ + + +#include +#include +#include +#include + +#include "JTypes.h" + +#define DEBUG_PRINT + +//#define _MP3_ENABLED_ + +#ifdef WIN32 + +#include + +void JGEControl(); +BOOL JGEGetKeyState(int key); +bool JGEGetButtonState(u32 button); +bool JGEGetButtonClick(u32 button); +u32 JGEReadKey(); +void JGEResetInput(); + +#elif LINUX + +void JGEControl(); +BOOL JGEGetKeyState(int key); +bool JGEGetButtonState(u32 button); +bool JGEGetButtonClick(u32 button); +u32 JGEReadKey(); +void JGEResetInput(); + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif + +//#include "JGEInit.h" + +//#include "JTypes.h" + +#include "Vector2D.h" + +class JApp; +class JResourceManager; +class JFileSystem; +class JParticleSystem; +class JMotionSystem; +class JMusic; + +////////////////////////////////////////////////////////////////////////// +/// Game engine main interface. +////////////////////////////////////////////////////////////////////////// +class JGE +{ + private: + JApp *mApp; + // JResourceManager *mResourceManager; + // JFileSystem* mFileSystem; + + // JParticleSystem* mParticleSystem; + // JMotionSystem* mMotionSystem; + + +#if defined (WIN32) || defined (LINUX) + float mDeltaTime; + + JMusic *mCurrentMusic; + +#else + SceCtrlData mCtrlPad; + u32 mOldButtons; + + u64 mLastTime; + u32 mTickFrequency; + +#endif + + bool mDone; + + float mDelta; + + bool mDebug; + + bool mPaused; + + char mDebuggingMsg[256]; + + bool mCriticalAssert; + const char *mAssertFile; + int mAssertLine; + + + static JGE* mInstance; + + + public: + + ////////////////////////////////////////////////////////////////////////// + /// Get JGE instance. + /// + /// @return JGE instance. + ////////////////////////////////////////////////////////////////////////// + static JGE* GetInstance(); + static void Destroy(); + + void Init(); + void Run(); + void End(); + + void Update(); + void Render(); + + void Pause(); + void Resume(); + + ////////////////////////////////////////////////////////////////////////// + /// Return system timer in milliseconds. + /// + /// @return System time in milliseconds. + ////////////////////////////////////////////////////////////////////////// + int GetTime(void); + + ////////////////////////////////////////////////////////////////////////// + /// Return elapsed time since last frame update. + /// + /// @return Elapsed time in seconds. + ////////////////////////////////////////////////////////////////////////// + float GetDelta(); + + ////////////////////////////////////////////////////////////////////////// + /// Return frame rate. + /// + /// @note This is just 1.0f/GetDelat(). + /// + /// @return Number of frames per second. + ////////////////////////////////////////////////////////////////////////// + float GetFPS(); + + ////////////////////////////////////////////////////////////////////////// + /// Check the current state of a button. + /// + /// @param button - Button id. + /// + /// @return Button state. + ////////////////////////////////////////////////////////////////////////// + bool GetButtonState(u32 button); + + ////////////////////////////////////////////////////////////////////////// + /// Check if a button is down the first time. + /// + /// @param button - Button id. + /// + /// @return Button state. + ////////////////////////////////////////////////////////////////////////// + bool GetButtonClick(u32 button); + + ////////////////////////////////////////////////////////////////////////// + /// Get the next keypress. + /// + /// @return Next pressed button, or 0 if none. + ////////////////////////////////////////////////////////////////////////// + u32 ReadButton(); + + ////////////////////////////////////////////////////////////////////////// + /// Reset the input buffer. + /// This is necessary because there might be phases when GetButtonState + /// or GetButtonClick are used, thereby accumulating keypresses in the + /// key buffer. + /// + ////////////////////////////////////////////////////////////////////////// + void ResetInput(); + + ////////////////////////////////////////////////////////////////////////// + /// Get x value of the analog pad. + /// + /// @return X value (0 to 255). + ////////////////////////////////////////////////////////////////////////// + u8 GetAnalogX(); + + ////////////////////////////////////////////////////////////////////////// + /// Get y value of the analog pad. + /// + /// @return Y value (0 to 255). + ////////////////////////////////////////////////////////////////////////// + u8 GetAnalogY(); + + + ////////////////////////////////////////////////////////////////////////// + /// Get if the system is ended or not. + /// + /// @return Status of the system. + ////////////////////////////////////////////////////////////////////////// + bool IsDone() { return mDone; } + + + ////////////////////////////////////////////////////////////////////////// + /// Set the user's core application class. + /// + /// @param app - User defined application class. + ////////////////////////////////////////////////////////////////////////// + void SetApp(JApp *app); + + + ////////////////////////////////////////////////////////////////////////// + /// Print debug message. + /// + ////////////////////////////////////////////////////////////////////////// + void printf(const char *format, ...); + + + void Assert(const char *filename, long lineNumber); + +#if defined (WIN32) || defined (LINUX) + void SetDelta(int delta); +#endif + + protected: + JGE(); + ~JGE(); + + +}; + + +#endif diff --git a/JGE/src/JGE.cpp b/JGE/src/JGE.cpp index 706c95e4e..d1d35b5c7 100644 --- a/JGE/src/JGE.cpp +++ b/JGE/src/JGE.cpp @@ -1,479 +1,479 @@ -//------------------------------------------------------------------------------------- -// -// JGE++ is a hardware accelerated 2D game SDK for PSP/Windows. -// -// Licensed under the BSD license, see LICENSE in JGE root for details. -// -// Copyright (c) 2007 James Hui (a.k.a. Dr.Watson) -// -//------------------------------------------------------------------------------------- - -#include "../include/JGE.h" -#include "../include/JApp.h" -#include "../include/JRenderer.h" -#include "../include/JSoundSystem.h" -#include "../include/Vector2D.h" -#include "../include/JResourceManager.h" -#include "../include/JFileSystem.h" -//#include "../include/JParticleSystem.h" - - -////////////////////////////////////////////////////////////////////////// -#if defined (WIN32) // WIN32 specific code -#include "../../Dependencies/include/png.h" -#include "../../Dependencies/include/fmod.h" - -int JGE::GetTime(void) -{ - return (int)GetTickCount(); -} - -u8 JGE::GetAnalogX() -{ - if (JGEGetKeyState(VK_LEFT)) return 0; - if (JGEGetKeyState(VK_RIGHT)) return 0xff; - - return 0x80; -} - - -u8 JGE::GetAnalogY() -{ - if (JGEGetKeyState(VK_UP)) return 0; - if (JGEGetKeyState(VK_DOWN)) return 0xff; - - return 0x80; -} - -#elif defined (LINUX) // Unix specific code -#include "png.h" -#include "../Dependencies/include/fmod.h" - -int JGE::GetTime(void) -{ - return (int)time(NULL); -} - -u8 JGE::GetAnalogX() -{ - /* FIXME - if (JGEGetKeyState(VK_LEFT)) return 0; - if (JGEGetKeyState(VK_RIGHT)) return 0xff; - */ - return 0x80; -} - - -u8 JGE::GetAnalogY() -{ - /* FIXME - if (JGEGetKeyState(VK_UP)) return 0; - if (JGEGetKeyState(VK_DOWN)) return 0xff; - */ - - return 0x80; -} - -#endif - - - -#if defined (WIN32) || defined (LINUX) // Non-PSP code - -JGE::JGE() -{ - mApp = NULL; - - strcpy(mDebuggingMsg, ""); - mCurrentMusic = NULL; - Init(); - -// mResourceManager = new JResourceManager(); -// mFileSystem = new JFileSystem(); - -// mParticleSystem = NULL;//new JParticleSystem(500); -// mMotionSystem = NULL;//new JMotionSystem(); - -} - - -JGE::~JGE() -{ - JRenderer::Destroy(); - JFileSystem::Destroy(); - JSoundSystem::Destroy(); - //JParticleSystem::Destroy(); - - //DestroyGfx(); - //DestroySfx(); - -// if (mResourceManager != NULL) -// delete mResourceManager; -// -// if (mFileSystem != NULL) -// delete mFileSystem; -// -// if (mParticleSystem != NULL) -// delete mParticleSystem; -// -// if (mMotionSystem != NULL) -// delete mMotionSystem; -} - - - -void JGE::Init() -{ - mDone = false; - mPaused = false; - mCriticalAssert = false; - - JRenderer::GetInstance(); - JFileSystem::GetInstance(); - JSoundSystem::GetInstance(); - //JParticleSystem::GetInstance(); - - //InitSfx(); -} - -void JGE::Run() -{ - -} - -void JGE::SetDelta(int delta) -{ - mDeltaTime = (float)delta / 1000.0f; // change to second -} - -float JGE::GetDelta() -{ - return mDeltaTime; - //return hge->Timer_GetDelta()*1000; -} - - -float JGE::GetFPS() -{ - //return (float)hge->Timer_GetFPS(); - return 0.0f; -} - - -bool JGE::GetButtonState(u32 button) -{ - //return (gButtons&button)==button; - return JGEGetButtonState(button); -} - - -bool JGE::GetButtonClick(u32 button) -{ - //return (gButtons&button)==button && (gOldButtons&button)!=button; - return JGEGetButtonClick(button); -} - -u32 JGE::ReadButton() -{ - return JGEReadKey(); -} - -void JGE::ResetInput() -{ - JGEResetInput(); -} - -////////////////////////////////////////////////////////////////////////// -#else ///// PSP specified code - - - -// include all the following so we only have one .o file -//#include "../src/JGfx.cpp" -//#include "../src/JSfx.cpp" - - -JGE::JGE() -{ - mApp = NULL; - - Init(); - -// mResourceManager = new JResourceManager(); -// mFileSystem = new JFileSystem(); -// -// mParticleSystem = new JParticleSystem(500); -// mMotionSystem = new JMotionSystem(); - -} - -JGE::~JGE() -{ - JRenderer::Destroy(); - JSoundSystem::Destroy(); - JFileSystem::Destroy(); - - //DestroyGfx(); - //DestroySfx(); - -// delete mResourceManager; -// delete mFileSystem; -// delete mParticleSystem; -// delete mMotionSystem; - -// if (mApp != NULL) -// { -// mApp->Destroy(); -// delete mApp; -// mApp = NULL; -// } -} - - -void JGE::Init() -{ - -#ifdef DEBUG_PRINT - mDebug = true; -#else - mDebug = false; -#endif - - if (mDebug) - pspDebugScreenInit(); // do this so that we can use pspDebugScreenPrintf - - strcpy(mDebuggingMsg, ""); - - sceCtrlSetSamplingCycle(0); - sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG); - - JRenderer::GetInstance(); - JFileSystem::GetInstance(); - JSoundSystem::GetInstance(); - - mDone = false; - mPaused = false; - mCriticalAssert = false; - - //InitSfx(); - - //Create(); - -// mCurrMS = 1.0f; -// mFPSSlice = 0; - - //struct timeval tp; - //gettimeofday(&tp, NULL); - //mTimeBase = tp.tv_sec; - - //mLastTime = GetTime(); - - - mTickFrequency = sceRtcGetTickResolution(); - sceRtcGetCurrentTick(&mLastTime); -} - - -// returns number of milliseconds since game started -int JGE::GetTime(void) -{ - - u64 curr; - sceRtcGetCurrentTick(&curr); - - return (int)(curr / mTickFrequency); -} - - -float JGE::GetDelta() -{ - return mDelta; -} - - -float JGE::GetFPS() -{ - return 1.0f / mDelta; -} - - -bool JGE::GetButtonState(u32 button) -{ - return (mCtrlPad.Buttons&button)==button; - -} - - -bool JGE::GetButtonClick(u32 button) -{ - return (mCtrlPad.Buttons&button)==button && (mOldButtons&button)!=button; -} - -u32 JGE::ReadButton() -{ - return 0; -} - -void JGE::ResetInput() -{ -} - -u8 JGE::GetAnalogX() -{ - return mCtrlPad.Lx; -} - - -u8 JGE::GetAnalogY() -{ - return mCtrlPad.Ly; -} - - -void JGE::Run() -{ - - u64 curr; - - while (!mDone) - { - if (!mPaused) - { - sceRtcGetCurrentTick(&curr); - - - mDelta = (curr-mLastTime) / (float)mTickFrequency;// * 1000.0f; - mLastTime = curr; - - sceCtrlPeekBufferPositive(&mCtrlPad, 1); // using sceCtrlPeekBufferPositive is faster than sceCtrlReadBufferPositive - // because sceCtrlReadBufferPositive waits for vsync internally - - Update(); - - Render(); - - if (mDebug) - { - if (strlen(mDebuggingMsg)>0) - { - pspDebugScreenSetXY(0, 0); - pspDebugScreenPrintf(mDebuggingMsg); - } - } - - mOldButtons = mCtrlPad.Buttons; - - - - } - - } - -} - -#endif ///// PSP specified code - - -////////////////////////////////////////////////////////////////////////// -JGE* JGE::mInstance = NULL; -//static int gCount = 0; - -JGE* JGE::GetInstance() -{ - if (mInstance == NULL) - { - mInstance = new JGE(); - } - - //gCount++; - return mInstance; -} - - -void JGE::Destroy() -{ - //gCount--; - if (mInstance) - { - delete mInstance; - mInstance = NULL; - } -} - - -void JGE::SetApp(JApp *app) -{ - mApp = app; -} - - -void JGE::Update() -{ - if (mApp != NULL) - mApp->Update(); -} - -void JGE::Render() -{ - JRenderer* renderer = JRenderer::GetInstance(); - - renderer->BeginScene(); - - if (mApp != NULL) - mApp->Render(); - - renderer->EndScene(); -} - - -void JGE::End() -{ - mDone = true; -} - - - -void JGE::printf(const char *format, ...) -{ - va_list list; - - va_start(list, format); - vsprintf(mDebuggingMsg, format, list); - va_end(list); - -// FILE *f = fopen("jge.log", "a+"); -// fprintf(f, "%s\n", mDebuggingMsg); -// fclose(f); - -} - - -void JGE::Pause() -{ - if (mPaused) return; - - mPaused = true; - if (mApp != NULL) - mApp->Pause(); -} - - -void JGE::Resume() -{ - if (mPaused) - { - mPaused = false; - if (mApp != NULL) - mApp->Resume(); - } -} - - -void JGE::Assert(const char *filename, long lineNumber) -{ - mAssertFile = filename; - mAssertLine = lineNumber; - mCriticalAssert = true; - - -} +//------------------------------------------------------------------------------------- +// +// JGE++ is a hardware accelerated 2D game SDK for PSP/Windows. +// +// Licensed under the BSD license, see LICENSE in JGE root for details. +// +// Copyright (c) 2007 James Hui (a.k.a. Dr.Watson) +// +//------------------------------------------------------------------------------------- + +#include "../include/JGE.h" +#include "../include/JApp.h" +#include "../include/JRenderer.h" +#include "../include/JSoundSystem.h" +#include "../include/Vector2D.h" +#include "../include/JResourceManager.h" +#include "../include/JFileSystem.h" +//#include "../include/JParticleSystem.h" + + +////////////////////////////////////////////////////////////////////////// +#if defined (WIN32) // WIN32 specific code +#include "../../Dependencies/include/png.h" +#include "../../Dependencies/include/fmod.h" + +int JGE::GetTime(void) +{ + return (int)GetTickCount(); +} + +u8 JGE::GetAnalogX() +{ + if (JGEGetKeyState(VK_LEFT)) return 0; + if (JGEGetKeyState(VK_RIGHT)) return 0xff; + + return 0x80; +} + + +u8 JGE::GetAnalogY() +{ + if (JGEGetKeyState(VK_UP)) return 0; + if (JGEGetKeyState(VK_DOWN)) return 0xff; + + return 0x80; +} + +#elif defined (LINUX) // Unix specific code +#include "png.h" +#include "../Dependencies/include/fmod.h" + +int JGE::GetTime(void) +{ + return (int)time(NULL); +} + +u8 JGE::GetAnalogX() +{ + /* FIXME + if (JGEGetKeyState(VK_LEFT)) return 0; + if (JGEGetKeyState(VK_RIGHT)) return 0xff; + */ + return 0x80; +} + + +u8 JGE::GetAnalogY() +{ + /* FIXME + if (JGEGetKeyState(VK_UP)) return 0; + if (JGEGetKeyState(VK_DOWN)) return 0xff; + */ + + return 0x80; +} + +#endif + + + +#if defined (WIN32) || defined (LINUX) // Non-PSP code + +JGE::JGE() +{ + mApp = NULL; + + strcpy(mDebuggingMsg, ""); + mCurrentMusic = NULL; + Init(); + + // mResourceManager = new JResourceManager(); + // mFileSystem = new JFileSystem(); + + // mParticleSystem = NULL;//new JParticleSystem(500); + // mMotionSystem = NULL;//new JMotionSystem(); + +} + + +JGE::~JGE() +{ + JRenderer::Destroy(); + JFileSystem::Destroy(); + JSoundSystem::Destroy(); + //JParticleSystem::Destroy(); + + //DestroyGfx(); + //DestroySfx(); + + // if (mResourceManager != NULL) + // delete mResourceManager; + // + // if (mFileSystem != NULL) + // delete mFileSystem; + // + // if (mParticleSystem != NULL) + // delete mParticleSystem; + // + // if (mMotionSystem != NULL) + // delete mMotionSystem; +} + + + +void JGE::Init() +{ + mDone = false; + mPaused = false; + mCriticalAssert = false; + + JRenderer::GetInstance(); + JFileSystem::GetInstance(); + JSoundSystem::GetInstance(); + //JParticleSystem::GetInstance(); + + //InitSfx(); +} + +void JGE::Run() +{ + +} + +void JGE::SetDelta(int delta) +{ + mDeltaTime = (float)delta / 1000.0f; // change to second +} + +float JGE::GetDelta() +{ + return mDeltaTime; + //return hge->Timer_GetDelta()*1000; +} + + +float JGE::GetFPS() +{ + //return (float)hge->Timer_GetFPS(); + return 0.0f; +} + + +bool JGE::GetButtonState(u32 button) +{ + //return (gButtons&button)==button; + return JGEGetButtonState(button); +} + + +bool JGE::GetButtonClick(u32 button) +{ + //return (gButtons&button)==button && (gOldButtons&button)!=button; + return JGEGetButtonClick(button); +} + +u32 JGE::ReadButton() +{ + return JGEReadKey(); +} + +void JGE::ResetInput() +{ + JGEResetInput(); +} + +////////////////////////////////////////////////////////////////////////// +#else ///// PSP specified code + + + +// include all the following so we only have one .o file +//#include "../src/JGfx.cpp" +//#include "../src/JSfx.cpp" + + +JGE::JGE() +{ + mApp = NULL; + + Init(); + + // mResourceManager = new JResourceManager(); + // mFileSystem = new JFileSystem(); + // + // mParticleSystem = new JParticleSystem(500); + // mMotionSystem = new JMotionSystem(); + +} + +JGE::~JGE() +{ + JRenderer::Destroy(); + JSoundSystem::Destroy(); + JFileSystem::Destroy(); + + //DestroyGfx(); + //DestroySfx(); + + // delete mResourceManager; + // delete mFileSystem; + // delete mParticleSystem; + // delete mMotionSystem; + + // if (mApp != NULL) + // { + // mApp->Destroy(); + // delete mApp; + // mApp = NULL; + // } +} + + +void JGE::Init() +{ + +#ifdef DEBUG_PRINT + mDebug = true; +#else + mDebug = false; +#endif + + if (mDebug) + pspDebugScreenInit(); // do this so that we can use pspDebugScreenPrintf + + strcpy(mDebuggingMsg, ""); + + sceCtrlSetSamplingCycle(0); + sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG); + + JRenderer::GetInstance(); + JFileSystem::GetInstance(); + JSoundSystem::GetInstance(); + + mDone = false; + mPaused = false; + mCriticalAssert = false; + + //InitSfx(); + + //Create(); + + // mCurrMS = 1.0f; + // mFPSSlice = 0; + + //struct timeval tp; + //gettimeofday(&tp, NULL); + //mTimeBase = tp.tv_sec; + + //mLastTime = GetTime(); + + + mTickFrequency = sceRtcGetTickResolution(); + sceRtcGetCurrentTick(&mLastTime); +} + + +// returns number of milliseconds since game started +int JGE::GetTime(void) +{ + + u64 curr; + sceRtcGetCurrentTick(&curr); + + return (int)(curr / mTickFrequency); +} + + +float JGE::GetDelta() +{ + return mDelta; +} + + +float JGE::GetFPS() +{ + return 1.0f / mDelta; +} + + +bool JGE::GetButtonState(u32 button) +{ + return (mCtrlPad.Buttons&button)==button; + +} + + +bool JGE::GetButtonClick(u32 button) +{ + return (mCtrlPad.Buttons&button)==button && (mOldButtons&button)!=button; +} + +u32 JGE::ReadButton() +{ + return 0; +} + +void JGE::ResetInput() +{ +} + +u8 JGE::GetAnalogX() +{ + return mCtrlPad.Lx; +} + + +u8 JGE::GetAnalogY() +{ + return mCtrlPad.Ly; +} + + +void JGE::Run() +{ + + u64 curr; + + while (!mDone) + { + if (!mPaused) + { + sceRtcGetCurrentTick(&curr); + + + mDelta = (curr-mLastTime) / (float)mTickFrequency;// * 1000.0f; + mLastTime = curr; + + sceCtrlPeekBufferPositive(&mCtrlPad, 1); // using sceCtrlPeekBufferPositive is faster than sceCtrlReadBufferPositive + // because sceCtrlReadBufferPositive waits for vsync internally + + Update(); + + Render(); + + if (mDebug) + { + if (strlen(mDebuggingMsg)>0) + { + pspDebugScreenSetXY(0, 0); + pspDebugScreenPrintf(mDebuggingMsg); + } + } + + mOldButtons = mCtrlPad.Buttons; + + + + } + + } + +} + +#endif ///// PSP specified code + + +////////////////////////////////////////////////////////////////////////// +JGE* JGE::mInstance = NULL; +//static int gCount = 0; + +JGE* JGE::GetInstance() +{ + if (mInstance == NULL) + { + mInstance = new JGE(); + } + + //gCount++; + return mInstance; +} + + +void JGE::Destroy() +{ + //gCount--; + if (mInstance) + { + delete mInstance; + mInstance = NULL; + } +} + + +void JGE::SetApp(JApp *app) +{ + mApp = app; +} + + +void JGE::Update() +{ + if (mApp != NULL) + mApp->Update(); +} + +void JGE::Render() +{ + JRenderer* renderer = JRenderer::GetInstance(); + + renderer->BeginScene(); + + if (mApp != NULL) + mApp->Render(); + + renderer->EndScene(); +} + + +void JGE::End() +{ + mDone = true; +} + + + +void JGE::printf(const char *format, ...) +{ + va_list list; + + va_start(list, format); + vsprintf(mDebuggingMsg, format, list); + va_end(list); + + // FILE *f = fopen("jge.log", "a+"); + // fprintf(f, "%s\n", mDebuggingMsg); + // fclose(f); + +} + + +void JGE::Pause() +{ + if (mPaused) return; + + mPaused = true; + if (mApp != NULL) + mApp->Pause(); +} + + +void JGE::Resume() +{ + if (mPaused) + { + mPaused = false; + if (mApp != NULL) + mApp->Resume(); + } +} + + +void JGE::Assert(const char *filename, long lineNumber) +{ + mAssertFile = filename; + mAssertLine = lineNumber; + mCriticalAssert = true; + + +}