diff --git a/src/Aircraft.cpp b/src/Aircraft.cpp index fd51c74..7fb4673 100644 --- a/src/Aircraft.cpp +++ b/src/Aircraft.cpp @@ -86,3 +86,8 @@ void Aircraft::update(u32 curMS) flybySound->move(cAudio::cVector3(p.X, p.Y, p.Z)); } } + +vector3df Aircraft::getPosition() const +{ + return model->getAbsolutePosition(); +} diff --git a/src/Aircraft.hpp b/src/Aircraft.hpp index fc94eed..381b4f7 100644 --- a/src/Aircraft.hpp +++ b/src/Aircraft.hpp @@ -15,6 +15,7 @@ public: bool isGood() const; bool isTerminated() const; void update(irr::u32 curMS); + irr::core::vector3df getPosition() const; private: Aircraft(); diff --git a/src/Dispatcher.cpp b/src/Dispatcher.cpp index 7b252b0..b0f5eaa 100644 --- a/src/Dispatcher.cpp +++ b/src/Dispatcher.cpp @@ -7,6 +7,8 @@ using namespace irr::core; Dispatcher::Dispatcher() : active(false) + , aircraftsRemaining(0) + , points(0) { } @@ -20,16 +22,26 @@ void Dispatcher::start() { lastDispatchMS = Globals::getDevice()->getTimer()->getRealTime(); active = true; + aircraftsRemaining = 5; + points = 0; } void Dispatcher::execute() { u32 curTime = Globals::getDevice()->getTimer()->getRealTime(); - if (active && (curTime - lastDispatchMS) > 10000) + if (active && (curTime - lastDispatchMS) > 45000) { - dispatchAircraft(); - lastDispatchMS = curTime; + if (aircraftsRemaining > 0) + { + dispatchAircraft(); + aircraftsRemaining--; + lastDispatchMS = curTime; + } + else + { + stop(); + } } // loopdidoo & cleanup @@ -48,6 +60,7 @@ void Dispatcher::execute() void Dispatcher::stop() { + aircrafts.clear(); active = false; } @@ -61,8 +74,9 @@ bool Dispatcher::evalShot(const core::line3df& l) bool ret = false; for (auto a : aircrafts) { - if (a->evalShot(l)) + if (a->isGood() && a->evalShot(l)) { + points += 1000 + a->getPosition().getDistanceFrom(vector3df(0.f, 0.f, 0.f)); ret = true; } } @@ -70,6 +84,16 @@ bool Dispatcher::evalShot(const core::line3df& l) return ret; } +u32 Dispatcher::getAircraftsRemaining() const +{ + return aircraftsRemaining; +} + +u32 Dispatcher::getPoints() const +{ + return points; +} + void Dispatcher::dispatchAircraft() { IRandomizer *rand = Globals::getDevice()->getRandomizer(); diff --git a/src/Dispatcher.hpp b/src/Dispatcher.hpp index eaa1288..1814d82 100644 --- a/src/Dispatcher.hpp +++ b/src/Dispatcher.hpp @@ -15,11 +15,15 @@ public: void stop(); const Aircrafts& getAircrafts() const; bool evalShot(const irr::core::line3df&); + irr::u32 getAircraftsRemaining() const; + irr::u32 getPoints() const; private: irr::u32 lastDispatchMS; Aircrafts aircrafts; bool active; + irr::u32 aircraftsRemaining, points; + void dispatchAircraft(); }; diff --git a/src/FlaSimApp.cpp b/src/FlaSimApp.cpp index a8880b1..f56fb31 100644 --- a/src/FlaSimApp.cpp +++ b/src/FlaSimApp.cpp @@ -110,5 +110,7 @@ void FlaSimApp::drawScreenSpace() 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)); } diff --git a/src/Globals.cpp b/src/Globals.cpp index 04eb6af..11cac7a 100644 --- a/src/Globals.cpp +++ b/src/Globals.cpp @@ -10,7 +10,7 @@ Globals* Globals::instance = nullptr; Globals::Globals() { - dev = createDevice(video::EDT_OPENGL, core::dimension2du(1280, 800), 32, false, false, true); + dev = createDevice(video::EDT_OPENGL, core::dimension2du(1600, 900), 32, false, false, true); drv = dev->getVideoDriver(); sman = dev->getSceneManager(); dispatcher = new Dispatcher();