Subversion Repositories wimsdev

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
20 reyssat 1
/*
2
        DynAPI Distribution
3
        ImageAnimation Class
4
 
5
        The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
6
 
7
        requires: Thread
8
*/
9
 
10
function ImageAnimation(dynimage) {
11
        this.Thread = Thread;
12
        this.Thread(dynimage);
13
 
14
        this.imgAnim = new Array();
15
        this.imgAnim.playing = null;
16
}
17
var p = dynapi.setPrototype('ImageAnimation','Thread');
18
p.addAnimation = function (imgArray) {
19
        var animNum = this.imgAnim.length;
20
        this.imgAnim[animNum] = imgArray;
21
        this.imgAnim[animNum].loops = false;
22
        this.imgAnim[animNum].resets = false;
23
        this.imgAnim[animNum].frame = 0;
24
        this.imgAnim[animNum].playing = true;
25
        this.imgAnim[animNum].direction = 0;
26
        this.imgAnim[animNum].alternates = false;
27
        return animNum;
28
};
29
p.getFrame = function (animNum,frameNum) {
30
        return this.imgAnim[animNum][frameNum];
31
};
32
 
33
p.setLoops = function (animNum,loop) {
34
        this.imgAnim[animNum].loops = loop;
35
};
36
p.setResets = function (animNum) {
37
        this.imgAnim[animNum].resets = true;
38
};
39
p.setAlternates = function (animNum,alt) {
40
        this.imgAnim[animNum].loops = true;
41
        this.imgAnim[animNum].alternates = alt;
42
};
43
 
44
p.playAnimation = function (animNum) {
45
        if (animNum!=null && this.imgAnim.playing!=animNum) {
46
                this.playing = true;
47
                this.imgAnim.playing = animNum;
48
                if (this.dlyr!=null) this.dlyr.invokeEvent("imgstart");
49
                this.start();
50
        }
51
};
52
p.stopAnimation = function () {
53
        this.imgAnim.playing = null;
54
        this.playing = false;
55
        this.stop();
56
        if (this.dlyr!=null) this.dlyr.invokeEvent("imgrun");
57
};
58
p.run = function () {
59
        if (!this.playing || this.imgAnim.playing==null || this.dlyr==null) return;
60
 
61
        var anim = this.imgAnim[this.imgAnim.playing];
62
 
63
        if (anim.frame==0 && this.img==anim[anim.frame]) {
64
                anim.frame++;   // skip 1st frame if same
65
        }
66
        if (this.dlyr!=null) this.dlyr.invokeEvent("imgrun");
67
        this.dlyr.setImage(anim[anim.frame]);
68
 
69
        if (anim.frame>=anim.length-1) {
70
                if (anim.loops) {
71
                        if (anim.alternates && anim.direction==0 && anim.frame==anim.length-1) {
72
                                anim.direction = 1;
73
                                anim.frame = anim.length-2;
74
                        }
75
                        else anim.frame = 0;
76
                }
77
                else if (anim.resets) {
78
                        anim.frame = 0;
79
                        this.stop()
80
                }
81
                else {
82
                        this.stop()
83
                }
84
        }
85
        else {
86
                if (anim.alternates) {
87
                        if (anim.frame==0 && anim.direction==1) {
88
                                anim.direction = 0;
89
                                anim.frame = 1;
90
                        }
91
                        else if (anim.direction==0) {
92
                                anim.frame++;
93
                        }
94
                        else if (anim.direction==1) {
95
                                anim.frame--;
96
                        }
97
                }
98
                else {
99
                        anim.frame++;
100
                }
101
        }
102
};