Added constellation boundaries

ver1_5_1
Chris Laurel 2002-06-05 05:27:53 +00:00
parent 72bea903d4
commit 4073f4b641
8 changed files with 96 additions and 64 deletions

View File

@ -996,6 +996,18 @@ void Renderer::render(const Observer& observer,
disableSmoothLines();
}
if ((renderFlags & ShowBoundaries) != 0)
{
glColor4f(0.33f, 0.0, 0.66f, 1.0f);
glDisable(GL_TEXTURE_2D);
if ((renderFlags & ShowSmoothLines) != 0)
enableSmoothLines();
if (universe.getBoundaries() != NULL)
universe.getBoundaries()->render();
if ((renderFlags & ShowSmoothLines) != 0)
disableSmoothLines();
}
if ((labelMode & GalaxyLabels) != 0 && universe.getGalaxyCatalog() != NULL)
labelGalaxies(*universe.getGalaxyCatalog(), observer);
if ((labelMode & StarLabels) != 0 && universe.getStarCatalog() != NULL)

View File

@ -69,6 +69,7 @@ class Renderer
ShowEclipseShadows = 0x0400,
ShowStarsAsPoints = 0x0800,
ShowRingShadows = 0x1000,
ShowBoundaries = 0x2000,
};
int getRenderFlags() const;

View File

@ -22,7 +22,8 @@ Universe::Universe() :
starCatalog(NULL),
solarSystemCatalog(NULL),
galaxyCatalog(NULL),
asterisms(NULL)
asterisms(NULL),
boundaries(NULL)
{
}
@ -76,6 +77,17 @@ void Universe::setAsterisms(AsterismList* _asterisms)
}
ConstellationBoundaries* Universe::getBoundaries() const
{
return boundaries;
}
void Universe::setBoundaries(ConstellationBoundaries* _boundaries)
{
boundaries = _boundaries;
}
// Return the planetary system of a star, or NULL if it has no planets.
SolarSystem* Universe::getSolarSystem(const Star* star) const
{

View File

@ -17,6 +17,7 @@
#include <celengine/solarsys.h>
#include <celengine/galaxy.h>
#include <celengine/asterism.h>
#include <celengine/boundaries.h>
#include <celengine/selection.h>
@ -34,6 +35,8 @@ class Universe
void setGalaxyCatalog(GalaxyList*);
AsterismList* getAsterisms() const;
void setAsterisms(AsterismList*);
ConstellationBoundaries* getBoundaries() const;
void setBoundaries(ConstellationBoundaries*);
Selection pick(const UniversalCoord& origin,
const Vec3f& direction,
@ -66,6 +69,7 @@ class Universe
SolarSystemCatalog* solarSystemCatalog;
GalaxyList* galaxyCatalog;
AsterismList* asterisms;
ConstellationBoundaries* boundaries;
};
#endif // UNIVERSE_H_

View File

@ -531,7 +531,12 @@ void CelestiaCore::charEntered(char c)
{
case '\001': // Ctrl+A
renderer->setRenderFlags(renderer->getRenderFlags() ^ Renderer::ShowAtmospheres);
notifyWatchers(CelestiaWatcher::RenderFlags);
notifyWatchers(RenderFlagsChanged);
break;
case '\002': // Ctrl+B
renderer->setRenderFlags(renderer->getRenderFlags() ^ Renderer::ShowBoundaries);
notifyWatchers(RenderFlagsChanged);
break;
case '\n':
@ -541,12 +546,12 @@ void CelestiaCore::charEntered(char c)
case '\014': // Ctrl+L
renderer->setRenderFlags(renderer->getRenderFlags() ^ Renderer::ShowNightMaps);
notifyWatchers(CelestiaWatcher::RenderFlags);
notifyWatchers(RenderFlagsChanged);
break;
case '\005': // Ctrl+E
renderer->setRenderFlags(renderer->getRenderFlags() ^ Renderer::ShowEclipseShadows);
notifyWatchers(CelestiaWatcher::RenderFlags);
notifyWatchers(RenderFlagsChanged);
break;
case '\020': // Ctrl+P
@ -556,7 +561,7 @@ void CelestiaCore::charEntered(char c)
case '\023': // Ctrl+S
renderer->setRenderFlags(renderer->getRenderFlags() ^ Renderer::ShowStarsAsPoints);
notifyWatchers(CelestiaWatcher::RenderFlags);
notifyWatchers(RenderFlagsChanged);
break;
case '\026': // Ctrl+V
@ -571,7 +576,7 @@ void CelestiaCore::charEntered(char c)
case '\030': // Ctrl+X
renderer->setRenderFlags(renderer->getRenderFlags() ^ Renderer::ShowSmoothLines);
notifyWatchers(CelestiaWatcher::RenderFlags);
notifyWatchers(RenderFlagsChanged);
break;
case '\033': // Escape
@ -627,7 +632,7 @@ void CelestiaCore::charEntered(char c)
case '/':
renderer->setRenderFlags(renderer->getRenderFlags() ^ Renderer::ShowDiagrams);
notifyWatchers(CelestiaWatcher::RenderFlags);
notifyWatchers(RenderFlagsChanged);
break;
case '0':
@ -648,17 +653,17 @@ void CelestiaCore::charEntered(char c)
case ';':
renderer->setRenderFlags(renderer->getRenderFlags() ^ Renderer::ShowCelestialSphere);
notifyWatchers(CelestiaWatcher::RenderFlags);
notifyWatchers(RenderFlagsChanged);
break;
case '=':
renderer->setLabelMode(renderer->getLabelMode() ^ Renderer::ConstellationLabels);
notifyWatchers(CelestiaWatcher::LabelFlags);
notifyWatchers(LabelFlagsChanged);
break;
case 'B':
renderer->setLabelMode(renderer->getLabelMode() ^ Renderer::StarLabels);
notifyWatchers(CelestiaWatcher::LabelFlags);
notifyWatchers(LabelFlagsChanged);
break;
case 'C':
@ -672,7 +677,7 @@ void CelestiaCore::charEntered(char c)
case 'E':
renderer->setLabelMode(renderer->getLabelMode() ^ Renderer::GalaxyLabels);
notifyWatchers(CelestiaWatcher::LabelFlags);
notifyWatchers(LabelFlagsChanged);
break;
case 'F':
@ -691,7 +696,7 @@ void CelestiaCore::charEntered(char c)
case 'I':
renderer->setRenderFlags(renderer->getRenderFlags() ^ Renderer::ShowCloudMaps);
notifyWatchers(CelestiaWatcher::RenderFlags);
notifyWatchers(RenderFlagsChanged);
break;
case 'J':
@ -709,22 +714,22 @@ void CelestiaCore::charEntered(char c)
case 'M':
renderer->setLabelMode(renderer->getLabelMode() ^ Renderer::MoonLabels);
notifyWatchers(CelestiaWatcher::LabelFlags);
notifyWatchers(LabelFlagsChanged);
break;
case 'N':
renderer->setLabelMode(renderer->getLabelMode() ^ Renderer::SpacecraftLabels);
notifyWatchers(CelestiaWatcher::LabelFlags);
notifyWatchers(LabelFlagsChanged);
break;
case 'O':
renderer->setRenderFlags(renderer->getRenderFlags() ^ Renderer::ShowOrbits);
notifyWatchers(CelestiaWatcher::RenderFlags);
notifyWatchers(RenderFlagsChanged);
break;
case 'P':
renderer->setLabelMode(renderer->getLabelMode() ^ Renderer::PlanetLabels);
notifyWatchers(CelestiaWatcher::LabelFlags);
notifyWatchers(LabelFlagsChanged);
break;
case 'Q':
@ -751,7 +756,7 @@ void CelestiaCore::charEntered(char c)
case 'U':
renderer->setRenderFlags(renderer->getRenderFlags() ^ Renderer::ShowGalaxies);
notifyWatchers(CelestiaWatcher::RenderFlags);
notifyWatchers(RenderFlagsChanged);
break;
case 'V':
@ -760,7 +765,7 @@ void CelestiaCore::charEntered(char c)
case 'W':
renderer->setLabelMode(renderer->getLabelMode() ^ Renderer::AsteroidLabels);
notifyWatchers(CelestiaWatcher::LabelFlags);
notifyWatchers(LabelFlagsChanged);
break;
case 'X':
@ -783,7 +788,7 @@ void CelestiaCore::charEntered(char c)
if (sim->getFaintestVisible() > 1.0f)
{
setFaintest(sim->getFaintestVisible() - 0.5f);
notifyWatchers(CelestiaWatcher::Faintest);
notifyWatchers(FaintestChanged);
}
break;
@ -795,7 +800,7 @@ void CelestiaCore::charEntered(char c)
if (sim->getFaintestVisible() < 12.0f)
{
setFaintest(sim->getFaintestVisible() + 0.5f);
notifyWatchers(CelestiaWatcher::Faintest);
notifyWatchers(FaintestChanged);
}
break;
@ -808,7 +813,7 @@ void CelestiaCore::charEntered(char c)
renderer->setAmbientLightLevel(renderer->getAmbientLightLevel() - 0.05f);
else
renderer->setAmbientLightLevel(0.0f);
notifyWatchers(CelestiaWatcher::AmbientLight);
notifyWatchers(AmbientLightChanged);
break;
case '}':
@ -816,7 +821,7 @@ void CelestiaCore::charEntered(char c)
renderer->setAmbientLightLevel(renderer->getAmbientLightLevel() + 0.05f);
else
renderer->setAmbientLightLevel(1.0f);
notifyWatchers(CelestiaWatcher::AmbientLight);
notifyWatchers(AmbientLightChanged);
break;
case '~':
@ -1631,6 +1636,20 @@ bool CelestiaCore::initSimulation()
}
}
if (config->boundariesFile != "")
{
ifstream boundariesFile(config->boundariesFile.c_str(), ios::in);
if (!boundariesFile.good())
{
warning("Error opening constellation boundaries files.");
}
else
{
ConstellationBoundaries* boundaries = ReadBoundaries(boundariesFile);
universe->setBoundaries(boundaries);
}
}
// Load initialization script
if (config->initScriptFile != "")
{
@ -1864,7 +1883,7 @@ int CelestiaCore::getTextEnterMode() const
void CelestiaCore::setTimeZoneBias(int bias)
{
timeZoneBias = bias;
notifyWatchers(CelestiaWatcher::TimeZone);
notifyWatchers(TimeZoneChanged);
}
@ -1888,7 +1907,7 @@ int CelestiaCore::getHudDetail()
void CelestiaCore::setHudDetail(int newHudDetail)
{
hudDetail = newHudDetail%3;
notifyWatchers(CelestiaWatcher::VerbosityLevel);
notifyWatchers(VerbosityLevelChanged);
}
@ -1930,6 +1949,8 @@ bool CelestiaCore::isRecording()
return recording;
}
#if 1
void CelestiaCore::addWatcher(CelestiaWatcher* watcher)
{
assert(watcher != NULL);
@ -1949,20 +1970,7 @@ void CelestiaCore::notifyWatchers(int property)
for (vector<CelestiaWatcher*>::iterator iter = watchers.begin();
iter != watchers.end(); iter++)
{
(*iter)->notifyChange(property);
(*iter)->notifyChange(this, property);
}
}
CelestiaWatcher::CelestiaWatcher(CelestiaCore* _appCore) :
appCore(_appCore)
{
if (appCore != NULL)
appCore->addWatcher(this);
}
CelestiaWatcher::~CelestiaWatcher()
{
if (appCore != NULL)
appCore->removeWatcher(this);
}
#endif

View File

@ -12,6 +12,8 @@
// #include "gl.h"
#include <celutil/timer.h>
#include <celutil/watcher.h>
#include <celutil/watchable.h>
#include <celengine/solarsys.h>
#include <celengine/overlay.h>
#include <celengine/command.h>
@ -27,9 +29,13 @@
#include "moviecapture.h"
class CelestiaWatcher;
// class CelestiaWatcher;
class CelestiaCore;
class CelestiaCore
typedef Watcher<CelestiaCore> CelestiaWatcher;
class CelestiaCore // : public Watchable<CelestiaCore>
{
public:
enum {
@ -95,6 +101,16 @@ class CelestiaCore
KeyCount = 128,
};
enum
{
LabelFlagsChanged = 1,
RenderFlagsChanged = 2,
VerbosityLevelChanged = 4,
TimeZoneChanged = 8,
AmbientLightChanged = 16,
FaintestChanged = 32,
};
typedef void (*ContextMenuFunc)(float, float, Selection);
public:
@ -239,27 +255,4 @@ class CelestiaCore
std::vector<CelestiaWatcher*> watchers;
};
class CelestiaWatcher
{
public:
CelestiaWatcher(CelestiaCore* _appCore);
virtual ~CelestiaWatcher();
virtual void notifyChange(int) = 0;
enum
{
LabelFlags = 1,
RenderFlags = 2,
VerbosityLevel = 4,
TimeZone = 8,
AmbientLight = 16,
Faintest = 32,
};
private:
CelestiaCore* appCore;
};
#endif // _CELESTIACORE_H_

View File

@ -61,6 +61,7 @@ CelestiaConfig* ReadCelestiaConfig(string filename)
configParams->getString("InitScript", config->initScriptFile);
configParams->getString("DemoScript", config->demoScriptFile);
configParams->getString("AsterismsFile", config->asterismsFile);
configParams->getString("BoundariesFile", config->boundariesFile);
configParams->getString("GalaxyCatalog", config->galaxyCatalog);
configParams->getString("StarDatabase", config->starDatabaseFile);
configParams->getString("StarNameDatabase", config->starNamesFile);

View File

@ -23,6 +23,7 @@ struct CelestiaConfig
std::string galaxyCatalog;
std::vector<std::string> labelledStars;
std::string asterismsFile;
std::string boundariesFile;
float faintestVisible;
std::string favoritesFile;
std::string initScriptFile;