root/OpenSceneGraph/trunk/src/osgWrappers/deprecated-dotosg/osg/Sequence.cpp @ 13041

Revision 13041, 5.4 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 "osg/Sequence"
2
3#include "osgDB/Registry"
4#include "osgDB/Input"
5#include "osgDB/Output"
6
7#include <string.h>
8
9using namespace osg;
10using namespace osgDB;
11
12// forward declare functions to use later.
13bool Sequence_readLocalData(Object& obj, Input& fr);
14bool Sequence_writeLocalData(const Object& obj, Output& fw);
15
16// register the read and write functions with the osgDB::Registry.
17REGISTER_DOTOSGWRAPPER(Sequence)
18(
19    new osg::Sequence,
20    "Sequence",
21    "Object Node Sequence Group",
22    &Sequence_readLocalData,
23    &Sequence_writeLocalData
24);
25
26static bool Sequence_matchLoopMode(const char* str,
27                                   Sequence::LoopMode& mode)
28{
29    if (strcmp(str, "LOOP") == 0)
30    {
31        mode = Sequence::LOOP;
32    }
33    else if (strcmp(str, "SWING") == 0)
34    {
35        mode = Sequence::SWING;
36    }
37    else
38    {
39        return false;
40    }
41
42    return true;
43}
44
45static const char* Sequence_getLoopMode(Sequence::LoopMode mode)
46{
47    switch (mode) {
48    case Sequence::SWING:
49        return "SWING";
50    case Sequence::LOOP:
51    default:
52        return "LOOP";
53    }
54}
55
56// only storing 'START' and 'STOP' since 'PAUSE' doesn't make sense to me
57static bool Sequence_matchSeqMode(const char* str,
58                                  Sequence::SequenceMode& mode)
59{
60    if (strcmp(str, "START") == 0)
61    {
62        mode = Sequence::START;
63    }
64    else if (strcmp(str, "STOP") == 0)
65    {
66        mode = Sequence::STOP;
67    }
68    else
69    {
70        return false;
71    }
72
73    return true;
74}
75
76static const char* Sequence_getSeqMode(Sequence::SequenceMode mode)
77{
78    switch (mode) {
79    case Sequence::START:
80        return "START";
81    default:
82        return "STOP";
83    }
84}
85
86bool Sequence_readLocalData(Object& obj, Input& fr)
87{
88    bool iteratorAdvanced = false;
89
90    Sequence& sw = static_cast<Sequence&>(obj);
91
92    if (fr.matchSequence("defaultTime"))
93    {
94        if (fr[1].isFloat())
95    {
96        float t;
97        fr[1].getFloat(t) ;
98        sw.setDefaultTime(t) ;
99            iteratorAdvanced = true;
100            fr += 2;
101        }
102    }
103    else if (fr.matchSequence("frameTime {"))
104    {
105        int entry = fr[0].getNoNestedBrackets();
106        fr += 2;
107
108        int i = 0;
109        while (!fr.eof() && fr[0].getNoNestedBrackets() > entry)
110        {
111            float t;
112            if (fr[0].getFloat(t))
113            {
114                sw.setTime(i, t);
115                ++fr;
116                i++;
117            }
118        }
119
120        iteratorAdvanced = true;
121        ++fr;
122    }
123    else if (fr.matchSequence("lastFrameTime"))
124    {
125        if (fr[1].isFloat())
126        {
127            float t;
128            fr[1].getFloat(t) ;
129            sw.setLastFrameTime(t) ;
130            iteratorAdvanced = true;
131            fr += 2;
132        }
133    }
134    else if (fr.matchSequence("interval"))
135    {
136        Sequence::LoopMode mode;
137        int begin, end;
138        if (Sequence_matchLoopMode(fr[1].getStr(), mode) &&
139            fr[2].getInt(begin) && fr[3].getInt(end))
140        {
141            sw.setInterval(mode, begin, end);
142            iteratorAdvanced = true;
143            fr += 4;
144        }
145    }
146    else if (fr.matchSequence("duration"))
147    {
148        if (fr[1].isFloat() && fr[2].isInt())
149        {
150            float speed;
151            int nreps;
152            fr[1].getFloat(speed);
153            fr[2].getInt(nreps);
154            sw.setDuration(speed, nreps);
155            iteratorAdvanced = true;
156            fr += 3;
157        }
158    }
159    else if (fr.matchSequence("mode"))
160    {
161        Sequence::SequenceMode mode;
162        if (Sequence_matchSeqMode(fr[1].getStr(), mode))
163        {
164            sw.setMode(mode);
165            iteratorAdvanced = true;
166            fr += 2;
167        }
168    }
169    else if (fr.matchSequence("sync"))
170    {
171        if (fr[1].isInt())
172        {
173        int sync ;
174        fr[1].getInt(sync) ;
175        sw.setSync(sync!=0) ;
176            iteratorAdvanced = true;
177            fr += 2;
178        }
179    }
180    else if (fr.matchSequence("clearOnStop"))
181    {
182        if (fr[1].isInt())
183        {
184            int clearOnStop ;
185            fr[1].getInt(clearOnStop) ;
186            sw.setClearOnStop(clearOnStop!=0) ;
187            iteratorAdvanced = true;
188            fr += 2;
189        }
190    }
191
192    return iteratorAdvanced;
193}
194
195bool Sequence_writeLocalData(const Object& obj, Output& fw)
196{
197    const Sequence& sw = static_cast<const Sequence&>(obj);
198
199    // default frame time
200    fw.indent() << "defaultTime " << sw.getDefaultTime() << std::endl;
201
202    // frame times
203    fw.indent() << "frameTime {" << std::endl;
204    fw.moveIn();
205    for (unsigned int i = 0; i < sw.getNumChildren(); i++)
206    {
207        fw.indent() << sw.getTime(i) << std::endl;
208    }
209
210    fw.moveOut();
211    fw.indent() << "}" << std::endl;
212
213    // last frame time
214    fw.indent() << "lastFrameTime " << sw.getLastFrameTime() << std::endl;
215
216    // loop mode & interval
217    Sequence::LoopMode mode;
218    int begin, end;
219    sw.getInterval(mode, begin, end);
220    fw.indent() << "interval " << Sequence_getLoopMode(mode) << " " << begin << " " << end << std::endl;
221
222    // duration
223    float speed;
224    int nreps;
225    sw.getDuration(speed, nreps);
226    fw.indent() << "duration " << speed << " " << nreps << std::endl;
227
228    // sequence mode
229    fw.indent() << "mode " << Sequence_getSeqMode(sw.getMode()) << std::endl;
230
231    // sync
232    fw.indent() << "sync " << (int) sw.getSync() << std::endl;
233
234    // clearOnStop
235    fw.indent() << "clearOnStop " << (int) sw.getClearOnStop() << std::endl;
236
237    return true;
238}
Note: See TracBrowser for help on using the browser.