mirror of
https://github.com/scp-fs2open/fs2open.github.com.git
synced 2026-11-10 04:31:34 -10:00
If anything less than or equal to 0 was specified it would trigger some kind of an assert in the standard library since that is not a valid value for a normal distribution. Now a parse warning is generated and a safe default value is used. This fixes #2269.
64 lines
1.2 KiB
C++
64 lines
1.2 KiB
C++
#ifndef CONE_GENERATOR_EFFECT_H
|
|
#define CONE_GENERATOR_EFFECT_H
|
|
#pragma once
|
|
|
|
#include "globalincs/pstypes.h"
|
|
#include "utils/RandomRange.h"
|
|
|
|
namespace particle {
|
|
namespace effects {
|
|
|
|
/**
|
|
* @ingroup particleEffects
|
|
*/
|
|
class ConeShape {
|
|
::util::NormalFloatRange m_normalDeviation;
|
|
public:
|
|
ConeShape() {}
|
|
|
|
matrix getDisplacementMatrix() {
|
|
angles angs;
|
|
|
|
angs.b = 0.0f;
|
|
|
|
angs.h = m_normalDeviation.next();
|
|
angs.p = m_normalDeviation.next();
|
|
|
|
matrix m;
|
|
|
|
vm_angles_2_matrix(&m, &angs);
|
|
|
|
return m;
|
|
}
|
|
|
|
void parse(bool nocreate) {
|
|
if (internal::required_string_if_new("+Deviation:", nocreate)) {
|
|
float deviation;
|
|
stuff_float(&deviation);
|
|
|
|
if (deviation < 0.001f) {
|
|
error_display(0, "A standard deviation of %f is not valid. Must be greater than 0. Defaulting to 1.",
|
|
deviation);
|
|
deviation = 1.0f;
|
|
}
|
|
|
|
m_normalDeviation = ::util::NormalFloatRange(0.0, fl_radians(deviation));
|
|
}
|
|
}
|
|
|
|
EffectType getType() const { return EffectType::Cone; }
|
|
|
|
/**
|
|
* @brief Specifies if the velocities of the particles should be scaled with the deviation from the direction
|
|
* @return @c true
|
|
*/
|
|
static SCP_CONSTEXPR bool scale_velocity_deviation() {
|
|
return true;
|
|
}
|
|
};
|
|
|
|
}
|
|
}
|
|
|
|
#endif // CONE_GENERATOR_EFFECT_H
|