Skip to content

Commit 0bf632c

Browse files
authored
Add apparent size input for particle source curve (#6947)
* functional method * add input
1 parent 5ea4a4c commit 0bf632c

File tree

4 files changed

+17
-6
lines changed

4 files changed

+17
-6
lines changed

code/particle/ParticleEffect.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ ParticleEffect::ParticleEffect(SCP_string name,
124124
m_particleChance(particleChance),
125125
m_distanceCulled(distanceCulled) {}
126126

127-
float ParticleEffect::getApproximateVisualSize(const vec3d& pos) const {
127+
float ParticleEffect::getApproximatePixelSize(const vec3d& pos) const {
128128
float distance_to_eye = vm_vec_dist(&Eye_position, &pos);
129129

130130
return convert_distance_and_diameter_to_pixel_size(

code/particle/ParticleEffect.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "utils/RandomRange.h"
1010
#include "utils/id.h"
1111
#include "utils/modular_curves.h"
12+
#include "graphics/2d.h"
1213

1314
#include <optional>
1415

@@ -201,7 +202,7 @@ class ParticleEffect {
201202

202203
bool isOnetime() const { return m_duration == Duration::ONETIME; }
203204

204-
float getApproximateVisualSize(const vec3d& pos) const;
205+
float getApproximatePixelSize(const vec3d& pos) const;
205206

206207
constexpr static auto modular_curves_definition = make_modular_curve_definition<ParticleSource, ParticleCurvesOutput>(
207208
std::array {
@@ -243,7 +244,11 @@ class ParticleEffect {
243244
std::pair {"Spawntime Left", modular_curves_functional_full_input<&ParticleSource::getEffectRemainingTime>{}},
244245
std::pair {"Time Running", modular_curves_functional_full_input<&ParticleSource::getEffectRunningTime>{}})
245246
.derive_modular_curves_input_only_subset<vec3d>( //Sampled spawn position
246-
std::pair {"Apparent Visual Size At Emitter", modular_curves_functional_full_input<&ParticleSource::getEffectVisualSize>{}}
247+
std::pair {"Pixel Size At Emitter", modular_curves_functional_full_input<&ParticleSource::getEffectPixelSize>{}},
248+
std::pair {"Apparent Size At Emitter", modular_curves_math_input<
249+
modular_curves_functional_full_input<&ParticleSource::getEffectPixelSize>,
250+
modular_curves_global_submember_input<gr_screen, &screen::max_w>,
251+
ModularCurvesMathOperators::division>{}}
247252
);
248253

249254
MODULAR_CURVE_SET(m_modular_curves, modular_curves_definition);

code/particle/ParticleSource.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,11 @@ float ParticleSource::getEffectRunningTime(const std::tuple<const ParticleSource
110110
return i2fl(timestamp_get_delta(timing.m_startTimestamp, timing.m_nextCreation)) / i2fl(MILLISECONDS_PER_SECOND);
111111
}
112112

113-
float ParticleSource::getEffectVisualSize(const std::tuple<const ParticleSource&, const size_t&, const vec3d&>& source) {
114-
return std::get<0>(source).getEffect()[std::get<1>(source)].getApproximateVisualSize(std::get<2>(source));
113+
float ParticleSource::getEffectPixelSize(const std::tuple<const ParticleSource&, const size_t&, const vec3d&>& source) {
114+
return std::get<0>(source).getEffect()[std::get<1>(source)].getApproximatePixelSize(std::get<2>(source));
115+
}
116+
117+
float ParticleSource::getEffectApparentSize(const std::tuple<const ParticleSource&, const size_t&, const vec3d&>& source) {
118+
return i2fl(std::get<0>(source).getEffect()[std::get<1>(source)].getApproximatePixelSize(std::get<2>(source))) / i2fl(gr_screen.max_w);
115119
}
116120
}

code/particle/ParticleSource.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,9 @@ class ParticleSource {
8080

8181
static float getEffectRunningTime(const std::tuple<const ParticleSource&, const size_t&>& source);
8282

83-
static float getEffectVisualSize(const std::tuple<const ParticleSource&, const size_t&, const vec3d&>& source);
83+
static float getEffectPixelSize(const std::tuple<const ParticleSource&, const size_t&, const vec3d&>& source);
84+
85+
static float getEffectApparentSize(const std::tuple<const ParticleSource&, const size_t&, const vec3d&>& source);
8486
public:
8587
ParticleSource();
8688

0 commit comments

Comments
 (0)