.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
  • kolledzh.bystrickaya.ru/522-informaciya-o-edinolichnom-ispolnitelnom-organe-emitenta-198097-rossiya-gorod-sankt-peterburg-prospekt.html
  • doklad.bystrickaya.ru/uchebnoe-posobie-dlya-2-studentov-klassa-sergiev-posad-stranica-4.html
  • holiday.bystrickaya.ru/ntv-segodnya-06-11-2008-vinnik-elena-13-00-7-rbk-tv-novosti-06-11-2008-sergeeva-elena-08-00-7.html
  • gramota.bystrickaya.ru/zhel-atletika-kpshlk-sportti-negzg-trlern-br-zhel-atletika-kpshlk-sportti-negzg-trlern-br.html
  • exchangerate.bystrickaya.ru/bespokojstvo.html
  • learn.bystrickaya.ru/glava-iv-poedinok-pushkin-aleksandr-sergeevich.html
  • desk.bystrickaya.ru/pochti-vseryoz-yurij-konobeev-vitalij-pavlinchuk-nikolaj-rabotnov-vladimir-turchin.html
  • ekzamen.bystrickaya.ru/rekomendacii-po-organizacii-fizkulturno-ozdorovitelnoj-i-sportivnoj-raboti-s-naseleniem-po-mestu-zhitelstva-moskva-2010-stranica-19.html
  • lecture.bystrickaya.ru/4-principi-uchetnoj-politiki-otchetnost-po-sostoyaniyu.html
  • esse.bystrickaya.ru/razdel-ii-orfografiya-rabochaya-programma-po-kursu-russkij-yazik-i-kultura-rechi-dlya-studentov-ochnoj-formi-obucheniya.html
  • bukva.bystrickaya.ru/planirovanie-byudzheta-marketinga.html
  • learn.bystrickaya.ru/glava-9-primenenie-cvm-dlya-analiza-ustojchivosti-metodicheskie-ukazaniya-po-opredeleniyu-ustojchivosti-energosistem.html
  • laboratornaya.bystrickaya.ru/programmi-vesti-krasnoyarsk-tk-rossiya-itogi-goda-podveli-v-krupnejshem-vuze-rossii-v-sfu-stranica-4.html
  • education.bystrickaya.ru/241-novaya-tehnologiya-vosstanovitelnoj-medicini-v-lokalnoj-terapii-osteoartroza.html
  • nauka.bystrickaya.ru/v-e-tomberg-vtilu-i-na-fronte-stranica-2.html
  • urok.bystrickaya.ru/programma-dopolnitelnogo-professionalnogo-obrazovaniya-povisheniya-kvalifikacii-moskva-2007-god-stranica-6.html
  • writing.bystrickaya.ru/deviantnoe-materinstvo-v-sovremennom-roditelstve.html
  • knowledge.bystrickaya.ru/moj-pryamoj-put-vilgelm-adam.html
  • uchitel.bystrickaya.ru/programmi-shag-v-budushee-maloj-akademii-nauchnih-izobretenij-i-otkritij-kirillov-anton11a-po-itogam-oblastnoj-olimpiadi-nauchno-tehnicheskogo-i-intellektualnogo-tvorchestva-shag-v-budushee-licej-102-nagrazhden.html
  • uchenik.bystrickaya.ru/fors-mazhornie-obstoyatelstva-v-turizme.html
  • zanyatie.bystrickaya.ru/specializirovannij-uchebnij-kurs-chelyabinsk-2008-arsenteva-s-s-stranica-6.html
  • kontrolnaya.bystrickaya.ru/razdel-x-pravila-ohrani-truda-na-avtomobilnom-transporte-razdel-i.html
  • knowledge.bystrickaya.ru/metodicheskie-ukazaniya-dlya-vipolneniya-kontrolnih-rabot-po-uchebnoj-discipline-investicii.html
  • pisat.bystrickaya.ru/tema-filosofskie-metodi-klassicheskoj-naukilit-uchebnoe-posobie-dlya-aspirantov-i-soiskatelej.html
  • znaniya.bystrickaya.ru/rabochaya-programma-disciplini-razvedochnaya-geofizika-specialnost-oop.html
  • report.bystrickaya.ru/i23-podgotovka-zayavki-na-uchastie-v-aukcione-o-razmeshenii-zakazov-na-postavki-tovarov-vipolnenie-rabot-okazanie.html
  • assessments.bystrickaya.ru/dinamika-antropologicheskoj-differenciacii-naseleniya-yuga-zapadnoj-sibiri-v-epohi-neolita-rannego-zheleznogo-veka.html
  • uchenik.bystrickaya.ru/istoriya-moskvi-x-xx-veka.html
  • kanikulyi.bystrickaya.ru/zapis-ustrojstvo-radiopriemnoe-onkyo-tx-sr807-rukovodstvo-po-ekspluatacii.html
  • college.bystrickaya.ru/1-den-v-nedelyu-kniga-rasschitana-na-shirokij-krug-chitatelej-osobo-rekomendovana-specialistam-medikam-roditelyam.html
  • zanyatie.bystrickaya.ru/studentki-2-kursa-do-gr-201.html
  • essay.bystrickaya.ru/bibliograficheskij-spisok-v-i-prokopcov-nauchnij-rukovoditel-mezhvuzovskogo-uchebno.html
  • desk.bystrickaya.ru/patisson-ili-podvodnaya-bratva11-f-e-dzerzhinskij-vsegda-legche-otkatit-chem-chtoto-podpisat.html
  • doklad.bystrickaya.ru/uchebnik-moskva-stranica-23.html
  • kolledzh.bystrickaya.ru/apollion-pravitel-furij-seyatelej-bed-razdorov-i-vojn-imeet-sedmoj-chin-klassifikacii-ada-po-angelskim-chinam-stranica-9.html
  • © bystrickaya.ru
    Мобильный рефератник - для мобильных людей.