.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
  • universitet.bystrickaya.ru/tehnologiya-konstrukcionnih-materialov-stranica-2.html
  • turn.bystrickaya.ru/otveti-na-bileti-po-fizike-za-9-klass.html
  • notebook.bystrickaya.ru/itogovaya-attestaciya-po-inostrannomu-yaziku-v-9-klasse-osushestvlyaetsya-v-dvuh-formah-libo-s-pomoshyu-ekzamena-po-viboru-kotorij-provoditsya-v-forme-ustnogo-sobesed.html
  • zadachi.bystrickaya.ru/polozhenie-o-detskom-obedinenii-dom-detskoe-obedinenie-murmanchat-na-zasedanii-pedsoveta-progimnazii.html
  • portfolio.bystrickaya.ru/podmoskovnie-studenti-smogut-prinyat-uchastie-v-mezhdunarodnoj-olimpiade-it-planeta.html
  • znaniya.bystrickaya.ru/razdel-v-formirovanie-finansovih-rezultatov-strahovoj-deyatelnosti-uchebno-metodicheskij-kompleks-izdatelstvo.html
  • shpargalka.bystrickaya.ru/v-obshestvennij-koordinacionnij-sovet-po-vzaimodejstviyu-organov-kontroliruyushih-kachestvo-i-bezopasnost-produkcii-i-uslug-okazivaemih-naseleniyu-kraya-stranica-8.html
  • predmet.bystrickaya.ru/saratovskoj-oblasti-soglasovano.html
  • shpora.bystrickaya.ru/vvedenie-rukovodstvo-polzovatelya-versiya-0-sankt-peterburg-2010-firma-zao-vzlet.html
  • otsenki.bystrickaya.ru/spb-n-novgorod-spb-ozdorovitelnij-kompleks-gamma-10-otel-gamma-11-pansionat-svetlana-12-ekskursiya.html
  • doklad.bystrickaya.ru/v-rossii-vremya-novostej-dubov-dmitrij-17122008-234-str-1-vzaimodejstvie-gosdumi-s-federalnimi-organami-11-tv-11.html
  • portfolio.bystrickaya.ru/otchet-o-rabote-kontrolno-schetnoj-palati-respubliki-severnaya-osetiya-alaniya-za-2010-god-3-81-stranica-5.html
  • reading.bystrickaya.ru/metodi-issledovaniya-prichin-travmatizma-pravovie-i-normativno-tehnicheskie-osnovi-obespecheniya-bzhd-2.html
  • ekzamen.bystrickaya.ru/regionalnie-krizisnie-situacii-ih-ponyatie.html
  • shkola.bystrickaya.ru/prichini-dolgoletiya.html
  • spur.bystrickaya.ru/kolichestvo-obsheobrazovatelnih-shkol-35-v-t-ch-srednih-18-3927-uchashihsya-osnovnih-4-167-chel-nachalnih-10-181-chelovek-3-shkoli-detskij-sad-116.html
  • studies.bystrickaya.ru/2-situativnaya-teoriya-perevoda-1-ponyatie-perevod.html
  • desk.bystrickaya.ru/otchet-prezidenta-associacii-o-deyatelnosti-vserossijskoj-obshestvennoj-organizacii-associacii-detskih-kardiologov-rossii-v-2010-godu.html
  • universitet.bystrickaya.ru/uchebnaya-programma-kursa-komandoobrazovanie.html
  • education.bystrickaya.ru/3-osnovnie-usloviya-dostizheniya-novih-celej-obrazovaniya-strategiya-modernizacii.html
  • university.bystrickaya.ru/evrejskij-dom-semya-antisemitizm.html
  • zanyatie.bystrickaya.ru/montazh-vrashayushejsya-barabannoj-pechi.html
  • obrazovanie.bystrickaya.ru/primernaya-programma-po-informatike-i-informacionnim-tehnologiyam-sostavlena-na-osnove-federalnogo-komponenta-gosudarstvennogo-standarta-osnovnogo-obshego-obrazovaniya-celi.html
  • tests.bystrickaya.ru/krediti-i-zajmi-godovoj-otchet-otkritogo-akcionernogo-obshestva-meta-fraks.html
  • writing.bystrickaya.ru/marafon-sportivnij-dvor-sobral-pochti-76-millionov-rublej-nedavno-v-bolshom-planetarii-moskvi-sostoyalas-blagotvoritelnaya.html
  • books.bystrickaya.ru/dokumentaciya-ob-aukcione-288-stranica-10.html
  • lecture.bystrickaya.ru/administraciya-gorodskogo-poseleniya-poshehone.html
  • learn.bystrickaya.ru/g-i-tarhanovu-uvazhaemij-grigorij-ivanovich.html
  • lecture.bystrickaya.ru/audiozapisi-i-fonohrestomatii-instruktivno-metodicheskoe-pismo-o-prepodavanii-uchebnogo-predmeta-mirovaya-hudozhestvennaya.html
  • ucheba.bystrickaya.ru/programma-moskva-15-17-iyunya-2010-g-nauchnij-sovet-po-akustike-ran-obshestvennaya-organizaciya-rossijskoe-akusticheskoe-obshestvo-rao.html
  • lecture.bystrickaya.ru/5-sozdanie-uslovij-dlya-sohraneniya-zdorovya-obuchayushihsya-titulnij-list-programmi-razvitiya-obrazovatelnogo-uchrezhdeniya.html
  • books.bystrickaya.ru/bolezni-i-zhalobi-veka-kniga-v-dostupnoj-forme-rasskazivaet-o-filosofii-metodologii-i-tehnologii-integralnogo.html
  • testyi.bystrickaya.ru/5-voprosi-k-ekzamenu-zachetu-uchebno-metodicheskij-kompleks-istoriya-filosofii-specialnost-03-1801.html
  • tasks.bystrickaya.ru/1-plani-germanskih-specsluzhb-sorvani-vipusk-1-izdatelstvo-infocentra-mo-moip-fond-grazhdanskih-iniciativ-moskva.html
  • report.bystrickaya.ru/iii-vozrozhdenie-duhovnih-cennostej-narodnie-tradicii-otchet-po-ekologicheskomu-prosvesheniyu-naseleniya-2005-god.html
  • © bystrickaya.ru
    Мобильный рефератник - для мобильных людей.