2.5 - Particle Settings now Animateable
authorJoshua Leung <aligorith@gmail.com>
Wed, 24 Jun 2009 02:11:36 +0000 (02:11 +0000)
committerJoshua Leung <aligorith@gmail.com>
Wed, 24 Jun 2009 02:11:36 +0000 (02:11 +0000)
Added AnimData to ParticleSettings so that this will work. This seems to be ok in the brief tests I did, but be warned that this may not be optimal for the Particles System...

source/blender/blenkernel/intern/anim_sys.c
source/blender/blenloader/intern/readfile.c
source/blender/blenloader/intern/writefile.c
source/blender/makesdna/DNA_particle_types.h
source/blender/makesrna/intern/rna_particle.c

index 30dcb383ef629410eceac9a0ec81c9827fa2f448..441e17f3318a6aa1f1c0d3a5bdc8ff12d558986d 100644 (file)
@@ -43,6 +43,7 @@ static short id_has_animdata (ID *id)
                case ID_OB:
                case ID_CU:
                case ID_KE:
+               case ID_PA:
                case ID_MA: case ID_TE: case ID_NT:
                case ID_LA: case ID_CA: case ID_WO:
                case ID_SCE:
@@ -883,6 +884,9 @@ void BKE_animsys_evaluate_all_animation (Main *main, float ctime)
        /* meshes */
        // TODO...
        
+       /* particles */
+       EVAL_ANIM_IDS(main->particle.first, ADT_RECALC_ANIM);
+       
        /* objects */
                /* ADT_RECALC_ANIM doesn't need to be supplied here, since object AnimData gets 
                 * this tagged by Depsgraph on framechange 
index 54caad7f35b85d973336f198c011fb470c888ec5..7921740cbe865fdbb4e09ca37893f2ec11705ffd 100644 (file)
@@ -2899,7 +2899,9 @@ static void lib_link_particlesettings(FileData *fd, Main *main)
        part= main->particle.first;
        while(part) {
                if(part->id.flag & LIB_NEEDLINK) {
+                       if (part->adt) lib_link_animdata(fd, &part->id, part->adt);
                        part->ipo= newlibadr_us(fd, part->id.lib, part->ipo); // XXX depreceated - old animation system
+                       
                        part->dup_ob = newlibadr(fd, part->id.lib, part->dup_ob);
                        part->dup_group = newlibadr(fd, part->id.lib, part->dup_group);
                        part->eff_group = newlibadr(fd, part->id.lib, part->eff_group);
@@ -2912,6 +2914,7 @@ static void lib_link_particlesettings(FileData *fd, Main *main)
 
 static void direct_link_particlesettings(FileData *fd, ParticleSettings *part)
 {
+       part->adt= newdataadr(fd, part->adt);
        part->pd= newdataadr(fd, part->pd);
        part->pd2= newdataadr(fd, part->pd2);
 }
@@ -9522,6 +9525,8 @@ static void expand_particlesettings(FileData *fd, Main *mainvar, ParticleSetting
        expand_doit(fd, mainvar, part->dup_group);
        expand_doit(fd, mainvar, part->eff_group);
        expand_doit(fd, mainvar, part->bb_ob);
+       
+       expand_animdata(fd, mainvar, part->adt);
 }
 
 static void expand_group(FileData *fd, Main *mainvar, Group *group)
index 172c081570b4da3cdc0aa7723c65328843acaa6c..565e8128f8c2c048069f6f9efa349a4315180555 100644 (file)
@@ -382,6 +382,7 @@ static void writedata(WriteData *wd, int filecode, int len, void *adr)      /* do not
 /*These functions are used by blender's .blend system for file saving/loading.*/
 void IDP_WriteProperty_OnlyData(IDProperty *prop, void *wd);
 void IDP_WriteProperty(IDProperty *prop, void *wd);
+void write_animdata(WriteData *wd, AnimData *adt); // XXX code needs reshuffling, but not before NLA SoC is merged back into 2.5
 
 static void IDP_WriteArray(IDProperty *prop, void *wd)
 {
@@ -575,6 +576,7 @@ static void write_particlesettings(WriteData *wd, ListBase *idbase)
                        /* write LibData */
                        writestruct(wd, ID_PA, "ParticleSettings", 1, part);
                        if (part->id.properties) IDP_WriteProperty(part->id.properties, wd);
+                       if (part->adt) write_animdata(wd, part->adt);
                        writestruct(wd, DATA, "PartDeflect", 1, part->pd);
                        writestruct(wd, DATA, "PartDeflect", 1, part->pd2);
                }
index b10f35b909169439bd6fcaa5b0cdf3468db72eb3..05f1cc1f3516a5ecf7ac652aad9fb62309a094b5 100644 (file)
@@ -34,6 +34,8 @@
 
 #include "DNA_ID.h"
 
+struct AnimData;
+
 typedef struct HairKey {
        float co[3];    /* location of hair vertex */
        float time;             /* time along hair, default 0-100 */
@@ -100,6 +102,7 @@ typedef struct ParticleData {
 
 typedef struct ParticleSettings {
        ID id;
+       struct AnimData *adt;
 
        int flag;
        short type, from, distr;
@@ -167,7 +170,7 @@ typedef struct ParticleSettings {
        struct Group *eff_group;
        struct Object *dup_ob;
        struct Object *bb_ob;
-       struct Ipo *ipo;
+       struct Ipo *ipo;                                // xxx depreceated... old animation system
        struct PartDeflect *pd;
        struct PartDeflect *pd2;
 } ParticleSettings;
index c48c1006588618945c611fee18bdb1798ce82aec..ae53c815ed9c84a6758f4439528953ff7c4dc618 100644 (file)
@@ -1470,14 +1470,9 @@ static void rna_def_particle_settings(BlenderRNA *brna)
        RNA_def_property_flag(prop, PROP_EDITABLE);
        RNA_def_property_ui_text(prop, "Billboard Object", "Billboards face this object (default is active camera)");
        RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo");
-
-#if 0
-       prop= RNA_def_property(srna, "ipo", PROP_POINTER, PROP_NONE);
-       RNA_def_property_clear_flag(prop, PROP_EDITABLE);
-       RNA_def_property_pointer_sdna(prop, NULL, "ipo");
-       RNA_def_property_struct_type(prop, "Ipo");
-       RNA_def_property_ui_text(prop, "Ipo", "");
-#endif
+       
+       /* animation here? */
+       rna_def_animdata_common(srna);
 
 //     struct PartDeflect *pd;
 //     struct PartDeflect *pd2;