You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.6 KiB
65 lines
1.6 KiB
2 years ago
|
/*
|
||
|
DynAPI Distribution
|
||
|
Glide Animation Extension
|
||
|
|
||
|
The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
|
||
|
|
||
|
requires: DynLayer, dynapi.functions.Math
|
||
|
*/
|
||
|
|
||
|
function Thread(dlyr) {
|
||
|
this.DynObject = DynObject;
|
||
|
this.DynObject();
|
||
|
|
||
|
if (dlyr) this.dlyr = dlyr;
|
||
|
else dlyr = this; // if no dynlayer passed it calls events onto itself
|
||
|
|
||
|
this._frame = 0;
|
||
|
this._path = null;
|
||
|
this.loop = false;
|
||
|
}
|
||
|
var p = dynapi.setPrototype('Thread','DynObject');
|
||
|
p.interval = 20;
|
||
|
p.sleep = function (ms) {
|
||
|
this.interval = Math.abs(parseInt(ms));
|
||
|
if (this._timer) this.start();
|
||
|
};
|
||
|
p._restart = function () { // starts, or restarts if necessary
|
||
|
this.stop(false);
|
||
|
setTimeout(this+'.start()',this.interval+1);
|
||
|
};
|
||
|
p.start = function () { // starts, or restarts if necessary
|
||
|
if (this._timer) this._restart();
|
||
|
else {
|
||
|
this.dlyr.invokeEvent("threadstart");
|
||
|
this._timer = setInterval(this+'.run()',this.interval);
|
||
|
}
|
||
|
};
|
||
|
p.run = function () {
|
||
|
var p=this._path, d=this.dlyr;
|
||
|
this.dlyr.invokeEvent("threadrun");
|
||
|
if (p && this.dlyr!=this && this._timer) {
|
||
|
if (this._frame>=p.length/2) {
|
||
|
if (this.loop) this._frame = 0;
|
||
|
else {
|
||
|
this.stop(false);
|
||
|
this.dlyr.invokeEvent("threadfinish");
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
if (this._frame==0 && (d.x==p[0] && d.y==p[1])) this.frame += 1; // already at 1st coordinate
|
||
|
d.setLocation(p[this._frame*2],p[this._frame*2+1]);
|
||
|
this._frame++;
|
||
|
}
|
||
|
};
|
||
|
p.stop = function (noevt) {
|
||
|
clearInterval(this._timer);
|
||
|
this._timer = null;
|
||
|
this._frame = 0;
|
||
|
if (noevt!=false) this.dlyr.invokeEvent("threadstop");
|
||
|
};
|
||
|
p.play = function (path) {
|
||
|
this._path = path;
|
||
|
this.start();
|
||
|
};
|