summaryrefslogtreecommitdiff
path: root/c++/particle/particle.hpp
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2025-06-05 13:09:07 +0200
committerClaudius "keldu" Holeksa <mail@keldu.de>2025-06-05 13:09:07 +0200
commit9e37ff62b668694f705a8d132469f40ead9f6f0f (patch)
treeac486a9b93376fb10ae966e65b9724e46f1b00d2 /c++/particle/particle.hpp
parent4a291705f46086d5adcf68de6d6d1441c4b9e4f9 (diff)
Dangling changes
Diffstat (limited to 'c++/particle/particle.hpp')
-rw-r--r--c++/particle/particle.hpp33
1 files changed, 28 insertions, 5 deletions
diff --git a/c++/particle/particle.hpp b/c++/particle/particle.hpp
index 1c7b241..35196ce 100644
--- a/c++/particle/particle.hpp
+++ b/c++/particle/particle.hpp
@@ -30,10 +30,10 @@ using Particle = Struct<
>;
}
-template<typename T, uint64_t D, typename Particle>
+template<typename T, uint64_t D, typename ParticleCollision = sch::ParticleMask<T,D> >
class particle_system {
private:
- saw::data<sch::Array<Particle, D>> particles_;
+ saw::data<sch::Array<sch::Particle<T,D>>> particles_;
void verlet_step(saw::data<sch::Particle<T,D>>& particle, saw::data<T> time_step_delta){
auto& body = particle.template get<"rigid_body">();
@@ -56,10 +56,26 @@ private:
pos = pos_new;
}
public:
+ /**
+ * Add particle to this class and return an id representing this particle
+ */
+ saw::error_or<saw::data<sch::UInt64>> add_particle(saw::data<sch::Particle<T,D>> particle__){
+ auto size = particles_.size();
+ auto eov = particles_.add(std::move(particle__));
+ if(eov.is_error()){
+ return std::move(eov.get_error());
+ }
- void step(T time_step_delta){
- for(auto& iter : particles_){
- verlet_step(time_step_delta);
+ return size;
+ }
+
+ saw::data<sch::Particle<T,D>>& get_particle(saw::data<sch::UInt64> id){
+
+ }
+
+ void step(saw::data<T> time_step_delta){
+ for(saw::data<sch::UInt64> i{0u}; i < particles_.size(); ++i){
+ verlet_step(particles_.at(i), time_step_delta);
}
}
@@ -68,6 +84,13 @@ public:
for(auto& iter : particles_){
}
}
+
+ /**
+ * Mostly meant for unforeseen use cases.
+ */
+ saw::data<sch::Particle<T,D>>& at(saw::data<sch::UInt64> i){
+ return particles_.at(i);
+ }
};
}
}