root/OpenSceneGraph/trunk/src/osgWrappers/deprecated-dotosg/osgParticle/IO_ParticleEffect.cpp @ 13041

Revision 13041, 6.6 kB (checked in by robert, 2 years ago)

Ran script to remove trailing spaces and tabs

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1#include <osgParticle/ParticleEffect>
2#include <osg/io_utils>
3
4#include <osgDB/Registry>
5#include <osgDB/Input>
6#include <osgDB/Output>
7
8#include <osg/Notify>
9
10bool  ParticleEffect_readLocalData(osg::Object &obj, osgDB::Input &fr);
11bool  ParticleEffect_writeLocalData(const osg::Object &obj, osgDB::Output &fw);
12
13REGISTER_DOTOSGWRAPPER(ParticleEffect_Proxy)
14(
15    0,
16    "ParticleEffect",
17    "Object Node ParticleEffect",
18    ParticleEffect_readLocalData,
19    ParticleEffect_writeLocalData
20);
21
22bool ParticleEffect_readLocalData(osg::Object& object, osgDB::Input& fr)
23{
24    osgParticle::ParticleEffect& effect = static_cast<osgParticle::ParticleEffect&>(object);
25    bool itrAdvanced = false;
26
27    if (fr.matchSequence("textFileName %s"))
28    {
29        effect.setTextureFileName(fr[1].getStr());
30        fr += 2;
31        itrAdvanced = true;
32    }
33
34    if (fr.matchSequence("position %f %f %f"))
35    {
36        osg::Vec3 position;
37        fr[1].getFloat(position[0]);
38        fr[2].getFloat(position[1]);
39        fr[3].getFloat(position[2]);
40
41        effect.setPosition(position);
42
43        fr += 4;
44        itrAdvanced = true;
45    }
46
47    if (fr.matchSequence("scale %f"))
48    {
49        float scale;
50        fr[1].getFloat(scale);
51        effect.setScale(scale);
52
53        fr += 2;
54        itrAdvanced = true;
55    }
56
57    if (fr.matchSequence("intensity %f"))
58    {
59        float intensity;
60        fr[1].getFloat(intensity);
61        effect.setIntensity(intensity);
62
63        fr += 2;
64        itrAdvanced = true;
65    }
66
67    if (fr.matchSequence("startTime %f"))
68    {
69        float startTime;
70        fr[1].getFloat(startTime);
71        effect.setStartTime(startTime);
72
73        fr += 2;
74        itrAdvanced = true;
75    }
76
77    if (fr.matchSequence("emitterDuration %f"))
78    {
79        float emitterDuration;
80        fr[1].getFloat(emitterDuration);
81        effect.setEmitterDuration(emitterDuration);
82
83        fr += 2;
84        itrAdvanced = true;
85    }
86
87    osgParticle::Particle particle = effect.getDefaultParticleTemplate();
88    bool particleSet = false;
89
90    if (fr.matchSequence("particleDuration %f"))
91    {
92        float particleDuration;
93        fr[1].getFloat(particleDuration);
94        particle.setLifeTime(particleDuration);
95        particleSet = true;
96        fr += 2;
97        itrAdvanced = true;
98    }
99
100    if (fr[0].matchWord("particleSizeRange"))
101    {
102        osgParticle::rangef r;
103        if (fr[1].getFloat(r.minimum) && fr[2].getFloat(r.maximum))
104        {
105            particle.setSizeRange(r);
106            particleSet = true;
107            fr += 3;
108            itrAdvanced = true;
109        }
110    }
111    if (fr[0].matchWord("particleAlphaRange"))
112    {
113        osgParticle::rangef r;
114        if (fr[1].getFloat(r.minimum) && fr[2].getFloat(r.maximum))
115        {
116            particle.setAlphaRange(r);
117            particleSet = true;
118            fr += 3;
119            itrAdvanced = true;
120        }
121    }
122    if (fr[0].matchWord("particleColorRange"))
123    {
124        osgParticle::rangev4 r;
125        if (fr[1].getFloat(r.minimum.x()) && fr[2].getFloat(r.minimum.y()) && fr[3].getFloat(r.minimum.z()) && fr[4].getFloat(r.minimum.w()) &&
126            fr[5].getFloat(r.maximum.x()) && fr[6].getFloat(r.maximum.y()) && fr[7].getFloat(r.maximum.z()) && fr[8].getFloat(r.maximum.w()))
127        {
128            particle.setColorRange(r);
129            particleSet = true;
130            fr += 9;
131            itrAdvanced = true;
132        }
133    }
134
135    if (particleSet)
136    {
137        effect.setDefaultParticleTemplate(particle);
138    }
139
140
141    if (fr.matchSequence("wind %f %f %f"))
142    {
143        osg::Vec3 wind;
144        fr[1].getFloat(wind[0]);
145        fr[2].getFloat(wind[1]);
146        fr[3].getFloat(wind[2]);
147
148        effect.setWind(wind);
149
150        fr += 4;
151        itrAdvanced = true;
152    }
153
154    if (fr[0].matchWord("useLocalParticleSystem"))
155    {
156        if (fr[1].matchWord("FALSE"))
157        {
158            effect.setUseLocalParticleSystem(false);
159            fr+=2;
160            itrAdvanced = true;
161
162            // now read the particle system that is shared with an node external to this particle effect
163            osg::ref_ptr<osg::Object> readObject = fr.readObjectOfType(osgDB::type_wrapper<osgParticle::ParticleSystem>());
164            if (readObject.valid())
165            {
166                osgParticle::ParticleSystem* ps = static_cast<osgParticle::ParticleSystem*>(readObject.get());
167                effect.setParticleSystem(ps);
168                itrAdvanced = true;
169            }
170
171        }
172        else if (fr[1].matchWord("TRUE"))
173        {
174            effect.setUseLocalParticleSystem(true);
175            fr+=2;
176            itrAdvanced = true;
177        }
178    }
179
180    if (!effect.getAutomaticSetup())
181    {
182        // since by default the clone of the ParticleEffect is done with automatic setup off to prevent premature loading of
183        // imagery, we still want to make sure the ParticleEffect is properly built so we'll now mannually enable the automatic setup
184        // run the buildEffect().
185        effect.setAutomaticSetup(true);
186        effect.buildEffect();
187    }
188
189    return itrAdvanced;
190}
191
192bool ParticleEffect_writeLocalData(const osg::Object& object, osgDB::Output& fw)
193{
194    const osgParticle::ParticleEffect& effect = static_cast<const osgParticle::ParticleEffect&>(object);
195    fw.indent()<<"textFileName "<<fw.wrapString(effect.getTextureFileName())<<std::endl;
196    fw.indent()<<"position "<<effect.getPosition()<<std::endl;
197    fw.indent()<<"scale "<<effect.getScale()<<std::endl;
198    fw.indent()<<"intensity "<<effect.getIntensity()<<std::endl;
199    fw.indent()<<"startTime "<<effect.getStartTime()<<std::endl;
200    fw.indent()<<"emitterDuration "<<effect.getEmitterDuration()<<std::endl;
201    fw.indent()<<"particleDuration "<<effect.getParticleDuration()<<std::endl;
202
203    osgParticle::rangef rf = effect.getDefaultParticleTemplate().getSizeRange();
204    fw.indent() << "particleSizeRange " << rf.minimum << " " << rf.maximum << std::endl;
205
206    rf = effect.getDefaultParticleTemplate().getAlphaRange();
207    fw.indent() << "particleAlphaRange " << rf.minimum << " " << rf.maximum << std::endl;
208
209    osgParticle::rangev4 rv4 = effect.getDefaultParticleTemplate().getColorRange();
210    fw.indent() << "particleColorRange ";
211    fw << rv4.minimum.x() << " " << rv4.minimum.y() << " " << rv4.minimum.z() << " " << rv4.minimum.w() << " ";
212    fw << rv4.maximum.x() << " " << rv4.maximum.y() << " " << rv4.maximum.z() << " " << rv4.maximum.w() << std::endl;
213
214    fw.indent()<<"wind "<<effect.getWind()<<std::endl;
215
216    fw.indent()<<"useLocalParticleSystem ";
217    if (effect.getUseLocalParticleSystem()) fw<<"TRUE"<<std::endl;
218    else
219    {
220        fw<<"FALSE"<<std::endl;
221        fw.writeObject(*effect.getParticleSystem());
222    }
223
224    return true;
225}
Note: See TracBrowser for help on using the browser.