📄 imenu.hpp
字号:
#ifndef _IMENU_HPP_
#define _IMENU_HPP_
//#include <stdio.h>
#include "../../JGE/include/JApp.h"
#include "../../JGE/include/JGE.h"
#include "../../JGE/include/JSprite.h"
#include "../../JGE/include/JLBFont.h"
#include "../../JGE/include/JGui.h"
#include "../../JGE/include/JLBFont.h"
#define SCALE_SELECTED 1.2f
#define SCALE_NORMAL 1.0f
class MenuItem: public JGuiObject
{
private:
bool mHasFocus;
JLBFont *mFont;
char* mText;
int mX;
int mY;
float mScale;
float mTargetScale;
public:
MenuItem(int id, JLBFont *font, char* text, int x, int y, bool hasFocus = false);
virtual void Render();
virtual void Update(float dt);
virtual void Entering();
virtual bool Leaving(u32 key);
virtual bool ButtonPressed();
};
MenuItem::MenuItem(int id, JLBFont *font, char* text, int x, int y, bool hasFocus): JGuiObject(id), mFont(font), mText(text), mX(x), mY(y)
{
mHasFocus = hasFocus;
mScale = 1.0f;
mTargetScale = 1.0f;
if (hasFocus)
Entering();
}
void MenuItem::Render()
{
mFont->SetScale(mScale);
if (mHasFocus)
{
mFont->SetColor(ARGB(255,255,255,0));
mFont->DrawString(mText, (float)mX, (float)(mY-4), JGETEXT_CENTER);
}
else
{
mFont->SetColor(ARGB(255,255,255,255));
mFont->DrawString(mText, (float)mX, (float)mY, JGETEXT_CENTER);
}
mFont->SetScale(1.0f);
}
void MenuItem::Update(float dt)
{
if (mScale < mTargetScale)
{
mScale += 0.0008f*dt;
if (mScale > mTargetScale)
mScale = mTargetScale;
}
else if (mScale > mTargetScale)
{
mScale -= 0.0008f*dt;
if (mScale < mTargetScale)
mScale = mTargetScale;
}
}
void MenuItem::Entering()
{
mHasFocus = true;
mTargetScale = 1.2f;
}
bool MenuItem::Leaving(u32 key)
{
mHasFocus = false;
mTargetScale = 1.0f;
return true;
}
bool MenuItem::ButtonPressed()
{
return true;
}
class IMenu:public JGuiListener
{
private:
//JGE* mEngine;
JTexture* mCoinTexture;//texture of coin
JQuad* mCoin;
JTexture* mCoinCountTexture;//texture of coin of number
JQuad* mCoinCount;
JLBFont *mFont;
JGE* mMenuEngine;
JGuiController *mController;
public:
IMenu();
void Create(JGE* engine);
void RenderCoin(int currentCoinCount);
void RenderBlood(int maxLifeCount,int currentLifeCount);
void ButtonPressed(int controllerId, int controlId);
void UpdateMenu();
void RenderMenu();
void SetActive();
};
IMenu::IMenu()
{
mCoinTexture = NULL;
mCoin = NULL;
mCoinCountTexture = NULL;
mCoinCount = NULL;
mController = NULL;
mMenuEngine = NULL;
mFont = NULL;
}
void IMenu::Create(JGE *engine)
{
mMenuEngine = engine;
mCoinCountTexture = mMenuEngine->LoadTexture("Res/number.png",true);
mCoinCount = new JQuad(mCoinCountTexture, 0, 0, 5, 10);
mCoinTexture = mMenuEngine->LoadTexture("Res/coin.png", true);
mCoin = new JQuad(mCoinTexture, 0, 0, 15, 20);
mFont = new JLBFont("Res/f3", 16, true);
mFont->SetBase(0);
//create the menu
mController = new JGuiController(200, this);
mController->Add(new MenuItem(1, mFont, "RESUME", SCREEN_WIDTH/2, 120, true));
mController->Add(new MenuItem(2, mFont, "EXIT GAME", SCREEN_WIDTH/2, 150));
mController->SetActive(false);
}
void IMenu::RenderBlood( int maxLifeCount,int currentLifeCount)
{
mMenuEngine->FillRect(10, 10, maxLifeCount, 10, ARGB(150,0,0,0));
mMenuEngine->FillRect(10, 10, currentLifeCount, 10, ARGB(150,255,0,0));
}
void IMenu::RenderCoin(int currentCoinCount)
{
char s[16];
sprintf(s, "%d", currentCoinCount);
float tx, ty, width, height;
mCoinCount->GetTextureRect(&tx, &ty, &width, &height);
for (int i=0;s[i]!='\0';i++)
{
tx =(s[i]-'0')*5.0f;
mCoinCount->SetTextureRect(tx, ty, width, height);
mMenuEngine->RenderQuad(mCoinCount, 600.0f+(float)(i)*5.0f, 13.0f);
tx += 5.0f;
}
mMenuEngine->RenderQuad(mCoin, 580.0f, 7.0f);
}
void IMenu::ButtonPressed(int controllerId, int controlId)
{
switch(controlId)
{
case 1:
mController->SetActive(false);
break;
default:
break;
}
}
void IMenu::UpdateMenu()
{
float dt = mMenuEngine->GetDelta();
if(mController!=NULL && mController->IsActive())
{
mController->Update(dt);
return;
}
}
void IMenu::RenderMenu()
{
if (mController!=NULL && mController->IsActive())
{
mMenuEngine->FillRect(SCREEN_WIDTH / 4, SCREEN_HEIGHT / 4, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, ARGB(128, 255, 0, 0));
mController->Render();
}
}
void IMenu::SetActive()
{
mController->SetActive(true);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -