Open source Star Ruler 2 source code!

This commit is contained in:
Lucas de Vries
2018-07-17 14:15:37 +02:00
commit cc307720ff
4342 changed files with 2365070 additions and 0 deletions
+75
View File
@@ -0,0 +1,75 @@
#include "scene/billboard_node.h"
#include "render/driver.h"
namespace scene {
BillboardNode::BillboardNode(const render::RenderState* Material, double Width)
: material(Material), width(Width)
{
setFlag(NF_NoMatrix, true);
if(Material->baseMat != render::MAT_Solid)
setFlag(NF_Transparent, true);
}
void BillboardNode::setWidth(double Width) {
if(width != Width)
width = Width;
}
bool BillboardNode::preRender(render::RenderDriver& driver) {
auto fromCamera = abs_position - driver.cam_pos;
if(fromCamera.dot(driver.cam_facing) > 0) {
sortDistance = fromCamera.getLength();
return true;
}
else {
return false;
}
}
void BillboardNode::render(render::RenderDriver& driver) {
driver.switchToRenderState(*material);
driver.drawBillboard(abs_position, width * abs_scale);
}
SpriteNode::SpriteNode(const render::Sprite& sprt, double Width)
: sprite(sprt), width(Width)
{
setFlag(NF_NoMatrix, true);
if(sprt.mat) {
if(sprt.mat->baseMat != render::MAT_Solid)
setFlag(NF_Transparent, true);
}
else if(sprt.sheet) {
if(sprt.sheet->material.baseMat != render::MAT_Solid)
setFlag(NF_Transparent, true);
}
}
void SpriteNode::setWidth(double Width) {
if(width != Width)
width = Width;
}
bool SpriteNode::preRender(render::RenderDriver& driver) {
auto fromCamera = abs_position - driver.cam_pos;
if(fromCamera.dot(driver.cam_facing) > 0) {
sortDistance = fromCamera.getLength();
return true;
}
else {
return false;
}
}
void SpriteNode::render(render::RenderDriver& driver) {
if(sprite.mat) {
driver.switchToRenderState(*sprite.mat);
driver.drawBillboard(abs_position, width * abs_scale);
}
else {
driver.drawBillboard(abs_position, width * abs_scale, sprite.sheet->material, sprite.sheet->getSource(sprite.index), 0, Color());
}
}
};