Open source Star Ruler 2 source code!
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
#include "scene/plane_node.h"
|
||||
#include "render/driver.h"
|
||||
|
||||
void shader_plane_minrad(float* value,unsigned short,void*) {
|
||||
if(auto* node = dynamic_cast<scene::PlaneNode*>(scene::renderingNode))
|
||||
*value = (float)node->minRad;
|
||||
else
|
||||
*value = 0.f;
|
||||
}
|
||||
|
||||
void shader_plane_maxrad(float* value,unsigned short,void*) {
|
||||
if(auto* node = dynamic_cast<scene::PlaneNode*>(scene::renderingNode))
|
||||
*value = (float)node->maxRad;
|
||||
else
|
||||
*value = 0.f;
|
||||
}
|
||||
|
||||
namespace scene {
|
||||
PlaneNode::PlaneNode(const render::RenderState* Material, double Size)
|
||||
: material(Material), minRad(-3.2f), maxRad(3.2f) {
|
||||
setFlag(NF_NoMatrix, true);
|
||||
if(Material->baseMat != render::MAT_Solid)
|
||||
setFlag(NF_Transparent, true);
|
||||
scale = Size;
|
||||
}
|
||||
|
||||
bool PlaneNode::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 PlaneNode::render(render::RenderDriver& driver) {
|
||||
driver.setTransformation(transformation);
|
||||
driver.switchToRenderState(*material);
|
||||
|
||||
vec3d verts[4];
|
||||
vec3d vsize = vec3d(scale, 0, scale);
|
||||
|
||||
vec3d topLeft = abs_position - vsize;
|
||||
vec3d botRight = abs_position + vsize;
|
||||
|
||||
verts[0] = topLeft;
|
||||
verts[1] = topLeft + vec3d(vsize.x * 2, 0, 0);
|
||||
verts[2] = botRight;
|
||||
verts[3] = botRight - vec3d(vsize.x * 2, 0, 0);
|
||||
|
||||
vec2f tcs[4] = { vec2f(0,0), vec2f(1,0), vec2f(1,1), vec2f(0,1) };
|
||||
Color colors[4] = { color, color, color, color };
|
||||
|
||||
driver.drawQuad(verts, tcs, colors);
|
||||
driver.resetTransformation();
|
||||
}
|
||||
|
||||
};
|
||||
Reference in New Issue
Block a user