⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sequencestepca.as

📁 jquery插件
💻 AS
字号:
/** * Copyright (c) 2007 Moses Gunesch *  * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: *  * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. *  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */package org.goasap.utils {	import org.goasap.events.SequenceEvent;	import org.goasap.interfaces.IPlayable;	import org.goasap.utils.customadvance.OnPlayableComplete;	import org.goasap.utils.customadvance.SequenceAdvance;			/**	 * Step class used with SequenceCA that adds custom sequence-advance options 	 * so steps can determine when they advance, such as after a duration or after	 * one item in the step completes.	 * 	 * <p>The property <code>advance</code> can be set to an instance of any subclass 	 * of SequenceEvent, so that the ADVANCE event is sent when something specific 	 * occurs other than group completion. (This feature adds a great deal of flexibility	 * to sequences by enabling them to overlap their actions, instead of being forced	 * to wait for all child activity in an action to finish before proceeding.)</p>	 * 	 * <p>Various advance types can be found in the <i>util.customadvance</i> package, and	 * you are welcome to add your own by extending the base class SequenceAdvance.</p>	 * 	 * <ul>	 * <li>OnPlayableComplete: ADVANCE occurs after a specific child completes.</li>	 * <li>OnDurationComplete: ADVANCE occurs when a number of seconds has passed.</li>	 * <li>OnEventComplete: ADVANCE occurs when any event-type is fired from any 	 * dispatcher object, for example a LoaderInfo's COMPLETE event. You can optionally 	 * set a custom handler to filter the event and return true when ready to advance.</li>	 * <li>OnConditionTrue: ADVANCE occurs when a callback, executed on a loop, returns	 * true.</li>	 * </ul>	 * <p>Note that if no custom advance type is set, the ADVANCE event is dispatched	 * just before the group's regular COMPLETE event. If a custom advance type is set,	 * the group will maintain the state PLAYING until it completes, regardless	 * of whether ADVANCE is dispatched during play. It will also maintain that state	 * after it completes until ADVANCE is dispatched, if that occurs after all children	 * are done playing. (Be careful, custom advance types continue running indefinitely 	 * if their conditions are never met, so track them closely.)</p>	 * 	 * @see SequenceCA	 * @see org.goasap.utils.customadvance.OnConditionTrue OnConditionTrue	 * @see org.goasap.utils.customadvance.OnDurationComplete OnDurationComplete	 * @see org.goasap.utils.customadvance.OnEventComplete OnEventComplete	 * @see org.goasap.utils.customadvance.OnPlayableComplete OnPlayableComplete	 * @see org.goasap.utils.customadvance.SequenceAdvance SequenceAdvance	 * 	 * @author Moses Gunesch	 */	public class SequenceStepCA extends SequenceStep {				// -== Public Properties ==-				/**		 * The advance property determines a custom advance behavior for the step 		 * and must be set prior to <code>start</code>.		 * 		 * <p>The advance should be an instance of any subclass of the base class 		 * SequenceAdvance (SequenceAdvance cannot be used directly) and must 		 * dispatch SequenceEvent.ADVANCE.</p>		 * 		 * @see org.goasap.utils.customadvance.OnConditionTrue OnConditionTrue		 * @see org.goasap.utils.customadvance.OnDurationComplete OnDurationComplete		 * @see org.goasap.utils.customadvance.OnEventComplete OnEventComplete		 * @see org.goasap.utils.customadvance.OnPlayableComplete OnPlayableComplete		 * @see org.goasap.utils.customadvance.SequenceAdvance SequenceAdvance		 */		public function get advance() : SequenceAdvance {			if (!_advance) {				_advance = new OnPlayableComplete(this);			}			return _advance;		}		public function set advance(advance:SequenceAdvance) : void {			if (super._state!=STOPPED || advance==_advance)				return;			if (_advance)				_advance.removeEventListener(SequenceEvent.ADVANCE, dispatchAdvance);			_advance = advance;		}				/**		 * Verifies that this SequenceStep has not advanced yet.		 */		public function get willAdvance() : Boolean {			return !_hasAdvanced;		}				override public function addChild(item:IPlayable, adoptChildState:Boolean=false): Boolean {			if (adoptChildState && (item.state==PLAYING || item.state==PLAYING_DELAY)) {				_state = PLAYING;				_isSelf = true;				_hasAdvanced = false;				_advance = new OnPlayableComplete(this);				return super.addChild(item, false);			}			return super.addChild(item, adoptChildState);		}				// -== Protected Properties ==-				/**		 * @private		 */		protected var _advance : SequenceAdvance;		/**		 * @private		 */		protected var _isSelf : Boolean = true; // this default is used in special case, super.addChild(x, true).		/**		 * @private		 */		protected var _hasAdvanced : Boolean = false;		// -== Public Methods ==-				/**		 * Constructor. See PlayableGroup		 * @see PlayableGroup		 */		public function SequenceStepCA(...items) : void {			super((items[ 0 ] is Array) ? items[ 0 ] : items);		}				/**		 * See PlayableGroup		 * @see PlayableGroup#start		 */		override public function start() : Boolean {			if (super.start()==false)				return false;			_isSelf = false;			_hasAdvanced = false;			if (advance is OnPlayableComplete)  // use getter here to force creation of default instance				_isSelf = ((_advance as OnPlayableComplete).item==this);			if (!_isSelf) { // Otherwise, the _advance instance is a dummy, completion is handled internally in this class. 				_advance.addEventListener(SequenceEvent.ADVANCE, dispatchAdvance);				_advance.start();			}			return true;		}				/**		 * See PlayableGroup		 * @see PlayableGroup#stop		 */		override public function stop() : Boolean {			if (super.stop()==false) {				return false;			}			if (!_hasAdvanced && !_isSelf) {				_advance.removeEventListener(SequenceEvent.ADVANCE, dispatchAdvance);				_advance.stop();			}			_hasAdvanced = false;			return true;		}				/**		 * See PlayableGroup		 * @see PlayableGroup#pause		 */		override public function pause() : Boolean {			var r:Boolean = super.pause();			if (!_isSelf && !_hasAdvanced) {				if (_advance.pause()==true) {					_state = PAUSED;					r = true;				}			}			return r;		}				/**		 * See PlayableGroup		 * @see PlayableGroup#resume		 */		override public function resume() : Boolean {			var r:Boolean = super.resume();			if (!_isSelf && !_hasAdvanced) {				if (_advance.resume()==true) {					_state = PLAYING;					r = true;				}			}			return r;		}				/**		 * See PlayableGroup		 * @see PlayableGroup#skipTo		 */		override public function skipTo(position : Number) : Boolean {			if (super.skipTo(position)==false)				return false;			advance.skipTo(position);			return true;		}				/**		 * @private		 * Internal relay for SequenceEvent.ADVANCE dispatch.		 */		protected function dispatchAdvance(e:SequenceEvent) : void {			if (_state==STOPPED)				return;			if (!_hasAdvanced && e.type==SequenceEvent.ADVANCE) {				_hasAdvanced = true;				if (super._listeners==0) // Complete the group, if it was not ready at complete().					stop();				dispatchEvent(new SequenceEvent(SequenceEvent.ADVANCE)); // order-sensitive: leave below stop().				_advance.removeEventListener(SequenceEvent.ADVANCE, dispatchAdvance);			}		}				// -== Protected Methods ==-				/**		 * @private		 * Internal handler for group completion, overridden to allow item to continue		 * playing until advance has been dispatched, if still waiting.		 */		override protected function complete() : void {			if (_isSelf && super._listeners==0) { // _isSelf event is handled internally, _advance instance is a dummy.				dispatchAdvance(new SequenceEvent(SequenceEvent.ADVANCE));			}			else if (_hasAdvanced) { // Do not stop if advance is still active.				stop();			}		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -