forked from scp-fs2open/fs2open.github.com
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRingVolume.cpp
More file actions
33 lines (25 loc) · 1.42 KB
/
Copy pathRingVolume.cpp
File metadata and controls
33 lines (25 loc) · 1.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "RingVolume.h"
#include "math/vecmat.h"
namespace particle {
RingVolume::RingVolume() : m_radius(1.f), m_onEdge(false), m_modular_curve_instance(m_modular_curves.create_instance()) { };
RingVolume::RingVolume(float radius, bool onEdge) : m_radius(radius), m_onEdge(onEdge), m_modular_curve_instance(m_modular_curves.create_instance()) { };
vec3d RingVolume::sampleRandomPoint(const matrix &orientation, decltype(ParticleEffect::modular_curves_definition)::input_type_t source, float particlesFraction, const EffectHost& /*host*/) {
auto curveSource = std::tuple_cat(source, std::make_tuple(particlesFraction));
vec3d pos;
// get an unbiased random point in the sphere
vm_vec_random_in_circle(&pos, &vmd_zero_vector, &orientation, m_radius * m_modular_curves.get_output(VolumeModularCurveOutput::RADIUS, curveSource, &m_modular_curve_instance), m_onEdge);
return pointCompensateForOffsetAndRotOffset(pos, orientation,
m_modular_curves.get_output_or_default(VolumeModularCurveOutput::OFFSET_ROT, curveSource, 0.f, &m_modular_curve_instance),
m_modular_curves.get_output_or_default(VolumeModularCurveOutput::POINT_TO_ROT, curveSource, 0.f, &m_modular_curve_instance));
}
void RingVolume::parse() {
if (optional_string("+Radius:")) {
stuff_float(&m_radius);
}
if (optional_string("+On Edge:")) {
stuff_boolean(&m_onEdge);
}
ParticleVolume::parseCommon();
m_modular_curves.parse("$Volume Curve:");
}
}