package com.drawbridge.dm.animation;
import java.util.LinkedList;
import java.util.Queue;
import com.drawbridge.jsengine.jsobjects.JSNativeFunction;
import com.drawbridge.utils.Utils;
public class NativeAnimationProcessor extends Thread
{
// Is essentially just a smart worker that has queue properties.
// It processes everything as soon as possible.
private final Queue<NativeAnimationTween> mTweenStack;
private boolean allowedToProcess = true;
public NativeAnimationProcessor(){
mTweenStack = new LinkedList<NativeAnimationTween>();
}
public void add(NativeAnimationTween tween){
synchronized(mTweenStack){
mTweenStack.add(tween);
}
}
@Override
public void run(){
NativeAnimationTween nat = null;
while(allowedToProcess){
try{
Runnable work = null;
synchronized(mTweenStack){
while(mTweenStack.isEmpty())
mTweenStack.wait();
nat = mTweenStack.remove();
if(nat != null)
work = nat.getTween();
}
Utils.out.println(this.getClass(),"Nat: Processing");
work.run();
JSNativeFunction.tweenProcessingCallback();
}
catch(InterruptedException e){
break;
}
}
if(nat != null)
nat.stopTween();
}
public void stopAnimation()
{
allowedToProcess = false;
}
}