.RU

================================================================ - После ознакомлениями с примерами стало понятно,...



================================================================


Файл PauseState.cpp

================================================================

#include "stdafx.h"

#include "GameManager.h"

#include "PauseState.h"

#include "PlayState.h"

#include "OptionsState.h"

#include "globalFunctions.h"


using namespace Ogre;


PauseState PauseState::mPauseState;


void PauseState::enter()

{

gm = static_cast(GameManager::getSingletonPtr());

mInputDevice = InputManager::getSingletonPtr()->getInputDevice();

mRoot = Root::getSingletonPtr();


m_GameAI=gm->getGameAI();

m_GameOP=gm->getGameOP();

mSceneMgr=mRoot->createSceneManager(ST_GENERIC);

mCamera = mSceneMgr->createCamera("PauseCamera");

mViewport = mRoot->getAutoCreatedWindow()->addViewport(mCamera);

mViewport->setBackgroundColour(ColourValue(0.0, 1.0, 0.0));

mGUIRenderer_PauseS=gm->getGUIRenderer();

mGUIRenderer_PauseS->setTargetSceneManager(mSceneMgr);


mGUIWindow_EditorGuiSheet_PauseS = CEGUI::WindowManager::getSingleton().loadWindowLayout(

(CEGUI::utf8*)"AdruinPauseGui.xml");

mGUISystem_PauseS=gm->getGUISystem();

mGUISystem_PauseS->setDefaultMouseCursor(

(CEGUI::utf8*)"TaharezLook", (CEGUI::utf8*)"MouseArrow");


mGUISystem_PauseS->setGUISheet(mGUIWindow_EditorGuiSheet_PauseS);

setupEventHandlers();


}


void PauseState::exit()

{

CEGUI::WindowManager::getSingleton().destroyWindow(mGUIWindow_EditorGuiSheet_PauseS);

mSceneMgr->clearScene();

mSceneMgr->destroyAllCameras();

}


void PauseState::pause()

{

CEGUI::WindowManager::getSingleton().destroyWindow(mGUIWindow_EditorGuiSheet_PauseS);

mSceneMgr->clearScene();

mSceneMgr->destroyAllCameras();

}


void PauseState::resume()

{

gm = static_cast(GameManager::getSingletonPtr());

mInputDevice = InputManager::getSingletonPtr()->getInputDevice();

mRoot = Root::getSingletonPtr();


m_GameAI=gm->getGameAI();

m_GameOP=gm->getGameOP();

mSceneMgr=mRoot->createSceneManager(ST_GENERIC);

mCamera = mSceneMgr->createCamera("PauseCamera");

mViewport = mRoot->getAutoCreatedWindow()->addViewport(mCamera);

mViewport->setBackgroundColour(ColourValue(0.0, 1.0, 0.0));

mGUIRenderer_PauseS=gm->getGUIRenderer();

mGUIRenderer_PauseS->setTargetSceneManager(mSceneMgr);


mGUIWindow_EditorGuiSheet_PauseS = CEGUI::WindowManager::getSingleton().loadWindowLayout(

(CEGUI::utf8*)"AdruinPauseGui.xml");

mGUISystem_PauseS=gm->getGUISystem();

mGUISystem_PauseS->setDefaultMouseCursor(

(CEGUI::utf8*)"TaharezLook", (CEGUI::utf8*)"MouseArrow");


mGUISystem_PauseS->setGUISheet(mGUIWindow_EditorGuiSheet_PauseS);

setupEventHandlers();

}


void PauseState::keyClicked(KeyEvent* e)

{

e->consume();

}


void PauseState::keyPressed(KeyEvent* e)

{

if (e->getKey() == m_GameOP->getParGamePause())

{


m_GameAI->ContinueGame();

mRoot->getAutoCreatedWindow()->removeAllViewports();

popState();

}

if (e->getKey() == m_GameOP->getParGameESC())

{

m_GameAI->ExitGame();

}


CEGUI::System::getSingleton().injectKeyDown(e->getKey());

CEGUI::System::getSingleton().injectChar(e->getKeyChar());

e->consume();

}


void PauseState::keyReleased(KeyEvent* e)

{

CEGUI::System::getSingleton().injectKeyUp(e->getKey());

e->consume();

}


// MouseDragged

void PauseState::mouseMoved(Ogre::MouseEvent* e)

{

CEGUI::System::getSingleton().injectMouseMove(

e->getRelX() * gm->getGUIRenderer()->getWidth(),

e->getRelY() * gm ->getGUIRenderer()->getHeight());

e->consume();

}

void PauseState::mouseDragged(Ogre::MouseEvent* e)

{

mouseMoved(e);

e->consume();

}


// MouseListener

void PauseState::mouseClicked(Ogre::MouseEvent* e)

{


}

void PauseState::mouseEntered(Ogre::MouseEvent* e)

{


}

void PauseState::mouseExited(Ogre::MouseEvent* e)

{


}

void PauseState::mousePressed(Ogre::MouseEvent* e)

{

CEGUI::System::getSingleton().injectMouseButtonDown(

convertOgreButtonToCegui(e->getButtonID()));

e->consume();


}

void PauseState::mouseReleased(Ogre::MouseEvent* e)

{

CEGUI::System::getSingleton().injectMouseButtonUp(

convertOgreButtonToCegui(e->getButtonID()));

e->consume();

}


bool PauseState::frameStarted(const FrameEvent& evt)

{

return true;

}


bool PauseState::frameEnded(const FrameEvent& evt)

{

if (m_GameAI->isGameExit())

return false;

return true;

}


void PauseState::setupEventHandlers(void)

{

CEGUI::WindowManager& wmgr = CEGUI::WindowManager::getSingleton();

wmgr.getWindow((CEGUI::utf8*)"Continue")->subscribeEvent(

CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&PauseState::handleContinue, this));

wmgr.getWindow((CEGUI::utf8*)"Options")->subscribeEvent(

CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&PauseState::handleOptions, this));

wmgr.getWindow((CEGUI::utf8*)"Quit")->subscribeEvent(

CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&PauseState::handleQuit, this));

}


bool PauseState::handleContinue(const CEGUI::EventArgs& e)

{


m_GameAI->ContinueGame();

mRoot->getAutoCreatedWindow()->removeAllViewports();

popState();

return true;

}

bool PauseState::handleOptions(const CEGUI::EventArgs& e)

{


m_GameAI->ContinueGame();

mRoot->getAutoCreatedWindow()->removeAllViewports();

pushState(OptionsState::getInstance());


return true;

}

bool PauseState::handleQuit(const CEGUI::EventArgs& e)

{

m_GameAI->ExitGame();

return true;

}

================================================================


Файл AdruinPauseGui.xml

================================================================





































================================================================

В этом статусе все предельно просто.

Загружаем меню из AdruinPauseGui.xml файла. Добавляем обработку для 3-х кнопок:


Кнопка Continue.

Вызываем .m_GameAI->ContinueGame(); Возвращаемся в предыдущий статус. popState();


bool PauseState::handleContinue(const CEGUI::EventArgs& e)

{


m_GameAI->ContinueGame();

mRoot->getAutoCreatedWindow()->removeAllViewports();

popState();

return true;

}


Кнопка Options.

Меняем текущий статус на OptionsState. Для этого:

pushState(OptionsState::getInstance());


bool PauseState::handleOptions(const CEGUI::EventArgs& e)

{


mRoot->getAutoCreatedWindow()->removeAllViewports();

pushState(OptionsState::getInstance());


return true;

}


Кнопка ^ Quit.

Выходим из программы. Для этого вызываем - m_GameAI->ExitGame();После данного

Действия сработает проверка в frameEnded() и программа завершит свою работу.

bool PauseState::frameEnded(const FrameEvent& evt)

{

if (m_GameAI->isGameExit())

return false;

return true;

}


bool PauseState::handleQuit(const CEGUI::EventArgs& e)

{

m_GameAI->ExitGame();

return true;

}


Ну и последнее. Статус AboutState статус программы, в котором можно написать, например, о программе, кто ее сделал и все такое. Сейчас это абсолютно пустой статус, в нем есть только 1 кнопка, которая выходит из этого статуса в предыдущий. Если будете спрашивать зачем я его описываю в этот статье, то вот мой ответ. Сначала я сделал каркас, а уже только потом начал писать статью. Решил добавить в статью и этот статус тоже. Статус описывать не буду – так как тут не о чем писать .


Файл AboutState.h

================================================================

#ifndef AboutState_H

#define AboutState_H


#include "stdafx.h"

#include "GameState.h"

#include "GameManager.h"


class AboutState : public GameState

{

public:

void enter();

void exit();


void pause();

void resume();


void keyClicked(Ogre::KeyEvent* e);

void keyPressed(Ogre::KeyEvent* e);

void keyReleased(Ogre::KeyEvent* e);

// MouseDragged

void mouseMoved(Ogre::MouseEvent* e);

void mouseDragged(Ogre::MouseEvent* e);


// MouseListener

void mouseClicked(Ogre::MouseEvent* e);

void mouseEntered(Ogre::MouseEvent* e);

void mouseExited(Ogre::MouseEvent* e);

void mousePressed(Ogre::MouseEvent* e);

void mouseReleased(Ogre::MouseEvent* e);


void setupEventHandlers(void);

bool handleOK(const CEGUI::EventArgs& e);


bool frameStarted(const Ogre::FrameEvent& evt);

bool frameEnded(const Ogre::FrameEvent& evt);


static AboutState* getInstance() { return &mAboutState; }

protected:

AboutState() { }


Ogre::Root *mRoot;

Ogre::SceneManager* mSceneMgr;

Ogre::Viewport* mViewport;

Ogre::InputReader* mInputDevice;

Ogre::Camera* mCamera;

GameAI *m_GameAI;

GameOptions *m_GameOP;


GameManager *gm;

CEGUI::OgreCEGUIRenderer *mGUIRenderer_AboutS;

CEGUI::System *mGUISystem_AboutS;

CEGUI::Window *mGUIWindow_EditorGuiSheet_AboutS;

private:

static AboutState mAboutState;

};


#endif

================================================================


Файл AboutState.cpp

================================================================


#include "stdafx.h"

#include "GameManager.h"

#include "IntroState.h"

#include "AboutState.h"


#include "globalFunctions.h"


using namespace Ogre;


AboutState AboutState::mAboutState;


void AboutState::enter()

{

gm = static_cast(GameManager::getSingletonPtr());

mInputDevice = InputManager::getSingletonPtr()->getInputDevice();

mRoot = Root::getSingletonPtr();


m_GameAI=gm->getGameAI();

m_GameOP=gm->getGameOP();

mSceneMgr=mRoot->createSceneManager(ST_GENERIC);

mCamera = mSceneMgr->createCamera("AboutCamera");

mViewport = mRoot->getAutoCreatedWindow()->addViewport(mCamera);

mViewport->setBackgroundColour(ColourValue(0.0, 1.0, 0.0));

mGUIRenderer_AboutS=gm->getGUIRenderer();

mGUIRenderer_AboutS->setTargetSceneManager(mSceneMgr);


mGUIWindow_EditorGuiSheet_AboutS = CEGUI::WindowManager::getSingleton().loadWindowLayout(

(CEGUI::utf8*)"AdruinAboutGui.xml");

mGUISystem_AboutS=gm->getGUISystem();

mGUISystem_AboutS->setDefaultMouseCursor(

(CEGUI::utf8*)"TaharezLook", (CEGUI::utf8*)"MouseArrow");


mGUISystem_AboutS->setGUISheet(mGUIWindow_EditorGuiSheet_AboutS);

setupEventHandlers();


}


void AboutState::exit()

{

CEGUI::WindowManager::getSingleton().destroyWindow(mGUIWindow_EditorGuiSheet_AboutS);

mSceneMgr->clearScene();

mSceneMgr->destroyAllCameras();

mRoot->getAutoCreatedWindow()->removeAllViewports();


}


void AboutState::pause()

{

CEGUI::WindowManager::getSingleton().destroyWindow(mGUIWindow_EditorGuiSheet_AboutS);

mSceneMgr->clearScene();

mSceneMgr->destroyAllCameras();

mRoot->getAutoCreatedWindow()->removeAllViewports();

}


void AboutState::resume()

{

gm = static_cast(GameManager::getSingletonPtr());

mInputDevice = InputManager::getSingletonPtr()->getInputDevice();

mRoot = Root::getSingletonPtr();


m_GameAI=gm->getGameAI();

m_GameOP=gm->getGameOP();

mSceneMgr=mRoot->createSceneManager(ST_GENERIC);

mCamera = mSceneMgr->createCamera("AboutCamera");

mViewport = mRoot->getAutoCreatedWindow()->addViewport(mCamera);

mViewport->setBackgroundColour(ColourValue(0.0, 1.0, 0.0));

mGUIRenderer_AboutS=gm->getGUIRenderer();

mGUIRenderer_AboutS->setTargetSceneManager(mSceneMgr);


mGUIWindow_EditorGuiSheet_AboutS = CEGUI::WindowManager::getSingleton().loadWindowLayout(

(CEGUI::utf8*)"AdruinAboutGui.xml");

mGUISystem_AboutS=gm->getGUISystem();

mGUISystem_AboutS->setDefaultMouseCursor(

(CEGUI::utf8*)"TaharezLook", (CEGUI::utf8*)"MouseArrow");


mGUISystem_AboutS->setGUISheet(mGUIWindow_EditorGuiSheet_AboutS);

setupEventHandlers();

}


void AboutState::keyClicked(KeyEvent* e)

{

e->consume();

}


void AboutState::keyPressed(KeyEvent* e)

{

if (e->getKey() == KC_ESCAPE)

{

changeState(IntroState::getInstance());

}

CEGUI::System::getSingleton().injectKeyDown(e->getKey());

CEGUI::System::getSingleton().injectChar(e->getKeyChar());

e->consume();

}


void AboutState::keyReleased(KeyEvent* e)

{

CEGUI::System::getSingleton().injectKeyUp(e->getKey());

e->consume();

}


// MouseDragged

void AboutState::mouseMoved(Ogre::MouseEvent* e)

{

CEGUI::System::getSingleton().injectMouseMove(

e->getRelX() * gm->getGUIRenderer()->getWidth(),

e->getRelY() * gm ->getGUIRenderer()->getHeight());

e->consume();

}

void AboutState::mouseDragged(Ogre::MouseEvent* e)

{

mouseMoved(e);

e->consume();

}


// MouseListener

void AboutState::mouseClicked(Ogre::MouseEvent* e)

{


}

void AboutState::mouseEntered(Ogre::MouseEvent* e)

{


}

void AboutState::mouseExited(Ogre::MouseEvent* e)

{


}

void AboutState::mousePressed(Ogre::MouseEvent* e)

{

CEGUI::System::getSingleton().injectMouseButtonDown(

convertOgreButtonToCegui(e->getButtonID()));

e->consume();


}

void AboutState::mouseReleased(Ogre::MouseEvent* e)

{

CEGUI::System::getSingleton().injectMouseButtonUp(

convertOgreButtonToCegui(e->getButtonID()));

e->consume();

}


bool AboutState::frameStarted(const FrameEvent& evt)

{

return true;

}


bool AboutState::frameEnded(const FrameEvent& evt)

{

return true;

}


void AboutState::setupEventHandlers(void)

{

CEGUI::WindowManager& wmgr = CEGUI::WindowManager::getSingleton();

wmgr.getWindow((CEGUI::utf8*)"OK")->subscribeEvent(

CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&AboutState::handleOK, this));

}


bool AboutState::handleOK(const CEGUI::EventArgs& e)

{


changeState(IntroState::getInstance());

return true;

}

================================================================


Файл AdruinPauseGui.xml

================================================================



















================================================================

PS

Это моя первая статья. Старался писать так, что б было всем понятно.

Ошибок вроде в коде нету те, что были я постарался отловить и исправить. Поскольку OGRE я начал изучать совсем недавно, возможно кое, что написано не оптимально.

PSS

Пожелания и предложения пишите мне на е-мейл.

PSSS

Надеюсь, статья вам понравилась и принесла пользу.

© Adruin 2006 г.

Adruin-VII@yandex.ru

1775-1975-kratkaya-istoriya-lejb-gvardii-gusarskogo-ego-velichestva-polka-98-str-stranica-2.html
17transportnaya-infrastruktura-analiz-sostoyaniya-problem-i-napravlenij-kompleksnogo-razvitiya-territorii-vklyuchaya.html
18-avgusta-vtornik-kalendar-osnovnih-meropriyatij-provodimih-na-territorii-municipalnogo-obrazovaniya-bazarnosizganskij.html
18-i-koni-nesut-sredi-sugrobov-pravit-ne-nuzhno-potomu-chto-sneg-im-po-bryuho-i-v-storonu-oni-ne-brosyatsya.html
18-o-mezhdunarodnoj-deyatelnosti-inc-so-ran-otchet-o-nauchno-organizacionnoj-i-hozyajstvennoj-deyatelnosti.html
18-trudovaya-disciplina-ohrana-truda.html
  • school.bystrickaya.ru/kuhni-mira-2.html
  • university.bystrickaya.ru/etnopedagogikali-tsinikterge-anitamalar-etnopedagogikani-zertteu-obekts-hali-pedagogikasi.html
  • nauka.bystrickaya.ru/uchebno-metodicheskij-kompleks-disciplini-buhgalterskij-uchet-specialnost.html
  • predmet.bystrickaya.ru/sobranie-sochinenij-v-shesti-tomah-glavnij-redaktor-stranica-23.html
  • holiday.bystrickaya.ru/na-elektronnoe-posobie-m-v-osmakovoj-doshkolyata-na-sovremennom-etape-razvitiya-obshestva-process-obrazovaniya-orientirovan-na-to-chtobi-sozdat-dlya-lichnosti-op.html
  • zadachi.bystrickaya.ru/pozharnaya-ohrana-do-1917-goda-chast-8.html
  • institut.bystrickaya.ru/tehnologii-polnogo-usvoeniya-uchebnogo-materiala.html
  • laboratornaya.bystrickaya.ru/programma-speckursa-sociologiya-znaniya.html
  • spur.bystrickaya.ru/kompleks-gorodskogo-hozyajstva-goroda-moskvi-gu-centr-reformi-v-zhkh-stranica-5.html
  • znanie.bystrickaya.ru/7-normativno-metodicheskoe-obespechenie-sistemi-ocenki-kachestva-osvoeniya-obuchayushimisya-oop-bakalavriata-po-napravleniyu-podgotovki-030600-istoriya.html
  • learn.bystrickaya.ru/glava-xii-zavershayushee-emocionalnoe-napryazhenie-i-ekstremalnie-usloviya-s-psihologicheskih-pozicij.html
  • ekzamen.bystrickaya.ru/rekomendacii-po-vipolneniyu-zadanij-ue-0.html
  • institute.bystrickaya.ru/finansi-predpriyatiya.html
  • studies.bystrickaya.ru/b2v-variativnaya-chast-tehnologiya-i-organizaciya-turoperatorskih-i-turagentskih-uslug.html
  • occupation.bystrickaya.ru/obrazovatelnaya-programma-municipalnogo-obsheobrazovatelnogo-uchrezhdeniya-kirovskij-licej.html
  • composition.bystrickaya.ru/otvetstvennost-storon-sgu-fond-gosudarstvennogo-imushestva-kbr-g-nalchik-prospekt-lenina-57-3-j-etazh-e.html
  • prepodavatel.bystrickaya.ru/uchebnaya-programma-dlya-specialnosti-1-24-01-01-mezhdunarodnoe-pravo-1-24-01-02-pravovedenie.html
  • education.bystrickaya.ru/30-avgusta-130-let-1876-1919-gg-so-dnya-rozhdeniya-kalendar-znamenatelnih-i-pamyatnih-dat-vostochno-kazahstanskoj.html
  • studies.bystrickaya.ru/alkogoln-napo.html
  • textbook.bystrickaya.ru/himicheskie-svojstva-i-prevrasheniya-polimerov-himiya-visokomolekulyarnih-soedinenij.html
  • uchenik.bystrickaya.ru/knowledge-temple-pokrivalo-maji-ili-skazki-dlya-nevrotikov-stranica-12.html
  • uchebnik.bystrickaya.ru/v-b-bobrova-obshaya-redakciya-i-vstupitelnaya-statya-stranica-90.html
  • institute.bystrickaya.ru/glava-xxxii-nechistaya-para-ilya-ilf-i-evgenij-petrov-dvenadcat-stulev-1956g.html
  • znanie.bystrickaya.ru/analiz-kriteriev-opasnosti-zagryazneniya-atmosferi-dlya-rastenij.html
  • ekzamen.bystrickaya.ru/spisok-klyuchevih-rabot-tvorcheskogo-kollektiva-retrospektivnij-analiz-razvitiya-nauchnih-napravlenij-kafedri-informacionnih.html
  • lesson.bystrickaya.ru/problemi-kvalifikacii-i-nakazuemosti-vzyatochnichestva.html
  • tests.bystrickaya.ru/l-s-vasilev-istoriya-religij-vostoka-stranica-3.html
  • doklad.bystrickaya.ru/voennoe-pravo-rossijskoj-federacii-nuzhdaetsya-v-razvitii-otdelnoj-podotrasli-reguliruyushej-process-primeneniya-vooruzhennih-sil-po-ih-prednaznacheniyu.html
  • portfolio.bystrickaya.ru/opredelenie-osnovnih-parametrov-avtomobilya-zil-131.html
  • abstract.bystrickaya.ru/1tak-oboznacheni-ssilki-na-primechaniya-primechaniya-posle-teksta-knigi-stranica-51.html
  • knigi.bystrickaya.ru/sobranie-sochinenij-kniga-5-vospominaniya-i-razmishleniya-o-nastoyashem-i-budushem-udk-821-161-31-stranica-26.html
  • literatura.bystrickaya.ru/sabati-tairibi-buin-ndestgne-bainbajtin-osimshalar.html
  • school.bystrickaya.ru/7-zhivotnie-prizraki-richard-vebster-vash-pitomec-ekstrasens.html
  • lecture.bystrickaya.ru/aviapromishlennost-1932-goda-stranica-56.html
  • uchebnik.bystrickaya.ru/vneshneekonomicheskie-svyazi-rossii.html
  • © bystrickaya.ru
    Мобильный рефератник - для мобильных людей.