v1.4.4
This commit is contained in:
commit
9c94d113d3
10260 changed files with 1237388 additions and 0 deletions
96
source/game/StarCelestialCoordinate.hpp
Normal file
96
source/game/StarCelestialCoordinate.hpp
Normal file
|
@ -0,0 +1,96 @@
|
|||
#ifndef STAR_CELESTIAL_COORDINATE_HPP
|
||||
#define STAR_CELESTIAL_COORDINATE_HPP
|
||||
|
||||
#include "StarJson.hpp"
|
||||
#include "StarVector.hpp"
|
||||
|
||||
namespace Star {
|
||||
|
||||
STAR_CLASS(CelestialCoordinate);
|
||||
|
||||
STAR_EXCEPTION(CelestialException, StarException);
|
||||
|
||||
// Specifies coordinates to either a planetary system, a planetary body, or a
|
||||
// satellite around such a planetary body. The terms here are meant to be very
|
||||
// generic, a "planetary body" could be an asteroid field, or a ship, or
|
||||
// anything in orbit around the center of mass of a specific planetary system.
|
||||
// The terms are really simply meant as a hierarchy of orbits.
|
||||
//
|
||||
// No validity checking is done here, any coordinate to any body whether it
|
||||
// exists in a specific universe or not can be expressed. isNull() simply
|
||||
// checks whether the coordinate is the result of the empty constructor, not
|
||||
// whether the coordinate points to a valid object or not.
|
||||
class CelestialCoordinate {
|
||||
public:
|
||||
// Creates the null CelestialCoordinate
|
||||
CelestialCoordinate();
|
||||
CelestialCoordinate(Vec3I location, int planetaryOrbitNumber = 0, int satelliteOrbitNumber = 0);
|
||||
explicit CelestialCoordinate(Json const& json);
|
||||
|
||||
// Is this coordanate the null coordinate?
|
||||
bool isNull() const;
|
||||
|
||||
// Does this coordinate point to an entire planetary system?
|
||||
bool isSystem() const;
|
||||
// Is this world a body whose "designated gravity buddy" is the center of a
|
||||
// planetary system?
|
||||
bool isPlanetaryBody() const;
|
||||
// Is this world a body which orbits around a planetary body?
|
||||
bool isSatelliteBody() const;
|
||||
|
||||
Vec3I location() const;
|
||||
|
||||
// Returns just the system coordinate portion of this celestial coordinate.
|
||||
CelestialCoordinate system() const;
|
||||
|
||||
// Returns just the planet portion of this celestial coordinate, throws
|
||||
// exception if this is a system coordinate.
|
||||
CelestialCoordinate planet() const;
|
||||
|
||||
// Returns the orbit number for this body. Returns 0 for system coordinates.
|
||||
int orbitNumber() const;
|
||||
|
||||
// Returns the system for a planet or the planet for a satellite. If this is
|
||||
// a system coordinate, throws an exception.
|
||||
CelestialCoordinate parent() const;
|
||||
|
||||
// Returns a coordinate to a child object at the given orbit number. If the
|
||||
// orbit number is 0, returns *this, otherwise if this is a satellite throws
|
||||
// an exception.
|
||||
CelestialCoordinate child(int orbitNumber) const;
|
||||
|
||||
// Stores coordinate in json form that can be used to reconstruct it.
|
||||
Json toJson() const;
|
||||
|
||||
// Returns coordinate in a parseable String format.
|
||||
String id() const;
|
||||
|
||||
// Returns a fakey fake distance
|
||||
double distance(CelestialCoordinate const& rhs) const;
|
||||
|
||||
// Returns a slightly different string format than id(), which is still in an
|
||||
// accepted format, but more appropriate for filenames.
|
||||
String filename() const;
|
||||
|
||||
// Returns true if not null
|
||||
explicit operator bool() const;
|
||||
|
||||
bool operator<(CelestialCoordinate const& rhs) const;
|
||||
bool operator==(CelestialCoordinate const& rhs) const;
|
||||
bool operator!=(CelestialCoordinate const& rhs) const;
|
||||
|
||||
// Prints in the same format accepted by parser. Each coordinate is unique.
|
||||
friend std::ostream& operator<<(std::ostream& os, CelestialCoordinate const& coord);
|
||||
|
||||
friend DataStream& operator>>(DataStream& ds, CelestialCoordinate& coordinate);
|
||||
friend DataStream& operator<<(DataStream& ds, CelestialCoordinate const& coordinate);
|
||||
|
||||
private:
|
||||
Vec3I m_location;
|
||||
int m_planetaryOrbitNumber;
|
||||
int m_satelliteOrbitNumber;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue