Lephisto/src/planet.cpp
Allanis ec2479eb80 [Add] Ship info screen with more ship stats.
[Change] Made the ship angular velocity damping less... broken.
2017-11-12 22:10:26 +00:00

76 lines
1.6 KiB
C++

#include "libs.h"
#include "planet.h"
#include "frame.h"
#include "l3d.h"
Planet::Planet(StarSystem::SBody::SubType subtype) : Body() {
m_radius = 6378135.0;
m_pos = vector3d(0, 0, 0);
m_geom = dCreateSphere(0, m_radius);
dGeomSetData(m_geom, static_cast<Body*>(this));
m_subtype = subtype;
}
Planet::~Planet(void) {
dGeomDestroy(m_geom);
}
vector3d Planet::GetPosition(void) {
return m_pos;
}
void Planet::SetPosition(vector3d p) {
m_pos = p;
dGeomSetPosition(m_geom, p.x, p.y, p.z);
}
void Planet::TransformToModelCoords(const Frame* camFrame) {
vector3d fpos = GetPositionRelTo(camFrame);
glTranslatef(m_pos[0]+fpos.x, m_pos[1]+fpos.y, m_pos[2]+fpos.z);
}
void Planet::SetRadius(double radius) {
m_radius = radius;
dGeomSphereSetRadius(m_geom, radius);
}
void Planet::Render(const Frame* a_camFrame) {
glPushMatrix();
glDisable(GL_DEPTH_TEST);
double rad = m_radius;
vector3d fpos = GetPositionRelTo(a_camFrame);
double apparent_size = rad / fpos.Length();
double len = fpos.Length();
while(len > 10000.0f) {
rad *= 0.25;
fpos = 0.25*fpos;
len *= 0.25;
}
glTranslatef(fpos.x, fpos.y, fpos.z);
glColor3f(1, 1, 1);
if(apparent_size < 0.001) {
glDisable(GL_LIGHTING);
glPointSize(1.0);
glBegin(GL_POINTS);
glVertex3f(0, 0, 0);
glEnd();
glEnable(GL_LIGHTING);
} else {
gluSphere(L3D::gluQuadric, rad, 100, 100);
}
glEnable(GL_DEPTH_TEST);
glPopMatrix();
}
void Planet::SetFrame(Frame* f) {
if(GetFrame()) GetFrame()->RemoveGeom(m_geom);
Body::SetFrame(f);
if(f) f->AddGeom(m_geom);
}