📄 gameapp.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 + -