00001 import com.mosesSupposes.fuse.PennerEasing;
00002
00003 import gugga.collections.HashTable;
00004 import gugga.utils.DebugUtils;
00005
00009 class gugga.tween.AbstractTween
00010 {
00011 private var mInitialValues : HashTable;
00012
00013 private var mSubject : Object;
00014 public function get Subject() : Object
00015 {
00016 return mSubject;
00017 }
00018
00019 public var mTweeningProperties : HashTable;
00020 public function get TweeningProperties() : HashTable
00021 {
00022 return mTweeningProperties;
00023 }
00024
00025 public var Duration : Number = 10;
00026
00037 public var EasingEquation : Function = PennerEasing.linear;
00038
00039 public var TweenFinishedDelegate : Function;
00040 public var TweenUpdateDelegate : Function;
00041
00042 public var Option1 : Number;
00043 public var Option2 : Number;
00044
00045 private var mDurationElapsed : Number = 0;
00046 public function get DurationElapsed() : Number
00047 {
00048 return mDurationElapsed;
00049 }
00050
00051 public function get Finished() : Boolean
00052 {
00053 return (mDurationElapsed >= Duration);
00054 }
00055
00056 public function AbstractTween(aSubject:Object, aTweeningProperties:HashTable)
00057 {
00058 super();
00059
00060 mSubject = aSubject;
00061
00062 mTweeningProperties = new HashTable();
00063 mInitialValues = new HashTable();
00064
00065 for (var key:String in aTweeningProperties)
00066 {
00067 mInitialValues[key] = aSubject[key];
00068 mTweeningProperties[key] = aTweeningProperties[key];
00069 }
00070 }
00071
00072 public function update() : Void
00073 {
00074 increaseDurationElapsed();
00075
00076 for (var key:String in mTweeningProperties)
00077 {
00078 mSubject[key] = EasingEquation(
00079 mDurationElapsed,
00080 mInitialValues[key],
00081 mTweeningProperties[key] - mInitialValues[key],
00082 Duration,
00083 Option1,
00084 Option2
00085 );
00086 }
00087
00088 TweenUpdateDelegate();
00089
00090 if(Finished)
00091 {
00092 TweenFinishedDelegate();
00093 }
00094 }
00095
00096 private function increaseDurationElapsed() : Void
00097 {
00098 throw new Error("Not implemented");
00099 }
00100 }