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

📄 gameapp.h

📁 一个symbian 冒险游戏代码
💻 H
字号:
#ifndef _GAMEAPP_H
#define _GAMEAPP_H


#include "Def.h"
#include "App.h"
#include "Map.h"
#include "MapBlockSet.h"
#include "Enemy.h"
#include "Player.h"
#include "FixVec2.h"
#include "Surface.h"
#include "SoundContext.h"
#include "Font.h"
#include "ImageResample.h"


#ifdef WIN32_CONVERT
#include <lua/LuaState.h>
#endif


class GameApp : 
	public App
{
public:
	enum
	{
		RESAMPLE_BUFFER_SIZE		= 64000,		// in minimum, the size of the largest image to resample
		HALF_RESOLUTION_THRESHOLD	= 80000,
		MAX_SPRITES					= 20,
		MAX_SCREENS					= 20
	};

	enum QuitPhase
	{
		QUIT_NONE			= -1,
		QUIT_PROMPT			= 0,
		QUIT_SCREEN,
		QUIT_ACTUALIZE
	};

	enum InitPhase
	{
		INIT_NONE				= -1,
		INIT_START				= 0,
		INIT_START_REFRESH,
		INIT_FONT,
		INIT_PLAYER,
		INIT_ENEMIES,
		INIT_SOUNDS,
		INIT_SPRITES,
		INIT_SCREENS,
		INIT_MAP,
		INIT_FINISH,
		INIT_COUNT
	};

	enum ResetPhase
	{
		RESTART_NONE	= -1,
		RESTART_PROMPT	= 0,
		RESTART_SCREEN,
		RESTART_ACTUALIZE,
		RESTART_START,
		RESTART_MAP,
		RESTART_FINISH
	};

	Font			mainFont;
	Surface			playerAnims[Player::ANIM_COUNT][MapObject::DIR_COUNT];
	int				playerAnimRefPoints[Player::ANIM_COUNT][MapObject::DIR_COUNT][2];
	Surface			enemyAnims[Enemy::ENEMY_COUNT][Enemy::BODY_COUNT][MapObject::DIR_COUNT];
	int				enemyAnimRefPoints[Enemy::ENEMY_COUNT][Enemy::BODY_COUNT][MapObject::DIR_COUNT][2];
	Surface			sprites[MAX_SPRITES];
	int				spriteRefPoints[MAX_SPRITES][2];
	lang::String	spriteNames[MAX_SPRITES];
	int				spriteCount;
	Surface			screens[MAX_SCREENS];
	lang::String	screenNames[MAX_SCREENS];
	int				screenCount;

	GameApp();
	virtual ~GameApp();

	void	init( Context* context, SoundContext* soundcontext );
	bool	init( Context* context );

	#ifdef WIN32_CONVERT
		void	convert();
	#endif

	void	renderLoading( Context* context );
	void	render( Context* context );
	bool	update( Fix dt, Context* context );
	bool	mainloop( Fix dt, Context* context );
	void	keyDown( KeyType key );
	void	keyUp( KeyType key );

	void	playSound( const char* basename, int channel );

	int		findItem( const lang::String* names, int count, const char* name );

	ImageResample*	getImageResamplingEngine()	{ return &m_imageResamplingEngine; }

	void	setPlayerAnimationReferencePoint( int anim, int dir, int x, int y );
	void	setEnemyAnimationReferencePoint( int enemy, int anim, int dir, int x, int y );
	void	setSpriteReferencePoint( int sprite, int x, int y );
	void	setDebugPrint( const char* debugPrint );

	const char*			name() const;
	MapBlockSet&		blockSet()			{return m_mapBlocks;}
	bool				isInitDone()		{return m_initDone;}
	bool				isRestarting()		{return m_restarting;}
	bool				isGameFinised()		{return m_gameFinished;}
	bool				isHalfResolution()	{return m_halfResolution;}

	bool				findEnemyInState( const char* name, const char* statename );
	
	static GameApp*		get()	{return static_cast<GameApp*>( App::get() );}

private:
	enum 
	{ 
		MAP_CACHE_SIZE	= 10,
	};

	ImageResample			m_imageResamplingEngine;
	SoundContext*			m_soundContext;
	Map*					m_map;
	MapBlockSet				m_mapBlocks;
	int						m_mapCachePtr;
	Map						m_mapCache[MAP_CACHE_SIZE];
	Player					m_player;
	const char*				m_triggerText;
	Fix						m_triggerTextTime;
	FixVec2					m_triggerTextPos;
	Surface*				m_screen;
	ScreenTrigger*			m_screenTrigger;
	Fix						m_healthBarScalingFactor;
	Fix						m_loadingProgress;
	int						m_quitPhase;
	int						m_initPhase;
	int						m_restartPhase;
	char					m_name[128];
	char					m_loadingText[128];
	char					m_loadingTextScreen[128];
	char					m_debugPrint[256];
	char					m_startMap[256];
	bool					m_resetTime;
	bool					m_initDone;
	bool					m_restarting;
	bool					m_halfResolution;
	bool					m_gameFinished;

	void	loadMap( const lang::String& name );
	void	controlPlayer();
	void	openScreen( const char* name );
	void	closeScreen();
	bool	restart();

	GameApp( const GameApp& );
	GameApp& operator=( const GameApp& );
};



#endif // _GAMEAPP_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -