================================================================ - После ознакомлениями с примерами стало понятно,...
.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
  • kanikulyi.bystrickaya.ru/vsego-avtomobilej-ezhekvartalnij-otchet-oao-kamaz-za-2-kvartal-2004-goda.html
  • portfolio.bystrickaya.ru/osobennosti-perenosa-kvantorov-cherez-dizyunkciyu-i-konyunkciyu-v-logike-predikatov-i-v-drobisheva-kandidat-pedagogicheskih-nauk-professor.html
  • doklad.bystrickaya.ru/uchebno-metodicheskij-kompleks-uchebnoj-disciplini-sociologiya-upravleniya-nazvanie-disciplini.html
  • abstract.bystrickaya.ru/-9-soznanie-yazik-obshenie-spirkin-a-g-filosofiya-uchebnik-2-e-izd.html
  • crib.bystrickaya.ru/kniga-prva.html
  • crib.bystrickaya.ru/gosudarstva-donori-protivominnih-meropriyatij-doklad-landmine-monitor-2005.html
  • occupation.bystrickaya.ru/obrazovatelnaya-programma-osnovnogo-obshego-obrazovaniya-programma.html
  • tests.bystrickaya.ru/kontrol-finansovo-hozyajstvennoj-deyatelnosti-podvedomstvennih-ministerstvu-uchrezhdenij-predpriyatij-i-organizacij.html
  • testyi.bystrickaya.ru/6-rol-vnutrennej-rechi-v-poznavatelnoj-intellektualnoj-deyatelnosti-cheloveka-198-etot-razdel-glavi-napisan-v-p-gluhovim.html
  • essay.bystrickaya.ru/da-sisteme.html
  • upbringing.bystrickaya.ru/konkurs-festival-final-vserossijskogo-proekta-volga-v-serdce-vpadaet-moe.html
  • student.bystrickaya.ru/39-razbor-poletov-nastavlenie-po-proizvodstvu-poletov.html
  • school.bystrickaya.ru/bankovskij-nadzor-i-puti-sovershenstvovaniya-v-rossii-chast-5.html
  • writing.bystrickaya.ru/l-a-chernova-stranica-3.html
  • ucheba.bystrickaya.ru/prilozhenie-17-proekt-evropejskogo-soyuza-i-programmi-razvitiya-oon-borba-s-torgovlej-zhenshinami-v-respublike-belarus.html
  • znanie.bystrickaya.ru/batirlar-zhiri-er-tarin-zhirinan-masati.html
  • abstract.bystrickaya.ru/-remont-sistem-elektrosnabzheniya-vodosnabzheniya-i-kanalizacii-sistem-otopleniya-uroven-zhizni-i-zanyatost-naseleniya.html
  • pisat.bystrickaya.ru/the-chassis-model-the-processor-of-management-the-videoprocessor-the-input-in-the-service-menu-stranica-4.html
  • composition.bystrickaya.ru/pinhas-polonskij-evrei-i-hristianstvo-nesovmestimost-dvuh-podhodov-k-miru-stranica-4.html
  • urok.bystrickaya.ru/prognoznij-otchet-o-pribilyah-i-ubitkah-ishodya-iz-dinamiki-analiziruemogo-perioda.html
  • uchenik.bystrickaya.ru/igrovaya-deyatelnost-u-zhivotnih-i-lyudej.html
  • books.bystrickaya.ru/denezhnaya-sistema-rossijskoj-federacii-5.html
  • exchangerate.bystrickaya.ru/gipotoniya-predzheludkov-hypotonia-ruminis-reticuli-et-omasi-chast-6.html
  • teacher.bystrickaya.ru/glava-iii-razmishlenie-i-peremena-kniga-zhizni-i-praktiki-umiraniya.html
  • control.bystrickaya.ru/chislennost-sostoyashih-na-uchete-v-kachestve-nuzhdayushihsya-v-obespechenii-zhilimi-pomesheniyami-po-dogovoram-socialnogo-najma.html
  • uchitel.bystrickaya.ru/rabochaya-programma-napravlenie-020701-istoriya-specialnost-020700-istoriya-status-disciplini.html
  • uchenik.bystrickaya.ru/gl-22-druzhba-kak-forma-razresheniya-vnutrennih-protivorechij-s-a-zelinskij-manipulyacii-massami-i-psihoanaliz.html
  • upbringing.bystrickaya.ru/lazerolyuminescenciya-sm3-v-mineralah-gruppi-berbankitakarbocernaite-i-stroncianite.html
  • occupation.bystrickaya.ru/ob-utverzhdenii-programmi-socialno-ekonomicheskogo-razvitiya-respubliki-tatarstan-na-2005-2010-godi-stranica-17.html
  • paragraf.bystrickaya.ru/zasedanie-prezidiuma-gossoveta-po-voprosam-ekologicheskoj-bezopasnosti.html
  • desk.bystrickaya.ru/pochki-simvol-partnyorstva-aleksandr-astrogor-seriya-karmicheskaya-medicina-traktat-o-prichinah-vozniknoveniya-boleznej.html
  • upbringing.bystrickaya.ru/majkl-yapko-gipnoz-dlya-psihoterapii-depressij-moskva-marketing-2002-stranica-7.html
  • literatura.bystrickaya.ru/soderzhanie-vospitatelnogo-aspekta-predmetnij-kurs-russkij-yazik-avtori-v-g-goreckijv-a-kiryushkin-l-a.html
  • institut.bystrickaya.ru/uchebnaya-programma-po-specialnomu-kursu-diagnostika-sostava-poluprovodnikov-i-poluprovodnikovih-struktur.html
  • institut.bystrickaya.ru/teatralno-zrelishnie-uchrezhdeniya-itogi-raboti-uchrezhdenij-kulturi-iskusstva-i-predpriyatij-otrasli-pechati-respubliki.html
  • © bystrickaya.ru
    Мобильный рефератник - для мобильных людей.