[Change] Actually set planet sizes (but still 1 size per type).

This commit is contained in:
Allanis 2017-11-24 22:17:42 +00:00
parent 0025c8833b
commit 6e743e6027
4 changed files with 27 additions and 27 deletions

View File

@ -193,9 +193,10 @@ void L3D::MainLoop(void) {
HyperspaceTo(&s); HyperspaceTo(&s);
/* Linked list eh... Put player at planet f. */ /* Linked list eh... Put player at planet f. */
const float zpos = EARTH_RADIUS * 7;
Frame* pframe = *(++(++(++(++(Space::rootFrame->m_children.begin()))))); Frame* pframe = *(++(++(++(++(Space::rootFrame->m_children.begin())))));
player->SetFrame(pframe); player->SetFrame(pframe);
player->SetPosition(vector3d(0, 100000, 10000000.0)); player->SetPosition(vector3d(0, zpos*0.1, zpos));
for(int i = 0; i < 4; i++) { for(int i = 0; i < 4; i++) {
Ship* body = new Ship(ShipType::SLEEK/*LADYBIRD*/); Ship* body = new Ship(ShipType::SLEEK/*LADYBIRD*/);
@ -203,7 +204,7 @@ void L3D::MainLoop(void) {
snprintf(buf, sizeof(buf), "X%c-0%02d", "A"+i, i); snprintf(buf, sizeof(buf), "X%c-0%02d", "A"+i, i);
body->SetLabel(buf); body->SetLabel(buf);
body->SetFrame(pframe); body->SetFrame(pframe);
body->SetPosition(vector3d(i*2000, 100000, 10001000)); body->SetPosition(vector3d(i*2000, zpos*0.1, zpos+1000));
Space::AddBody(body); Space::AddBody(body);
} }
@ -211,7 +212,7 @@ void L3D::MainLoop(void) {
SpaceStation* body = new SpaceStation(); SpaceStation* body = new SpaceStation();
body->SetLabel("Poemi-chan's Folly"); body->SetLabel("Poemi-chan's Folly");
body->SetFrame(pframe); body->SetFrame(pframe);
body->SetPosition(vector3d(5000, 100000, 9990000.0)); body->SetPosition(vector3d(5000, zpos*0.1, zpos-10000));
Space::AddBody(body); Space::AddBody(body);
} }

View File

@ -5,9 +5,8 @@
#include "world_view.h" #include "world_view.h"
Planet::Planet(StarSystem::SBody* sbody) : Body() { Planet::Planet(StarSystem::SBody* sbody) : Body() {
radius = 6378135.0;
pos = vector3d(0, 0, 0); pos = vector3d(0, 0, 0);
geom = dCreateSphere(0, radius); geom = dCreateSphere(0, sbody->radius);
dGeomSetData(geom, static_cast<Body*>(this)); dGeomSetData(geom, static_cast<Body*>(this));
this->sbody = *sbody; this->sbody = *sbody;
this->sbody.children.clear(); this->sbody.children.clear();
@ -29,8 +28,8 @@ void Planet::SetPosition(vector3d p) {
} }
void Planet::SetRadius(double radius) { void Planet::SetRadius(double radius) {
this->radius = radius; assert(0);
dGeomSphereSetRadius(geom, radius); //dGeomSpehereSetRadius(geom, radius);
} }
static void subdivide(vector3d& v1, vector3d& v2, vector3d& v3, vector3d& v4, int depth) { static void subdivide(vector3d& v1, vector3d& v2, vector3d& v3, vector3d& v4, int depth) {
@ -551,7 +550,7 @@ void Planet::DrawGasGiant(void) {
void Planet::Render(const Frame* a_camFrame) { void Planet::Render(const Frame* a_camFrame) {
glPushMatrix(); glPushMatrix();
double rad = radius; double rad = sbody.radius;
vector3d fpos = GetPositionRelTo(a_camFrame); vector3d fpos = GetPositionRelTo(a_camFrame);
double apparent_size = rad / fpos.Length(); double apparent_size = rad / fpos.Length();

View File

@ -10,7 +10,7 @@ public:
virtual void SetPosition(vector3d p); virtual void SetPosition(vector3d p);
virtual vector3d GetPosition(void); virtual vector3d GetPosition(void);
void SetRadius(double radius); void SetRadius(double radius);
double GetRadius(void) { return radius; } double GetRadius(void) { return sbody.radius; }
virtual void Render(const Frame* camFrame); virtual void Render(const Frame* camFrame);
virtual void SetFrame(Frame* f); virtual void SetFrame(Frame* f);
virtual bool OnCollision(Body* b, Uint32 flags) { return true; } virtual bool OnCollision(Body* b, Uint32 flags) { return true; }
@ -19,7 +19,6 @@ private:
void DrawGasGiant(void); void DrawGasGiant(void);
vector3d pos; vector3d pos;
double radius;
dGeomID geom; dGeomID geom;
StarSystem::SBody sbody; StarSystem::SBody sbody;
GLuint crudDList; GLuint crudDList;

View File

@ -16,7 +16,7 @@ float StarSystem::starColors[7][3] = {
static const struct SBodySubTypeInfo { static const struct SBodySubTypeInfo {
float mass; float mass;
float radius; float radius; /* Sol radii for stars, earth radii for planets. */
const char *description; const char *description;
const char *icon; const char *icon;
float tempMin, tempMax; float tempMin, tempMax;
@ -61,59 +61,59 @@ static const struct SBodySubTypeInfo {
"icons/object_brown_dwarf.png" "icons/object_brown_dwarf.png"
}, },
{ {
0, 0, "Small gas giant", 0, 3.9, "Small gas giant",
"icons/object_planet_small_gas_giant.png" "icons/object_planet_small_gas_giant.png"
}, },
{ {
0, 0, "Medium gas giant", 0, 9.5, "Medium gas giant",
"icons/object_planet_medium_gas_giant.png" "icons/object_planet_medium_gas_giant.png"
}, },
{ {
0, 0, "Large gas giant", 0, 11.1, "Large gas giant",
"icons/object_planet_large_gas_giant.png" "icons/object_planet_large_gas_giant.png"
}, },
{ {
0, 0, "Very large gas giant", 0, 15.0, "Very large gas giant",
"icons/object_planet_large_gas_giant.png" "icons/object_planet_large_gas_giant.png"
}, },
{ {
0, 0, "Small, rocky dwarf planet", 0, 0.26, "Small, rocky dwarf planet",
"icons/object_planet_dwarf.png" "icons/object_planet_dwarf.png"
}, },
{ {
0, 0, "Small, rocky planet with a thin atmosphere", 0, 0.52, "Small, rocky planet with a thin atmosphere",
"icons/object_planet_small.png" "icons/object_planet_small.png"
}, },
{ {
0, 0, "Rocky planet with liquid water and a nitrogen atmosphere", 0, 1.0, "Rocky planet with liquid water and a nitrogen atmosphere",
"icons/object_planet_small.png" "icons/object_planet_small.png"
}, },
{ {
0, 0, "Rocky planet with a carbon dioxide atmosphere", 0, 1.0, "Rocky planet with a carbon dioxide atmosphere",
"icons/object_planet_small.png" "icons/object_planet_small.png"
}, },
{ {
0, 0, "Rocky planet with a methane atmosphere", 0, 1.0, "Rocky planet with a methane atmosphere",
"icons/object_planet_small.png" "icons/object_planet_small.png"
}, },
{ {
0, 0, "Rocky planet with running water and a thick nitrogen atmosphere", 0, 1.0, "Rocky planet with running water and a thick nitrogen atmosphere",
"icons/object_planet_small.png" "icons/object_planet_small.png"
}, },
{ {
0, 0, "Rocky planet with a thick carbon dioxide atmosphere", 0, 1.0, "Rocky planet with a thick carbon dioxide atmosphere",
"icons/object_planet_small.png" "icons/object_planet_small.png"
}, },
{ {
0, 0, "Rocky planet with a thick methane atmosphere", 0, 1.0, "Rocky planet with a thick methane atmosphere",
"icons/object_planet_small.png" "icons/object_planet_small.png"
}, },
{ {
0, 0, "Highly volcanic world", 0, 1.0, "Highly volcanic world",
"icons/object_planet_small.png" "icons/object_planet_small.png"
}, },
{ {
0, 0, "World with indigenous life and an oxygen atmosphere", 0, 1.0, "World with indigenous life and an oxygen atmosphere",
"icons/object_planet_life.png" "icons/object_planet_life.png"
} }
}; };
@ -270,7 +270,7 @@ StarSystem::StarSystem(int sector_x, int sector_y, int system_idx) {
planet->seed = rand.Int32(); planet->seed = rand.Int32();
planet->temp = 0; planet->temp = 0;
planet->parent = primary; planet->parent = primary;
planet->radius = EARTH_RADIUS; //planet->radius = EARTH_RADIUS*bodyTypeInfo[type].radius;
planet->mass = mass * EARTH_MASS; planet->mass = mass * EARTH_MASS;
planet->orbit.eccentricity = rand.pdrand(3); planet->orbit.eccentricity = rand.pdrand(3);
planet->orbit.semiMajorAxis = ((i+1)*0.1)*AU; planet->orbit.semiMajorAxis = ((i+1)*0.1)*AU;
@ -395,6 +395,7 @@ void StarSystem::SBody::PickPlanetType(SBody* star, double distToPrimary, MTRand
/* Kinda crappy. */ /* Kinda crappy. */
if((emass > 0.8) && (!rand(0,15))) type = TYPE_PLANET_HIGHLY_VOLCANIC; if((emass > 0.8) && (!rand(0,15))) type = TYPE_PLANET_HIGHLY_VOLCANIC;
} }
radius = EARTH_RADIUS*bodyTypeInfo[type].radius;
/* Generate moons. */ /* Generate moons. */
if(genMoons) { if(genMoons) {
std::vector<float>* disc = AccreteDisc(2*sqrt(emass), 0.001, rand); std::vector<float>* disc = AccreteDisc(2*sqrt(emass), 0.001, rand);
@ -407,7 +408,7 @@ void StarSystem::SBody::PickPlanetType(SBody* star, double distToPrimary, MTRand
moon->seed = rand.Int32(); moon->seed = rand.Int32();
moon->temp = 0; moon->temp = 0;
moon->parent = this; moon->parent = this;
moon->radius = EARTH_RADIUS; //moon->radius = EARTH_RADIUS*bodyTypeInfo[type].radius;
moon->mass = mass * EARTH_MASS; moon->mass = mass * EARTH_MASS;
moon->orbit.eccentricity = rand.pdrand(3); moon->orbit.eccentricity = rand.pdrand(3);
moon->orbit.semiMajorAxis = ((i+1)*0.001)*AU; moon->orbit.semiMajorAxis = ((i+1)*0.001)*AU;