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; } }