#include "FlaSimApp.hpp" #include #include "Globals.hpp" #include "Dispatcher.hpp" using namespace std; using namespace irr; using namespace irr::core; using namespace irr::video; FlaSimApp::FlaSimApp() : fireUnit() { dev = Globals::getDevice(); drv = Globals::getVideoDriver(); sman = Globals::getSceneManager(); sman->addSkyBoxSceneNode(drv->getTexture("../res/skytop.jpg"), drv->getTexture("../res/skybottom.jpg"), drv->getTexture("../res/sky3.jpg"), drv->getTexture("../res/sky1.jpg"), drv->getTexture("../res/sky0.jpg"), drv->getTexture("../res/sky2.jpg") ); auto t = sman->addTerrainSceneNode("../res/heightmap.png"); t->setScale(vector3df(1.f, .1f, 1.f)); auto move = t->getTerrainCenter(); move.Y += 10.f; t->setPosition(-move); t->setMaterialFlag(EMF_FOG_ENABLE, true); t->setMaterialTexture(0, drv->getTexture("../res/detailmap.png")); drv->setFog(video::SColor(0, 99, 122, 193), EFT_FOG_EXP, 100.f, 300.f); scene::ILightSceneNode *sun = sman->addLightSceneNode(); sun->setLightType(ELT_DIRECTIONAL); sun->setRotation(vector3df(45.f, 0.f, 0.f)); dev->setEventReceiver(this); core::array joystickInfo; if (dev->activateJoysticks(joystickInfo)) { cout << "Joystick support is enabled and " << joystickInfo.size() << " joystick(s) are present." << endl; } } FlaSimApp::~FlaSimApp() { } void FlaSimApp::execute() { while (dev->run()) { Globals::getDispatcher()->execute(); drv->beginScene(true, true, SColor(255, 128, 128, 128)); sman->drawAll(); drawScreenSpace(); fireUnit.draw(); drv->endScene(); } } bool FlaSimApp::OnEvent(const irr::SEvent &e) { if (e.EventType == EET_KEY_INPUT_EVENT) { if (e.KeyInput.Key == KEY_F12) { dev->closeDevice(); return true; } if (e.KeyInput.Key == KEY_F9) { Globals::getDispatcher()->start(); return true; } if (e.KeyInput.Key == KEY_F10) { Globals::getDispatcher()->stop(); return true; } } return fireUnit.OnEvent(e); } void FlaSimApp::drawScreenSpace() { video::SMaterial matA; matA.AmbientColor = video::SColor(255, 255, 0, 0); matA.DiffuseColor = video::SColor(255, 255, 0, 0); matA.ColorMaterial = video::ECM_NONE; matA.AntiAliasing = video::EAAM_FULL_BASIC; matA.Lighting = false; matA.Thickness = 1.5f; matA.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; drv->setMaterial(matA); drv->setTransform(video::ETS_WORLD, core::IdentityMatrix); drv->draw3DLine(vector3df(0.f, 0.f, 0.f), vector3df(1.f, 0.f, 0.f), video::SColor(255, 255, 0, 0)); drv->draw3DLine(vector3df(0.f, 0.f, 0.f), vector3df(0.f, 1.f, 0.f), video::SColor(255, 0, 255, 0)); drv->draw3DLine(vector3df(0.f, 0.f, 0.f), vector3df(0.f, 0.f, 1.f), video::SColor(255, 0, 0, 255)); core::stringw info = L"RNDS REMAIN: "; if (fireUnit.isReloading()) info += L"[RELOADING]"; else info += fireUnit.getRoundsRemaining(); info += L"\nAIRCFT REMAIN: "; info += Globals::getDispatcher()->getAircraftsRemaining(); info += L"\nPOINTS: "; info += Globals::getDispatcher()->getPoints(); Globals::getFont()->draw(info, core::recti(10, 10, 100, 100), video::SColor(255, 255, 255, 255)); }