Files
2018-07-17 14:15:37 +02:00

88 lines
2.7 KiB
ActionScript

import constructible;
void drawConstructible(Constructible@ cons, const recti& pos, bool isBox = false) {
//Draw design model
if(cons.dsg !is null) {
recti shipPos;
if(cons.dsg.hull.backgroundScale != 1.0)
shipPos = recti_centered(pos, vec2i(double(pos.width) * cons.dsg.hull.backgroundScale,
double(pos.height) * cons.dsg.hull.backgroundScale));
else
shipPos = pos;
shader::CUTOFF_PCT = cons.progress;
const Model@ baseModel = cons.dsg.hull.model;
const Material@ baseMaterial = cons.dsg.hull.material;
quaterniond rot = quaterniond_fromAxisAngle(vec3d_front(), -0.8 * pi);
Material frontMat(baseMaterial);
@frontMat.shader = shader::CutOff;
frontMat.depthTest = DT_Always;
Material backMat(baseMaterial);
@backMat.shader = shader::WireframeCutOff;
backMat.drawMode = DM_Line;
backMat.depthTest = DT_Always;
if(isBox) {
Color lCol = cons.dsg.color;
lCol.a = 0x20;
Color mCol = cons.dsg.color;
mCol.a = 0x12;
Color dCol = cons.dsg.color;
dCol.a = 0x05;
drawRectangle(pos, mCol, lCol, mCol, dCol);
drawRectangle(pos.padded(0, 0, (1.f - cons.progress) * pos.width, 0), Color(0xffffff14));
}
baseModel.draw(backMat, shipPos.padded(2), rot);
baseModel.draw(frontMat, shipPos.padded(2), rot);
}
else if(cons.orbital !is null) {
shader::CUTOFF_PCT = cons.progress;
const Model@ baseModel = cons.orbital.model;
const Material@ baseMaterial = cons.orbital.material;
quaterniond rot = quaterniond();
Material frontMat(baseMaterial);
@frontMat.shader = shader::CutOff;
frontMat.depthTest = DT_Always;
Material backMat(baseMaterial);
@backMat.shader = shader::WireframeCutOff;
backMat.drawMode = DM_Line;
backMat.depthTest = DT_Always;
if(isBox)
drawRectangle(pos.padded(0, 0, (1.f - cons.progress) * pos.width, 0), Color(0xffffff14));
baseModel.draw(backMat, pos.padded(2), rot);
baseModel.draw(frontMat, pos.padded(2), rot);
}
else {
if(isBox)
drawRectangle(pos.padded(0, 0, (1.f - cons.progress) * pos.width, 0), Color(0xffffff14));
}
}
void drawConstructible(Constructible@ cons, const recti& pos, const Font@ ft) {
Color nameCol(0xffffffff);
if(!cons.started)
nameCol = Color(0xff0000ff);
int sz = ft.getLineHeight() * 2 + 6;
ft.draw(pos=pos.resized(0, sz, 0.0, 1.0),
text=cons.name, color=nameCol, horizAlign=0.5, vertAlign=0.0,
stroke=colors::Black);
string prog = toString(cons.progress * 100.f, 0)+"%";
if(cons.type == CT_DryDock)
prog += " / "+toString(cons.pct * 100.f, 0)+"%";
ft.draw(pos=pos.resized(0, sz - ft.getLineHeight(), 0.0, 1.0),
text=prog, color=Color(0xffffffff), horizAlign=0.5, vertAlign=0.0,
stroke=colors::Black);
drawConstructible(cons, pos.resized(0, pos.size.height - sz + 6));
}