76 lines
1.8 KiB
C++
76 lines
1.8 KiB
C++
#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());
|
|
}
|
|
}
|
|
|
|
};
|