physics: add particle_force_generator

This commit is contained in:
Zack Buhman 2025-07-18 00:46:50 -05:00
parent 0c245870b8
commit 0efe4dc74d
2 changed files with 58 additions and 0 deletions

View File

@ -29,4 +29,35 @@ namespace physics {
particle->add_force(normalize(force) * drag_coeff); particle->add_force(normalize(force) * drag_coeff);
} }
void particle_spring::update_force(particle * particle, float duration)
{
vec3 force = particle->position - other->position;
float intensity = abs<float>(magnitude(force) - rest_length) * spring_constant;
particle->add_force(normalize(force) * -intensity);
}
void particle_anchored_spring::update_force(particle * particle, float duration)
{
vec3 force = particle->position - *anchor;
float intensity = abs<float>(magnitude(force) - rest_length) * spring_constant;
particle->add_force(normalize(force) * -intensity);
}
void particle_bungee::update_force(particle * particle, float duration)
{
vec3 force = particle->position - other->position;
float _magnitude = magnitude(force);
if (_magnitude <= rest_length)
return;
float intensity = spring_constant * (rest_length - _magnitude);
particle->add_force(normalize(force) * -intensity);
}
} }

View File

@ -44,4 +44,31 @@ namespace physics {
void update_force(particle * particle, float duration) override; void update_force(particle * particle, float duration) override;
}; };
struct particle_spring : particle_force_generator
{
physics::particle * other;
float spring_constant;
float rest_length;
void update_force(particle * particle, float duration) override;
};
struct particle_anchored_spring : particle_force_generator
{
vec3 * anchor;
float spring_constant;
float rest_length;
kk
void update_force(particle * particle, float duration) override;
};
struct particle_bungee : particle_force_generator
{
physics::particle * other;
float spring_constant;
float rest_length;
void update_force(particle * particle, float duration) override;
};
} }