Open source Star Ruler 2 source code!
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
#include "frame_line.h"
|
||||
#include "render/driver.h"
|
||||
#include "render/vertexBuffer.h"
|
||||
#include <algorithm>
|
||||
|
||||
extern double frameLen_s;
|
||||
|
||||
namespace scene {
|
||||
FrameLineNode::FrameLineNode(const render::RenderState& material, float duration) : mat(material), interpDuration(duration), age(0), life(1000.f), fadeAge(1000.f) {
|
||||
setFlag(NF_NoMatrix, true);
|
||||
}
|
||||
|
||||
bool FrameLineNode::preRender(render::RenderDriver& driver) {
|
||||
if(frameLen_s > 0) {
|
||||
age += (float)frameLen_s;
|
||||
endPos = abs_position.interpolate(prevPos, interpDuration / frameLen_s);
|
||||
prevPos = abs_position;
|
||||
}
|
||||
|
||||
vec3d off = abs_position - driver.cam_pos;
|
||||
sortDistance = off.getLength();
|
||||
return off.dot(driver.cam_facing) > 0;
|
||||
}
|
||||
|
||||
void FrameLineNode::render(render::RenderDriver& driver) {
|
||||
auto& camPos = driver.cam_pos;
|
||||
|
||||
auto* verts = render::VertexBufferTCV::fetch(&mat)->request(1, render::PT_Lines);
|
||||
|
||||
float alpha = age > fadeAge ? 1.f - std::min((age-fadeAge)/(life-fadeAge), 1.f) : 1.f;
|
||||
|
||||
verts[0].col = startCol;
|
||||
verts[0].col.a *= alpha;
|
||||
verts[0].pos = vec3f(abs_position - camPos);
|
||||
verts[0].uv = vec2f(0,0);
|
||||
|
||||
verts[1].col = endCol;
|
||||
verts[1].col.a *= alpha;
|
||||
verts[1].pos = vec3f(endPos - camPos);
|
||||
verts[1].uv = vec2f(1,0);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user