mirror of
https://github.com/scp-fs2open/fs2open.github.com.git
synced 2026-11-07 08:15:59 -10:00
Fix misbehaviour of Volume Point Towards (#7535)
This commit is contained in:
1 parent
7afbed8a3b
commit
b65a92f358
7 files changed
+19
-10
No files matched your search
@@ -32,11 +32,13 @@ namespace particle {
|
||||
vec3d outpnt = point;
|
||||
|
||||
if (rotOffset.has_value()) {
|
||||
vm_vec_rotate(&outpnt, &outpnt, &orientation);
|
||||
vec3d rot = *rotOffset;
|
||||
vm_rot_point_around_line(&rot, &rot, rotOffsetRot, &vmd_zero_vector, &vmd_z_vector);
|
||||
matrix orientUse;
|
||||
vm_vector_2_matrix(&orientUse, &rot);
|
||||
vm_vec_unrotate(&outpnt, &outpnt, &orientUse);
|
||||
vm_vec_unrotate(&outpnt, &outpnt, &orientation);
|
||||
}
|
||||
if (posOffset.has_value()) {
|
||||
vec3d pos = *posOffset;
|
||||
|
||||
@@ -29,8 +29,8 @@ namespace particle {
|
||||
|
||||
//TODO
|
||||
return pointCompensateForOffsetAndRotOffset(point, orientation,
|
||||
m_modular_curves.get_output(VolumeModularCurveOutput::OFFSET_ROT, curveSource, &m_modular_curve_instance),
|
||||
m_modular_curves.get_output(VolumeModularCurveOutput::POINT_TO_ROT, curveSource, &m_modular_curve_instance));
|
||||
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 ConeVolume::parse() {
|
||||
|
||||
@@ -45,8 +45,8 @@ vec3d ModelSurfaceVolume::sampleRandomPoint(const matrix &orientation, decltype(
|
||||
}
|
||||
|
||||
return pointCompensateForOffsetAndRotOffset(point, orientation,
|
||||
m_modular_curves.get_output(VolumeModularCurveOutput::OFFSET_ROT, curveSource, &m_modular_curve_instance),
|
||||
m_modular_curves.get_output(VolumeModularCurveOutput::POINT_TO_ROT, curveSource, &m_modular_curve_instance));
|
||||
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 ModelSurfaceVolume::parse() {
|
||||
|
||||
@@ -9,8 +9,8 @@ namespace particle {
|
||||
auto curveSource = std::tuple_cat(source, std::make_tuple(particlesFraction));
|
||||
|
||||
return pointCompensateForOffsetAndRotOffset(ZERO_VECTOR, orientation,
|
||||
m_modular_curves.get_output(VolumeModularCurveOutput::OFFSET_ROT, curveSource, &m_modular_curve_instance),
|
||||
m_modular_curves.get_output(VolumeModularCurveOutput::POINT_TO_ROT, curveSource, &m_modular_curve_instance));
|
||||
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 PointVolume::parse() {
|
||||
|
||||
@@ -13,8 +13,8 @@ namespace particle {
|
||||
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(VolumeModularCurveOutput::OFFSET_ROT, curveSource, &m_modular_curve_instance),
|
||||
m_modular_curves.get_output(VolumeModularCurveOutput::POINT_TO_ROT, curveSource, &m_modular_curve_instance));
|
||||
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() {
|
||||
|
||||
@@ -43,8 +43,8 @@ namespace particle {
|
||||
}
|
||||
|
||||
return pointCompensateForOffsetAndRotOffset(pos, orientation,
|
||||
m_modular_curves.get_output(VolumeModularCurveOutput::OFFSET_ROT, curveSource, &m_modular_curve_instance),
|
||||
m_modular_curves.get_output(VolumeModularCurveOutput::POINT_TO_ROT, curveSource, &m_modular_curve_instance));
|
||||
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 SpheroidVolume::parse() {
|
||||
|
||||
@@ -647,6 +647,13 @@ public:
|
||||
return result;
|
||||
}
|
||||
|
||||
float get_output_or_default(output_enum output, const input_type& input, float default_val, const modular_curves_entry_instance* instance = nullptr) const {
|
||||
if (has_curve(output))
|
||||
return get_output(output, input, instance);
|
||||
else
|
||||
return default_val;
|
||||
}
|
||||
|
||||
void reset() {
|
||||
for (auto& curve_list : curves) {
|
||||
curve_list.clear();
|
||||
|
||||
Reference in new issue
Block a user