Subversion Repositories wimsdev

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
20 reyssat 1
/*
2
        DS: the extra features of this version will possibly be rebuilt as an advanced timeline object
3
 
4
        DynAPI Distribution
5
        PathAnimation Class
6
 
7
        The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
8
 
9
        requires: dynapi.fx.Thread
10
*/
11
 
12
function PathAnimation(dlyr) {
13
        this.Thread = Thread;
14
        this.Thread(dlyr);
15
        this.paths = [];
16
        this.pathPlaying = null;
17
}
18
var p = dynapi.setPrototype('PathAnimation','Thread');
19
 
20
p.add = function (path, loops, resets) {
21
        var n = this.paths.length;
22
        this.paths[n] = path;
23
        this.setLoops(n,loops);
24
        this.setResets(n,resets);
25
        this.setFrame(n,0);
26
        return n;
27
};
28
p.setLoops = function (n, loops) {
29
        this.paths[n].loops = (loops);
30
};
31
p.setResets = function (n, resets) {
32
        this.paths[n].resets = (resets);
33
};
34
p.setFrame = function (n, frame) {
35
        this.paths[n].frame = frame;
36
};
37
p.playAnimation = function (noevt) {
38
        if (!this.playing) {
39
                this.pathPlaying = null;
40
                if (arguments[0]==null) arguments[0] = 0;
41
                if (typeof(arguments[0]) == "number") {
42
                        this.pathPlaying = this.paths[arguments[0]];
43
                }
44
                else if (typeof(arguments[0]) == "object") {  
45
                        this.pathPlaying = arguments[0];
46
                        this.pathPlaying.loops = arguments[1]||false;
47
                        this.pathPlaying.resets = arguments[2]||false;
48
                        this.pathPlaying.frame = 0;
49
                }
50
                this.playing = true;
51
                if (this.dlyr!=null && noevt!=false) this.dlyr.invokeEvent("pathstart");
52
                this.start();
53
        }
54
};
55
//p._Thread_stop = Thread.prototype.stop;
56
p.stopAnimation = function (noevt) {
57
        if (this.pathPlaying && this.pathPlaying.resets && this.dlyr!=null) this.dlyr.setLocation(this.pathPlaying[0],this.pathPlaying[1]);
58
        this.stop();
59
        this.pathPlaying = null;
60
        this.playing = false;
61
        if (this.dlyr!=null && noevt!=false) this.dlyr.invokeEvent("pathstop");
62
};
63
p.run = function () {
64
        if (!this.playing || this.pathPlaying==null) return;
65
        var anim = this.pathPlaying;
66
        if (anim.frame>=anim.length/2) {
67
                if (anim.loops) {
68
                        anim.frame = 0;
69
                }
70
                else if (anim.resets) {
71
                        anim.frame = 0;
72
                        if (this.dlyr!=null) this.dlyr.setLocation(anim[0],anim[1]);
73
                        this.stopAnimation();
74
                        this.dlyr.invokeEvent("pathfinish");
75
                        return;
76
                }
77
                else {
78
                        anim.frame = 0;
79
                        this.stopAnimation();
80
                        this.dlyr.invokeEvent("pathfinish");
81
                        return;
82
                }
83
        }
84
        if (anim.frame==0 && (this.dlyr!=null && this.dlyr.x==anim[0] && this.dlyr.y==anim[1])) {
85
                anim.frame += 1;
86
        }
87
        this.newX = anim[anim.frame*2];
88
        this.newY = anim[anim.frame*2+1];
89
 
90
        if (this.dlyr!=null) {
91
                this.dlyr.invokeEvent("pathrun");
92
                this.dlyr.setLocation(this.newX,this.newY);
93
        }
94
        anim.frame++;
95
};
96