Some work on cleaning up Missions

This commit is contained in:
Alexander Bock
2016-09-24 20:28:03 +02:00
parent 49308c658c
commit 3d894c38e3
5 changed files with 36 additions and 29 deletions
+3 -3
View File
@@ -124,8 +124,8 @@ const MissionPhase& MissionPhase::phase(size_t i) const {
return _subphases[i];
}
std::list<const MissionPhase*> MissionPhase::phaseTrace(double time, int maxDepth) const {
std::list<const MissionPhase*> trace;
std::vector<const MissionPhase*> MissionPhase::phaseTrace(double time, int maxDepth) const {
std::vector<const MissionPhase*> trace;
if (_timeRange.includes(time)) {
trace.push_back(this);
phaseTrace(time, trace, maxDepth);
@@ -133,7 +133,7 @@ std::list<const MissionPhase*> MissionPhase::phaseTrace(double time, int maxDept
return std::move(trace);
}
bool MissionPhase::phaseTrace(double time, std::list<const MissionPhase*>& trace, int maxDepth) const {
bool MissionPhase::phaseTrace(double time, std::vector<const MissionPhase*>& trace, int maxDepth) const {
if (maxDepth == 0) {
return false;
}
+21 -11
View File
@@ -22,10 +22,13 @@
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
****************************************************************************************/
#include <openspace/mission/missionmanager.h>
#include <ghoul/misc/assert.h>
#include <assert.h>
#include <ghoul/filesystem/filesystem.h>
#include <openspace/util/spicemanager.h>
#include <openspace/mission/missionmanager.h>
#include <openspace/engine/openspaceengine.h>
#include <openspace/scripting/scriptengine.h>
@@ -44,12 +47,12 @@ namespace openspace {
MissionManager* MissionManager::_instance = nullptr;
MissionManager& MissionManager::ref() {
assert(_instance != nullptr);
ghoul_assert(_instance, "Instance has not been initiated");
return *_instance;
}
void MissionManager::initialize() {
assert(_instance == nullptr);
ghoul_assert(!_instance, "Instance has been initialized before");
_instance = new MissionManager;
OsEng.scriptEngine().addLibrary(MissionManager::luaLibrary());
}
@@ -59,13 +62,13 @@ void MissionManager::deinitialize() {
_instance = nullptr;
}
void MissionManager::setCurrentMission(const std::string missionName) {
void MissionManager::setCurrentMission(const std::string& missionName) {
auto it = _missionMap.find(missionName);
if (it == _missionMap.end()) {
LWARNING("Mission with name \"" << missionName << "\" has not been loaded!");
}
else {
_currentMissionIter = it;
_currentMission = it;
}
}
@@ -74,23 +77,28 @@ void MissionManager::setCurrentMission(const std::string missionName) {
*/
bool MissionManager::hasCurrentMission() const {
return _currentMissionIter != _missionMap.end();
return _currentMission != _missionMap.end();
}
void MissionManager::loadMission(const std::string& filepath) {
// Changing the values might invalidate the _currentMission iterator
const std::string& currentMission = _currentMission->first;
Mission mission(filepath);
_missionMap[mission.name()] = mission;
_missionMap[mission.name()] = std::move(mission);
if (_missionMap.size() == 1) {
setCurrentMission(mission.name());
}
setCurrentMission(currentMission);
}
const Mission& MissionManager::currentMission() {
if (_currentMissionIter == _missionMap.end()) {
if (_currentMission == _missionMap.end()) {
LWARNING("No current mission has been specified. returning dummy mission");
return Mission();
}
return _currentMissionIter->second;
return _currentMission->second;
}
namespace luascriptfunctions {
@@ -122,7 +130,7 @@ namespace luascriptfunctions {
} // namespace luascriptfunction
scripting::LuaLibrary MissionManager::luaLibrary() {
return{
return {
"",
{
{
@@ -143,6 +151,8 @@ scripting::LuaLibrary MissionManager::luaLibrary() {
// Singleton
inline MissionManager::MissionManager() : _currentMissionIter(_missionMap.end()) {}
MissionManager::MissionManager()
: _currentMission(_missionMap.end())
{}
} // namespace openspace
+1 -1
View File
@@ -1364,7 +1364,7 @@ void RenderEngine::renderInformation() {
// Add spacing
RenderFontCr(*_fontInfo, penPosition, nonCurrentMissionColor, " ");
std::list<const MissionPhase*> phaseTrace = mission.phaseTrace(currentTime);
std::vector<const MissionPhase*> phaseTrace = mission.phaseTrace(currentTime);
if (phaseTrace.size()) {
std::string title = "Current Mission Phase: " + phaseTrace.back()->name();