00001 import gugga.common.ITask;
00002 import gugga.debug.Assertion;
00003 import gugga.events.EventDispatcher;
00004 import gugga.utils.EventRethrower;
00005
00009 class gugga.sequence.AnonymousTask
00010 extends EventDispatcher implements ITask
00011 {
00012 private var mObject : Object;
00013 private var mMethod : Function;
00014 private var mArguments : Array;
00015
00016 private var mTask : ITask;
00017
00018 public function AnonymousTask (aObject : Object, aMethod : Function, aArguments : Array)
00019 {
00020 mObject = aObject;
00021 mMethod = aMethod;
00022 mArguments = aArguments;
00023 }
00024
00025 public function start() : Void
00026 {
00027 mTask = ITask(mMethod.apply(mObject, mArguments));
00028
00029 Assertion.warningIfEmpty(mTask, "Anonymous task is empty.", this, arguments);
00030
00031 EventRethrower.create(this, mTask, "completed");
00032 EventRethrower.create(this, mTask, "interrupted");
00033 EventRethrower.create(this, mTask, "start");
00034
00035 mTask.start();
00036 }
00037
00038 public function isRunning() : Boolean
00039 {
00040 return mTask.isRunning();
00041 }
00042
00043 public function isImmediatelyInterruptable() : Boolean
00044 {
00045 return mTask.isImmediatelyInterruptable();
00046 }
00047
00048 public function interrupt() : Void
00049 {
00050 mTask.interrupt();
00051 }
00052 }