Added renderflags and labels commands
This commit is contained in:
parent
7f67c63e22
commit
35dbbee6cd
|
@ -10,6 +10,7 @@
|
|||
// of the License, or (at your option) any later version.
|
||||
|
||||
#include <algorithm>
|
||||
#include <sstream>
|
||||
#include "util.h"
|
||||
#include "astro.h"
|
||||
#include "cmdparser.h"
|
||||
|
@ -17,6 +18,9 @@
|
|||
using namespace std;
|
||||
|
||||
|
||||
static int parseRenderFlags(string);
|
||||
static int parseLabelFlags(string);
|
||||
|
||||
CommandParser::CommandParser(istream& in)
|
||||
{
|
||||
tokenizer = new Tokenizer(&in);
|
||||
|
@ -198,6 +202,32 @@ Command* CommandParser::parseCommand()
|
|||
cmd = new CommandSetPosition(astro::universalPosition(Point3d(offset.x, offset.y, offset.z),
|
||||
Point3f((float) base.x, (float) base.y, (float) base.z)));
|
||||
}
|
||||
else if (commandName == "renderflags")
|
||||
{
|
||||
int setFlags = 0;
|
||||
int clearFlags = 0;
|
||||
string s;
|
||||
|
||||
if (paramList->getString("set", s))
|
||||
setFlags = parseRenderFlags(s);
|
||||
if (paramList->getString("clear", s))
|
||||
clearFlags = parseRenderFlags(s);
|
||||
|
||||
cmd = new CommandRenderFlags(setFlags, clearFlags);
|
||||
}
|
||||
else if (commandName == "labels")
|
||||
{
|
||||
int setFlags = 0;
|
||||
int clearFlags = 0;
|
||||
string s;
|
||||
|
||||
if (paramList->getString("set", s))
|
||||
setFlags = parseLabelFlags(s);
|
||||
if (paramList->getString("clear", s))
|
||||
clearFlags = parseLabelFlags(s);
|
||||
|
||||
cmd = new CommandLabels(setFlags, clearFlags);
|
||||
}
|
||||
else
|
||||
{
|
||||
error("Unknown command name '" + commandName + "'");
|
||||
|
@ -208,3 +238,79 @@ Command* CommandParser::parseCommand()
|
|||
|
||||
return cmd;
|
||||
}
|
||||
|
||||
|
||||
int parseRenderFlags(string s)
|
||||
{
|
||||
istringstream in(s);
|
||||
Tokenizer tokenizer(&in);
|
||||
int flags = 0;
|
||||
|
||||
Tokenizer::TokenType ttype = tokenizer.nextToken();
|
||||
while (ttype != Tokenizer::TokenEnd)
|
||||
{
|
||||
if (ttype == Tokenizer::TokenName)
|
||||
{
|
||||
string name = tokenizer.getNameValue();
|
||||
if (compareIgnoringCase(name, "orbits") == 0)
|
||||
flags |= Renderer::ShowOrbits;
|
||||
else if (compareIgnoringCase(name, "cloudmaps") == 0)
|
||||
flags |= Renderer::ShowCloudMaps;
|
||||
else if (compareIgnoringCase(name, "constellations") == 0)
|
||||
flags |= Renderer::ShowDiagrams;
|
||||
else if (compareIgnoringCase(name, "galaxies") == 0)
|
||||
flags |= Renderer::ShowGalaxies;
|
||||
else if (compareIgnoringCase(name, "planets") == 0)
|
||||
flags |= Renderer::ShowPlanets;
|
||||
else if (compareIgnoringCase(name, "stars") == 0)
|
||||
flags |= Renderer::ShowStars;
|
||||
|
||||
ttype = tokenizer.nextToken();
|
||||
if (ttype == Tokenizer::TokenBar)
|
||||
ttype = tokenizer.nextToken();
|
||||
}
|
||||
else
|
||||
{
|
||||
DPRINTF("Error parsing render flags\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
|
||||
int parseLabelFlags(string s)
|
||||
{
|
||||
istringstream in(s);
|
||||
Tokenizer tokenizer(&in);
|
||||
int flags = 0;
|
||||
|
||||
Tokenizer::TokenType ttype = tokenizer.nextToken();
|
||||
while (ttype != Tokenizer::TokenEnd)
|
||||
{
|
||||
if (ttype == Tokenizer::TokenName)
|
||||
{
|
||||
string name = tokenizer.getNameValue();
|
||||
if (compareIgnoringCase(name, "planets") == 0)
|
||||
flags |= Renderer::MajorPlanetLabels;
|
||||
else if (compareIgnoringCase(name, "minorplanets") == 0)
|
||||
flags |= Renderer::MinorPlanetLabels;
|
||||
else if (compareIgnoringCase(name, "constellations") == 0)
|
||||
flags |= Renderer::ConstellationLabels;
|
||||
else if (compareIgnoringCase(name, "stars") == 0)
|
||||
flags |= Renderer::StarLabels;
|
||||
|
||||
ttype = tokenizer.nextToken();
|
||||
if (ttype == Tokenizer::TokenBar)
|
||||
ttype = tokenizer.nextToken();
|
||||
}
|
||||
else
|
||||
{
|
||||
DPRINTF("Error parsing label flags\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
|
|
@ -223,3 +223,39 @@ void CommandSetOrientation::process(Simulation* sim, Renderer* renderer)
|
|||
q.setAxisAngle(axis, angle);
|
||||
sim->getObserver().setOrientation(q);
|
||||
}
|
||||
|
||||
|
||||
//////////////////
|
||||
// Set render flags command
|
||||
|
||||
CommandRenderFlags::CommandRenderFlags(int _setFlags, int _clearFlags) :
|
||||
setFlags(_setFlags), clearFlags(_clearFlags)
|
||||
{
|
||||
}
|
||||
|
||||
void CommandRenderFlags::process(Simulation* sim, Renderer* renderer)
|
||||
{
|
||||
if (renderer != NULL)
|
||||
{
|
||||
renderer->setRenderFlags(renderer->getRenderFlags() | setFlags);
|
||||
renderer->setRenderFlags(renderer->getRenderFlags() & ~clearFlags);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//////////////////
|
||||
// Set labels command
|
||||
|
||||
CommandLabels::CommandLabels(int _setFlags, int _clearFlags) :
|
||||
setFlags(_setFlags), clearFlags(_clearFlags)
|
||||
{
|
||||
}
|
||||
|
||||
void CommandLabels::process(Simulation* sim, Renderer* renderer)
|
||||
{
|
||||
if (renderer != NULL)
|
||||
{
|
||||
renderer->setLabelMode(renderer->getLabelMode() | setFlags);
|
||||
renderer->setLabelMode(renderer->getLabelMode() & ~clearFlags);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -208,4 +208,28 @@ class CommandSetOrientation : public InstantaneousCommand
|
|||
};
|
||||
|
||||
|
||||
class CommandRenderFlags : public InstantaneousCommand
|
||||
{
|
||||
public:
|
||||
CommandRenderFlags(int _setFlags, int _clearFlags);
|
||||
void process(Simulation*, Renderer*);
|
||||
|
||||
private:
|
||||
int setFlags;
|
||||
int clearFlags;
|
||||
};
|
||||
|
||||
|
||||
class CommandLabels : public InstantaneousCommand
|
||||
{
|
||||
public:
|
||||
CommandLabels(int _setFlags, int _clearFlags);
|
||||
void process(Simulation*, Renderer*);
|
||||
|
||||
private:
|
||||
int setFlags;
|
||||
int clearFlags;
|
||||
};
|
||||
|
||||
|
||||
#endif // _COMMAND_H_
|
||||
|
|
Loading…
Reference in a new issue