mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-01-05 19:19:39 -06:00
Some work on cleaning up Missions
This commit is contained in:
@@ -61,12 +61,10 @@ public:
|
||||
*/
|
||||
const MissionPhase& phase(size_t i) const;
|
||||
|
||||
std::list<const MissionPhase*> phaseTrace(double time, int maxDepth = -1) const;
|
||||
|
||||
//TimeRange parseTimeRange(const ghoul::Dictionary& dict);
|
||||
std::vector<const MissionPhase*> phaseTrace(double time, int maxDepth = -1) const;
|
||||
|
||||
protected:
|
||||
bool phaseTrace(double time, std::list<const MissionPhase*>& trace, int maxDepth) const;
|
||||
bool phaseTrace(double time, std::vector<const MissionPhase*>& trace, int maxDepth) const;
|
||||
|
||||
std::string _name;
|
||||
std::string _description;
|
||||
|
||||
@@ -25,18 +25,15 @@
|
||||
#ifndef __MISSIONPHASEEQUENCER_H__
|
||||
#define __MISSIONPHASEEQUENCER_H__
|
||||
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <openspace/util/timerange.h>
|
||||
#include <openspace/mission/mission.h>
|
||||
|
||||
#include <ghoul/misc/dictionary.h>
|
||||
#include <ghoul/lua/ghoul_lua.h>
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
namespace openspace {
|
||||
|
||||
namespace scripting { struct LuaLibrary; }
|
||||
|
||||
/**
|
||||
* Singleton class keeping track of space missions.
|
||||
*/
|
||||
@@ -58,7 +55,7 @@ public:
|
||||
* Sets the mission with the name <missionName> as the current mission. The current
|
||||
* mission is what is return by `currentMission()`.
|
||||
*/
|
||||
void setCurrentMission(const std::string missionName);
|
||||
void setCurrentMission(const std::string& missionName);
|
||||
|
||||
/**
|
||||
* Returns true if a current mission exists
|
||||
@@ -76,9 +73,11 @@ private:
|
||||
static scripting::LuaLibrary luaLibrary();
|
||||
static MissionManager* _instance;
|
||||
|
||||
typedef std::unordered_map<std::string, Mission> MissionMap;
|
||||
//typedef std::map<std::string, Mission> MissionMap;
|
||||
using MissionMap = std::map<std::string, Mission>;
|
||||
MissionMap _missionMap;
|
||||
MissionMap::iterator _currentMissionIter;
|
||||
|
||||
MissionMap::iterator _currentMission;
|
||||
|
||||
// Singleton
|
||||
MissionManager();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user