//------------------------------------------------------------------------------------- // // 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/JGui.h" JGE* JGuiObject::mEngine = NULL; JGE* JGuiController::mEngine = NULL; JGuiObject::JGuiObject(int id): mId(id) { mEngine = JGE::GetInstance(); } JGuiObject::~JGuiObject() { // JGERelease(); } bool JGuiObject::Leaving(u32 key __attribute__((unused))) { return true; } bool JGuiObject::ButtonPressed() { return false; } void JGuiObject::Entering() { } int JGuiObject::GetId() { return mId; } void JGuiObject::Update(float dt __attribute__((unused))) { } ostream& operator<<(ostream &out, const JGuiObject &j) { return j.toString(out); } JGuiController::JGuiController(int id, JGuiListener* listener) : mId(id), mListener(listener) { mEngine = JGE::GetInstance(); mBg = NULL; mShadingBg = NULL; mCount = 0; mCurr = 0; mCursorX = SCREEN_WIDTH/2; mCursorY = SCREEN_HEIGHT/2; mShowCursor = false; mActionButton = PSP_CTRL_CIRCLE; mStyle = JGUI_STYLE_WRAPPING; mActive = true; } JGuiController::~JGuiController() { for (int i=0;iRender(); } void JGuiController::Update(float dt) { for (int i=0;iUpdate(dt); u32 key = mEngine->ReadButton(); if (key == mActionButton) { if (mObjects[mCurr] != NULL && mObjects[mCurr]->ButtonPressed()) { if (mListener != NULL) { mListener->ButtonPressed(mId, mObjects[mCurr]->GetId()); return; } } } else if ((PSP_CTRL_LEFT == key) || (PSP_CTRL_UP == key)) // || mEngine->GetAnalogY() < 64 || mEngine->GetAnalogX() < 64) { int n = mCurr; n--; if (n<0) { if ((mStyle&JGUI_STYLE_WRAPPING)) n = mCount-1; else n = 0; } if (n != mCurr && mObjects[mCurr] != NULL && mObjects[mCurr]->Leaving(PSP_CTRL_UP)) { mCurr = n; mObjects[mCurr]->Entering(); } } else if ((PSP_CTRL_RIGHT == key) || (PSP_CTRL_DOWN == key)) // || mEngine->GetAnalogY()>192 || mEngine->GetAnalogX()>192) { int n = mCurr; n++; if (n>mCount-1) { if ((mStyle&JGUI_STYLE_WRAPPING)) n = 0; else n = mCount-1; } if (n != mCurr && mObjects[mCurr] != NULL && mObjects[mCurr]->Leaving(PSP_CTRL_DOWN)) { mCurr = n; mObjects[mCurr]->Entering(); } } } void JGuiController::Add(JGuiObject* ctrl) { mObjects.push_back(ctrl); mCount++; } void JGuiController::RemoveAt(int i){ if (!mObjects[i]) return; mObjects.erase(mObjects.begin()+i); delete mObjects[i]; mCount--; if (mCurr == mCount) mCurr = 0; return; } void JGuiController::Remove(int id) { for (int i=0;iGetId()==id) { RemoveAt(i); return; } } } void JGuiController::Remove(JGuiObject* ctrl) { for (int i=0;i