Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenloader/intern/writefile.c')
-rw-r--r--source/blender/blenloader/intern/writefile.c50
1 files changed, 40 insertions, 10 deletions
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index bf70098c7b5..cfaae977bdd 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -132,6 +132,7 @@ Important to know is that 'streaming' has been added to files, for Blender Publi
#include "DNA_object_force.h"
#include "DNA_oops_types.h"
#include "DNA_packedFile_types.h"
+#include "DNA_particle_types.h"
#include "DNA_property_types.h"
#include "DNA_scene_types.h"
#include "DNA_sdna_types.h"
@@ -526,6 +527,43 @@ static void write_effects(WriteData *wd, ListBase *lb)
}
}
+static void write_particlesettings(WriteData *wd, ListBase *idbase)
+{
+ ParticleSettings *part;
+
+ part= idbase->first;
+ while(part) {
+ if(part->id.us>0 || wd->current) {
+ /* write LibData */
+ writestruct(wd, ID_PA, "ParticleSettings", 1, part);
+ writestruct(wd, DATA, "PartDeflect", 1, part->pd);
+ }
+ part= part->id.next;
+ }
+}
+static void write_particlesystems(WriteData *wd, ListBase *particles)
+{
+ ParticleSystem *psys= particles->first;
+ int a;
+
+ for(; psys; psys=psys->next) {
+ writestruct(wd, DATA, "ParticleSystem", 1, psys);
+
+ if(psys->particles) {
+ writestruct(wd, DATA, "ParticleData", psys->totpart ,psys->particles);
+
+ if(psys->particles->hair) {
+ ParticleData *pa = psys->particles;
+
+ for(a=0; a<psys->totpart; a++, pa++)
+ writedata(wd, DATA, MEM_allocN_len(pa->hair),pa->hair);
+ }
+ }
+ if(psys->child) writestruct(wd, DATA, "ChildParticle", psys->totchild ,psys->child);
+ writestruct(wd, DATA, "SoftBody", 1, psys->soft);
+ }
+}
+
static void write_properties(WriteData *wd, ListBase *lb)
{
bProperty *prop;
@@ -803,7 +841,6 @@ static void write_modifiers(WriteData *wd, ListBase *modbase)
static void write_objects(WriteData *wd, ListBase *idbase)
{
Object *ob;
- int a;
ob= idbase->first;
while(ob) {
@@ -839,17 +876,9 @@ static void write_objects(WriteData *wd, ListBase *idbase)
writestruct(wd, DATA, "PartDeflect", 1, ob->pd);
writestruct(wd, DATA, "SoftBody", 1, ob->soft);
- if(ob->soft) {
- SoftBody *sb= ob->soft;
- if(sb->keys) {
- writedata(wd, DATA, sizeof(void *)*sb->totkey, sb->keys);
- for(a=0; a<sb->totkey; a++) {
- writestruct(wd, DATA, "SBVertex", sb->totpoint, sb->keys[a]);
- }
- }
- }
writestruct(wd, DATA, "FluidsimSettings", 1, ob->fluidsimSettings); // NT
+ write_particlesystems(wd, &ob->particlesystem);
write_modifiers(wd, &ob->modifiers);
}
ob= ob->id.next;
@@ -1909,6 +1938,7 @@ static int write_file_handle(int handle, MemFile *compare, MemFile *current, int
write_materials(wd, &G.main->mat);
write_textures (wd, &G.main->tex);
write_meshs (wd, &G.main->mesh);
+ write_particlesettings(wd, &G.main->particle);
write_nodetrees(wd, &G.main->nodetree);
write_brushes (wd, &G.main->brush);
if(current==NULL)