Merge branch 'master' into blender2.8
[blender.git] / source / blender / blenkernel / BKE_effect.h
index f12c55e762c8f2455efa9a175b928587e166d112..9ba1bbdee07f81aea6b274d0e80562f15d2f84cf 100644 (file)
 struct Object;
 struct Scene;
 struct ListBase;
-struct Group;
+struct Collection;
 struct ParticleSimulationData;
 struct ParticleData;
 struct ParticleKey;
+struct Depsgraph;
+struct ViewLayer;
 
-struct EffectorWeights *BKE_effector_add_weights(struct Group *group);
+struct EffectorWeights *BKE_effector_add_weights(struct Collection *collection);
 
 /* Input to effector code */
 typedef struct EffectedPoint {
@@ -92,6 +94,7 @@ typedef struct EffectorData {
 typedef struct EffectorCache {
        struct EffectorCache *next, *prev;
 
+       struct Depsgraph *depsgraph;
        struct Scene *scene;
        struct Object *ob;
        struct ParticleSystem *psys;
@@ -108,13 +111,37 @@ typedef struct EffectorCache {
        int flag;
 } EffectorCache;
 
+typedef struct EffectorRelation {
+       struct EffectorRelation *next, *prev;
+
+       struct Object *ob;
+       struct ParticleSystem *psys;
+       struct PartDeflect *pd;
+} EffectorRelation;
+
+
 struct PartDeflect *BKE_partdeflect_new(int type);
 void                BKE_partdeflect_free(struct PartDeflect *pd);
 
-struct ListBase *pdInitEffectors(struct Scene *scene, struct Object *ob_src, struct ParticleSystem *psys_src, struct EffectorWeights *weights, bool for_simulation);
-void            pdEndEffectors(struct ListBase **effectors);
-void            pdPrecalculateEffectors(struct ListBase *effectors);
-void            pdDoEffectors(struct ListBase *effectors, struct ListBase *colliders, struct EffectorWeights *weights, struct EffectedPoint *point, float *force, float *impulse);
+struct ListBase *BKE_effector_relations_create(
+        struct Depsgraph *depsgraph,
+        struct ViewLayer *view_layer,
+        struct Collection *collection);
+void BKE_effector_relations_free(struct ListBase *lb);
+
+struct ListBase *BKE_effectors_create(
+        struct Depsgraph *depsgraph,
+        struct Object *ob_src,
+        struct ParticleSystem *psys_src,
+        struct EffectorWeights *weights);
+void BKE_effectors_apply(
+        struct ListBase *effectors,
+        struct ListBase *colliders,
+        struct EffectorWeights *weights,
+        struct EffectedPoint *point,
+        float *force,
+        float *impulse);
+void BKE_effectors_free(struct ListBase *lb);
 
 void pd_point_from_particle(struct ParticleSimulationData *sim, struct ParticleData *pa, struct ParticleKey *state, struct EffectedPoint *point);
 void pd_point_from_loc(struct Scene *scene, float *loc, float *vel, int index, struct EffectedPoint *point);