@iscript
class MultipleAnimPic{
var window;
var running,direction,storage,storageex,interval;
var targetlayer,newlayer,x,y,reverse,triggername,loop,timer;
var piccount;
var num,time;
var templayer;
var start;
function MultipleAnimPic(window){
this.window=window;
}
function setOption(elm){
if(running) return;
num=1;
start=true;
running=false;
direction=1;
reverse=elm.reverse!==void?elm.reverse:false;
if(elm.storage!==void)
this.storage=elm.storage;
else
throw new Exception("\n请指定动画的图片");
storageex=".png";
storageex=".jpg" if Storages.isExistentStorage(storage+" (0).jpg");
storageex=".bmp" if Storages.isExistentStorage(storage+" (0).bmp");
piccount=0;
for(var i=0;;i++){
if(Storages.isExistentStorage(storage+" ("+i+")"+storageex))
piccount++;
else
break;
}
interval=elm.interval!==void?+elm.interval:60;
newlayer=false;
if(elm.layer!==void){
targetlayer=window.getLayerFromElm(elm);
templayer=new Layer(window,window.primaryLayer);
triggername="ma"+elm.layer;
}
else if(elm.name!==void){
targetlayer=new Layer(window,window.primaryLayer);
newlayer=true;
triggername="ma"+elm.name;
}
else
throw new Exception("\n请指定动画所在的图层");
if(newlayer)
targetlayer.absolute=elm.index!==void?+elm.index:2000000+1;
if(elm.mode!==void){
var newtype=global.imageTagLayerType[elm.mode].type;
if(newtype!==void)
targetlayer.type=newtype;
}
else
targetlayer.type=ltAlpha;
x=elm.left!==void?+elm.left:0;
y=elm.top!==void?+elm.top:0;
targetlayer.visible=false;
targetlayer.setPos(x,y);
loop=true;
if(elm.time!==void) time=+elm.time,loop=false;
}
function startAnim(elm){
setOption(elm);
running=true;
timer=new Timer(showPic,"");
timer.interval=interval;
timer.enabled=true;
}
function showPic(){
if(!reverse){
if(newlayer){
targetlayer.loadImages(storage+" ("+(num-1)+")"+storageex);
targetlayer.setSizeToImageSize();
if(start) targetlayer.visible=true,start=false;
}
else{
templayer.loadImages(storage+" ("+(num-1)+")"+storageex);
targetlayer.copyRect(0,0,templayer,0,0,templayer.imageWidth,templayer.imageHeight);
targetlayer.setSize(templayer.imageWidth,templayer.imageHeight);
if(start) targetlayer.visible=true,start=false;
}
num++;
num=1 if num>piccount;
if(!loop){
time-=interval;
if(time<0){
window.trigger(triggername);
window.trigger("waitanyanime");
stopAnim();
}
}
}
else{
if(direction==1){
if(newlayer){
targetlayer.loadImages(storage+" ("+(num-1)+")"+storageex);
targetlayer.setSizeToImageSize();
if(start) targetlayer.visible=true,start=false;
}
else{
templayer.loadImages(storage+" ("+(num-1)+")"+storageex);
targetlayer.copyRect(0,0,templayer,0,0,templayer.imageWidth,templayer.imageHeight);
targetlayer.setSize(templayer.imageWidth,templayer.imageHeight);
if(start) targetlayer.visible=true,start=false;
}
num++;
if(num>piccount) num=piccount-1,direction=0;
if(!loop){
time-=interval;
if(time<0){
window.trigger(triggername);
window.trigger("waitanyanime");
stopAnim();
}
}
return;
}
if(direction==0){
if(newlayer){
targetlayer.loadImages(storage+" ("+(num-1)+")"+storageex);
targetlayer.setSizeToImageSize();
}
else{
templayer.loadImages(storage+" ("+(num-1)+")"+storageex);
targetlayer.copyRect(0,0,templayer,0,0,templayer.imageWidth,templayer.imageHeight);
targetlayer.setSize(templayer.imageWidth,templayer.imageHeight);
}
num--;
if(num<1) num=2,direction=1;
if(!loop){
time-=interval;
if(time<0){
window.trigger(triggername);
window.trigger("waitanyanime");
stopAnim();
}
}
return;
}
}
}
function stopAnim(){
timer.enabled=false;
if(newlayer)
targetlayer.loadImages(storage+" ("+(num-1)+")"+storageex);
else{
targetlayer.copyRect(0,0,templayer,0,0,templayer.imageWidth,templayer.imageHeight);
targetlayer.setSize(templayer.imageWidth,templayer.imageHeight);
}
}
function playStopAnim(){
timer.enabled=true;
}
function clearAnim(){
running=false;
if(!newlayer)
targetlayer.fillRect(0,0,templayer.imageWidth,templayer.imageHeight,0);
if(newlayer)
invalidate targetlayer if targetlayer!==void;
invalidate templayer if templayer!==void;
invalidate timer if timer!==void;
targetlayer=templayer=timer=void;
delete f[triggername] if f[triggername]!==void;
}
}
@endscript
@macro name=addpath
@eval exp="Storages.addAutoPath(mp.storage+'/')"
@if exp="Storages.isExistentStorage(mp.storage+'.xp3')"
@eval exp="Storages.addAutoPath(mp.storage+'.xp3>')"
@endif
@if exp="Storages.isExistentStorage(System.exePath+mp.storage+'.xp3')"
@eval exp="Storages.addAutoPath(System.exePath+mp.storage+'.xp3>')"
@endif
@endmacro
@macro name=playanimepic
@if exp="mp.layer!==void"
@eval exp="f['ma'+mp.layer]=new MultipleAnimPic(kag)"
@eval exp="f['ma'+mp.layer].startAnim(mp)"
@elsif exp="mp.name!==void"
@eval exp="f['ma'+mp.name]=new MultipleAnimPic(kag)"
@eval exp="f['ma'+mp.name].startAnim(mp)"
@endif
@endmacro
@macro name=stopanimepic
@if exp="mp.layer!==void"
@eval exp="f['ma'+mp.layer].stopAnim()"
@elsif exp="mp.name!==void"
@eval exp="f['ma'+mp.name].stopAnim()"
@endif
@endmacro
@macro name=resumeanimepic
@if exp="mp.layer!==void"
@eval exp="f['ma'+mp.layer].playStopAnim()"
@elsif exp="mp.name!==void"
@eval exp="f['ma'+mp.name].playStopAnim()"
@endif
@endmacro
@macro name=clearanimepic
@if exp="mp.layer!==void"
@eval exp="f['ma'+mp.layer].clearAnim()"
@elsif exp="mp.name!==void"
@eval exp="f['ma'+mp.name].clearAnim()"
@endif
@endmacro
@macro name=waitanimepic
@if exp="mp.layer!==void"
@waittrig name=%layer
@elsif exp="mp.name!==void"
@waittrig name=%name
@endif
@endmacro
@macro name=waitanyanime
@waittrig name=waitanyanime
@endmacro
@return
|