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

📄 game_engine.cpp

📁 开放源码分布式开发包
💻 CPP
字号:
// Class automatically generated by Dev-C++ New Class wizard

#include "game_engine.h" // class's header file

// class constructor
game_Engine::game_Engine() 
{
    //always set pointers to NULL and initialize values
    destroyMe = false;
    m_time = 0;
    m_pCurrState = NULL;
    
    m_pEventHandler = NULL;
}

// class destructor
game_Engine::~game_Engine()
{
    m_device->drop();
}


#include <stdio.h>
// called to start up the irrlicht engine and set up game variables
bool game_Engine::Init(irr::video::EDriverType device_type /*EDT_OPENGL*/, int res_x, int res_y, bool fullscreen /*false*/, 
					   int colordepth /*16*/, bool stencilbuffer /*false*/, const wchar_t *text)
{
    //TODO: add error checking/handling here
    
    //TODO: remove this
printf("game_Engine::Init()\n");
    
    //(init can be called while in game, in which case EH was already created)
    if(!m_pEventHandler) m_pEventHandler = new game_EventHandler(this);

    //TODO: add error checking for this:
    //if(m_device) error!! should not have a valid m_device before calling init()

	//set up IrrLicht
	//if(!m_device) 
 m_device = irr::createDevice(device_type, irr::core::dimension2d<irr::s32>(res_x, res_y),
                   colordepth, fullscreen, stencilbuffer, m_pEventHandler);

    if(!m_device) return false;

	m_device->setWindowCaption(text);

	m_driver = m_device->getVideoDriver();
	m_smgr = m_device->getSceneManager();
   
//TODO  !!COPY AND UNCOMMENT THIS IN YOUR "xxx_Engine"s INIT() FUNCTION!!
/*
    //if we havent been configured yet, go into config state
    //else start up directly into the first game state
    std::string configured = ICE_Options::getConfig("configured");
    if(configured == "F") m_pCurrState = new gs_Configure(this); 
    else m_pCurrState = new gs_Intro(this);
*/

	return true;
}

//called in main loop to see if engine is still running
// returns false when the game is shutting down
bool game_Engine::Update()
{
    //ask the IrrLicht engine for another game loop
    if( !m_device->run() ) { return false; }
    
    //if RequestDestroy() was called, we'll call Destroy() now
    if( this->destroyMe ) { Destroy(); return false; }
    
    //update timer (though we dont use it right now) 
    m_time = m_device->getTimer()->getTime();
    
    //update our state
	if(m_pCurrState) m_pCurrState->Update();

	return true;
}

// renders the scene (according to the appropriate state)
void game_Engine::Render()
{
    using namespace irr;
    
    //dont waste time redrawing
    if( !m_device->isWindowActive() ) return; 

    //we should alway have a state, so call it's render function
    if(m_pCurrState) m_pCurrState->Render();

}

// event handler
bool game_Engine::OnEvent(irr::SEvent event)
{
    using namespace irr;

	//quit if the user presses ESC in Intro, otherwise move back to Intro -PDZ 01/04/03 0.9.4a 
	if(event.EventType == EET_KEY_INPUT_EVENT && event.KeyInput.Key == KEY_ESCAPE && event.KeyInput.PressedDown ) {
		if(m_GameState == GS_INTRO) 
			RequestDestroy();
		else
			RequestStateChange(GS_INTRO);
		return true;      
    }

    // otherwise, let others try to handle the event:
    if(m_pCurrState)
            return m_pCurrState->onEvent(event);

	return false;
}

void game_Engine::Destroy() {
 //make sure we exit our current state
 if(m_pCurrState) delete m_pCurrState; 

 //required to properly shut down IrrLicht
 m_device->closeDevice();
}

/***************************************************
    SAMPLE implementation of RequestStateChange
****************************************************
//this is where states are changed
void game_tetris::RequestStateChange(tGAME_STATE newState) {

    //exit the current state
    // each state's destructor should clean up any dynamic memory allocated by it
    if(m_pCurrState) delete m_pCurrState;  
    m_GameState = newState;
    switch(newState) {
    case GS_INTRO:
        m_pCurrState = new gs_Intro(this); //show menu buttons
        break;
    case GS_OPTS:
        m_pCurrState = new gs_OptionMenu(this); //when we have options, they'll be set here
        break;
        
    case GS_MAIN:
        m_pCurrState = new gs_Main(this); //the main game
        break;
        
    default:
        //ERROR!! undefined state request
        //should add some error handling here
        break;
    }
    
}
*****************************************************/

game_EventHandler::game_EventHandler(game_Engine* boss) {
    m_pBoss = boss;
}
bool game_EventHandler::OnEvent(irr::SEvent event) {
    return m_pBoss->OnEvent(event);
}

⌨️ 快捷键说明

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