⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imenu.hpp

📁 超级玛丽
💻 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 + -