Lephisto/src/info_view.cpp
Rtch90 fc03c9f6e3 [Fix] Fixed external view, forgot to add players external veiw translation to camera frame's position.
[Fix] Correctly apply ship masses.
[Add] A nice rotating ship in the infoview pane.
2017-11-13 22:12:02 +00:00

100 lines
2.9 KiB
C++

#include "info_view.h"
#include "l3d.h"
#include "player.h"
#include "world_view.h"
#include "ship.h"
InfoView::InfoView(void) : View() {
SetTransparency(true);
float size[2];
GetSize(size);
info1 = new Gui::Label("Some star stuff.");
Add(info1, 40, size[1]-40);
}
void InfoView::UpdateInfo(void) {
char buf[512];
std::string nfo;
const ShipType& stype = L3D::player->GetShipType();
nfo = "SHIP INFORMATION: "+std::string(stype.name);
Equip::Type e = L3D::player->m_equipment.Get(Equip::SLOT_ENGINE);
nfo += std::string("\n\nDrive system: ")+EquipType::types[e].name;
shipstats_t stats;
L3D::player->CalcStats(&stats);
snprintf(buf, sizeof(buf), "n\nCapacity: %dt\n"
"Free: %dt\n"
"Used: %dt\n"
"All-up weight: %dt", stats.max_capacity,
stats.free_capacity, stats.used_capacity,
stats.total_mass);
nfo += std::string(buf);
snprintf(buf, sizeof(buf), "\n\nHyperspace range: %.2f light years.", stats.hyperspace_range);
nfo += std::string(buf);
info1->SetText(nfo);
}
static ObjParams params = {
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f },
/* pColor[3] */
{
{ { 1.0f, 0.0f, 1.0f }, { 0, 0, 0 }, { 0, 0, 0 }, 0 },
{ { 0.8f, 0.6f, 0.5f }, { 0, 0, 0 }, { 0, 0, 0 }, 0 },
{ { 0.5f, 0.5f, 0.5f }, { 0, 0, 0 }, { 0, 0, 0 }, 0 }
},
/* pText[3][256] */
{ "IR-L33T", "ME TOO" },
};
void InfoView::Draw3D(void) {
static float rot1, rot2;
rot1 += .5*L3D::GetFrameTime();
rot2 += L3D::GetFrameTime();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-L3D::GetScrWidth() *.5, L3D::GetScrWidth()* .5,
-L3D::GetScrHeight()*.5, L3D::GetScrHeight()*.5,
L3D::GetScrWidth()* .5, 100000);
glDepthRange(-10, -100000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClearColor(0, .2, .4, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
float lightCol[] = { 1, 1, 1 };
float lightDir[] = { 1, 0, 0 };
glPushAttrib(GL_ALL_ATTRIB_BITS);
sbreSetDirLight(lightCol, lightDir);
sbreSetViewport(L3D::GetScrWidth(), L3D::GetScrHeight(),
L3D::GetScrWidth()*0.5, 5.0f, 100000.0f, 0.0f, 1.0f);
/* Psht, go away sbre. I want my own viewport! */
glViewport(L3D::GetScrWidth()/4, 0, L3D::GetScrWidth(), L3D::GetScrHeight());
Vector p; p.x = 0; p.y = 0; p.z = 100;
matrix4x4d rot = matrix4x4d::RotateXMatrix(rot1);
rot.RotateY(rot2);
Matrix m;
m.x1 = rot[0]; m.x2 = rot[4]; m.x3 = -rot[ 8];
m.y1 = rot[1]; m.y2 = rot[5]; m.y3 = -rot[ 9];
m.z1 = -rot[2]; m.z2 = -rot[6]; m.z3 = rot[10];
const ShipType& stype = L3D::player->GetShipType();
sbreRenderModel(&p, &m, stype.sbreModel, &params);
glPopAttrib();
}
void InfoView::Update(void) {
}