Section 1
//Symbol1copy_14 (COKE_Sticky_fla.Symbol1copy_14)
package COKE_Sticky_fla {
import flash.display.*;
public dynamic class Symbol1copy_14 extends MovieClip {
public function Symbol1copy_14(){
addFrameScript(59, this.frame60);
}
function frame60(){
gotoAndPlay(1);
}
}
}//package COKE_Sticky_fla
Section 2
//PropTween (com.greensock.core.PropTween)
package com.greensock.core {
public class PropTween {
public var priority:int;
public var start:Number;
public var prevNode:PropTween;
public var change:Number;
public var target:Object;
public var name:String;
public var property:String;
public var nextNode:PropTween;
public var isPlugin:Boolean;
public function PropTween(_arg1:Object, _arg2:String, _arg3:Number, _arg4:Number, _arg5:String, _arg6:Boolean, _arg7:PropTween=null, _arg8:int=0){
this.target = _arg1;
this.property = _arg2;
this.start = _arg3;
this.change = _arg4;
this.name = _arg5;
this.isPlugin = _arg6;
if (_arg7){
_arg7.prevNode = this;
this.nextNode = _arg7;
};
this.priority = _arg8;
}
}
}//package com.greensock.core
Section 3
//SimpleTimeline (com.greensock.core.SimpleTimeline)
package com.greensock.core {
public class SimpleTimeline extends TweenCore {
public var autoRemoveChildren:Boolean;
protected var _lastChild:TweenCore;
protected var _firstChild:TweenCore;
public function SimpleTimeline(_arg1:Object=null){
super(0, _arg1);
}
override public function renderTime(_arg1:Number, _arg2:Boolean=false, _arg3:Boolean=false):void{
var _local5:Number;
var _local6:TweenCore;
var _local4:TweenCore = _firstChild;
this.cachedTotalTime = _arg1;
this.cachedTime = _arg1;
while (_local4) {
_local6 = _local4.nextNode;
if (((_local4.active) || ((((((_arg1 >= _local4.cachedStartTime)) && (!(_local4.cachedPaused)))) && (!(_local4.gc)))))){
if (!_local4.cachedReversed){
_local4.renderTime(((_arg1 - _local4.cachedStartTime) * _local4.cachedTimeScale), _arg2, false);
} else {
_local5 = (_local4.cacheIsDirty) ? _local4.totalDuration : _local4.cachedTotalDuration;
_local4.renderTime((_local5 - ((_arg1 - _local4.cachedStartTime) * _local4.cachedTimeScale)), _arg2, false);
};
};
_local4 = _local6;
};
}
public function addChild(_arg1:TweenCore):void{
if (((!(_arg1.cachedOrphan)) && (_arg1.timeline))){
_arg1.timeline.remove(_arg1, true);
};
_arg1.timeline = this;
if (_arg1.gc){
_arg1.setEnabled(true, true);
};
if (_firstChild){
_firstChild.prevNode = _arg1;
};
_arg1.nextNode = _firstChild;
_firstChild = _arg1;
_arg1.prevNode = null;
_arg1.cachedOrphan = false;
}
public function remove(_arg1:TweenCore, _arg2:Boolean=false):void{
if (_arg1.cachedOrphan){
return;
};
if (!_arg2){
_arg1.setEnabled(false, true);
};
if (_arg1.nextNode){
_arg1.nextNode.prevNode = _arg1.prevNode;
} else {
if (_lastChild == _arg1){
_lastChild = _arg1.prevNode;
};
};
if (_arg1.prevNode){
_arg1.prevNode.nextNode = _arg1.nextNode;
} else {
if (_firstChild == _arg1){
_firstChild = _arg1.nextNode;
};
};
_arg1.cachedOrphan = true;
}
public function get rawTime():Number{
return (this.cachedTotalTime);
}
}
}//package com.greensock.core
Section 4
//TweenCore (com.greensock.core.TweenCore)
package com.greensock.core {
import com.greensock.*;
public class TweenCore {
public var initted:Boolean;
protected var _hasUpdate:Boolean;
public var active:Boolean;
protected var _delay:Number;
public var cachedReversed:Boolean;
public var nextNode:TweenCore;
public var cachedTime:Number;
protected var _rawPrevTime:Number;// = -1
public var vars:Object;
public var cachedTotalTime:Number;
public var data;
public var timeline:SimpleTimeline;
public var cachedOrphan:Boolean;
public var cachedStartTime:Number;
public var prevNode:TweenCore;
public var cachedDuration:Number;
public var gc:Boolean;
public var cachedPauseTime:Number;
public var cacheIsDirty:Boolean;
public var cachedPaused:Boolean;
public var cachedTimeScale:Number;
public var cachedTotalDuration:Number;
public static const version:Number = 1.391;
protected static var _classInitted:Boolean;
public function TweenCore(_arg1:Number=0, _arg2:Object=null){
this.vars = ((_arg2)!=null) ? _arg2 : {};
this.cachedDuration = (this.cachedTotalDuration = _arg1);
_delay = (this.vars.delay) ? Number(this.vars.delay) : 0;
this.cachedTimeScale = (this.vars.timeScale) ? Number(this.vars.timeScale) : 1;
this.active = Boolean((((((_arg1 == 0)) && ((_delay == 0)))) && (!((this.vars.immediateRender == false)))));
this.cachedTotalTime = (this.cachedTime = 0);
this.data = this.vars.data;
if (!_classInitted){
if (isNaN(TweenLite.rootFrame)){
TweenLite.initClass();
_classInitted = true;
} else {
return;
};
};
var _local3:SimpleTimeline = ((this.vars.timeline is SimpleTimeline)) ? this.vars.timeline : (this.vars.useFrames) ? TweenLite.rootFramesTimeline : TweenLite.rootTimeline;
this.cachedStartTime = (_local3.cachedTotalTime + _delay);
_local3.addChild(this);
if (this.vars.reversed){
this.cachedReversed = true;
};
if (this.vars.paused){
this.paused = true;
};
}
public function renderTime(_arg1:Number, _arg2:Boolean=false, _arg3:Boolean=false):void{
}
public function get delay():Number{
return (_delay);
}
public function get duration():Number{
return (this.cachedDuration);
}
public function set reversed(_arg1:Boolean):void{
if (_arg1 != this.cachedReversed){
this.cachedReversed = _arg1;
setTotalTime(this.cachedTotalTime, true);
};
}
public function set startTime(_arg1:Number):void{
var _local2:Boolean = Boolean(((!((this.timeline == null))) && (((!((_arg1 == this.cachedStartTime))) || (this.gc)))));
this.cachedStartTime = _arg1;
if (_local2){
this.timeline.addChild(this);
};
}
public function restart(_arg1:Boolean=false, _arg2:Boolean=true):void{
this.reversed = false;
this.paused = false;
this.setTotalTime((_arg1) ? -(_delay) : 0, _arg2);
}
public function set delay(_arg1:Number):void{
this.startTime = (this.startTime + (_arg1 - _delay));
_delay = _arg1;
}
public function resume():void{
this.paused = false;
}
public function get paused():Boolean{
return (this.cachedPaused);
}
public function play():void{
this.reversed = false;
this.paused = false;
}
public function set duration(_arg1:Number):void{
this.cachedDuration = (this.cachedTotalDuration = _arg1);
setDirtyCache(false);
}
public function invalidate():void{
}
public function complete(_arg1:Boolean=false, _arg2:Boolean=false):void{
if (!_arg1){
renderTime(this.totalDuration, _arg2, false);
return;
};
if (this.timeline.autoRemoveChildren){
this.setEnabled(false, false);
} else {
this.active = false;
};
if (!_arg2){
if (((((this.vars.onComplete) && ((this.cachedTotalTime == this.cachedTotalDuration)))) && (!(this.cachedReversed)))){
this.vars.onComplete.apply(null, this.vars.onCompleteParams);
} else {
if (((((this.cachedReversed) && ((this.cachedTotalTime == 0)))) && (this.vars.onReverseComplete))){
this.vars.onReverseComplete.apply(null, this.vars.onReverseCompleteParams);
};
};
};
}
public function get totalTime():Number{
return (this.cachedTotalTime);
}
public function get startTime():Number{
return (this.cachedStartTime);
}
public function get reversed():Boolean{
return (this.cachedReversed);
}
public function set currentTime(_arg1:Number):void{
setTotalTime(_arg1, false);
}
protected function setDirtyCache(_arg1:Boolean=true):void{
var _local2:TweenCore = (_arg1) ? this : this.timeline;
while (_local2) {
_local2.cacheIsDirty = true;
_local2 = _local2.timeline;
};
}
public function reverse(_arg1:Boolean=true):void{
this.reversed = true;
if (_arg1){
this.paused = false;
} else {
if (this.gc){
this.setEnabled(true, false);
};
};
}
public function set paused(_arg1:Boolean):void{
if (((!((_arg1 == this.cachedPaused))) && (this.timeline))){
if (_arg1){
this.cachedPauseTime = this.timeline.rawTime;
} else {
this.cachedStartTime = (this.cachedStartTime + (this.timeline.rawTime - this.cachedPauseTime));
this.cachedPauseTime = NaN;
setDirtyCache(false);
};
this.cachedPaused = _arg1;
this.active = Boolean(((((!(this.cachedPaused)) && ((this.cachedTotalTime > 0)))) && ((this.cachedTotalTime < this.cachedTotalDuration))));
};
if (((!(_arg1)) && (this.gc))){
this.setTotalTime(this.cachedTotalTime, false);
this.setEnabled(true, false);
};
}
public function kill():void{
setEnabled(false, false);
}
public function set totalTime(_arg1:Number):void{
setTotalTime(_arg1, false);
}
public function get currentTime():Number{
return (this.cachedTime);
}
protected function setTotalTime(_arg1:Number, _arg2:Boolean=false):void{
var _local3:Number;
var _local4:Number;
if (this.timeline){
_local3 = (((this.cachedPauseTime) || ((this.cachedPauseTime == 0)))) ? this.cachedPauseTime : this.timeline.cachedTotalTime;
if (this.cachedReversed){
_local4 = (this.cacheIsDirty) ? this.totalDuration : this.cachedTotalDuration;
this.cachedStartTime = (_local3 - ((_local4 - _arg1) / this.cachedTimeScale));
} else {
this.cachedStartTime = (_local3 - (_arg1 / this.cachedTimeScale));
};
if (!this.timeline.cacheIsDirty){
setDirtyCache(false);
};
if (this.cachedTotalTime != _arg1){
renderTime(_arg1, _arg2, false);
};
};
}
public function pause():void{
this.paused = true;
}
public function set totalDuration(_arg1:Number):void{
this.duration = _arg1;
}
public function get totalDuration():Number{
return (this.cachedTotalDuration);
}
public function setEnabled(_arg1:Boolean, _arg2:Boolean=false):Boolean{
this.gc = !(_arg1);
if (_arg1){
this.active = Boolean(((((!(this.cachedPaused)) && ((this.cachedTotalTime > 0)))) && ((this.cachedTotalTime < this.cachedTotalDuration))));
if (((!(_arg2)) && (this.cachedOrphan))){
this.timeline.addChild(this);
};
} else {
this.active = false;
if (((!(_arg2)) && (!(this.cachedOrphan)))){
this.timeline.remove(this, true);
};
};
return (false);
}
}
}//package com.greensock.core
Section 5
//TweenLite (com.greensock.TweenLite)
package com.greensock {
import flash.events.*;
import flash.display.*;
import com.greensock.core.*;
import flash.utils.*;
import com.greensock.plugins.*;
public class TweenLite extends TweenCore {
protected var _hasPlugins:Boolean;
public var propTweenLookup:Object;
public var cachedPT1:PropTween;
protected var _overwrite:int;
protected var _ease:Function;
public var target:Object;
public var ratio:Number;// = 0
protected var _overwrittenProps:Object;
protected var _notifyPluginsOfEnabled:Boolean;
public static const version:Number = 11.39;
public static var rootTimeline:SimpleTimeline;
public static var fastEaseLookup:Dictionary = new Dictionary(false);
public static var onPluginEvent:Function;
public static var rootFramesTimeline:SimpleTimeline;
public static var defaultEase:Function = TweenLite.easeOut;
public static var plugins:Object = {};
public static var masterList:Dictionary = new Dictionary(false);
public static var overwriteManager:Object;
public static var rootFrame:Number;
public static var killDelayedCallsTo:Function = TweenLite.killTweensOf;
private static var _shape:Shape = new Shape();
protected static var _reservedProps:Object = {ease:1, delay:1, overwrite:1, onComplete:1, onCompleteParams:1, useFrames:1, runBackwards:1, startAt:1, onUpdate:1, onUpdateParams:1, roundProps:1, onStart:1, onStartParams:1, onInit:1, onInitParams:1, onReverseComplete:1, onReverseCompleteParams:1, onRepeat:1, onRepeatParams:1, proxiedEase:1, easeParams:1, yoyo:1, onCompleteListener:1, onUpdateListener:1, onStartListener:1, onReverseCompleteListener:1, onRepeatListener:1, orientToBezier:1, timeScale:1, immediateRender:1, repeat:1, repeatDelay:1, timeline:1, data:1, paused:1};
public function TweenLite(_arg1:Object, _arg2:Number, _arg3:Object){
var _local5:TweenLite;
super(_arg2, _arg3);
this.target = _arg1;
if ((((this.target is TweenCore)) && (this.vars.timeScale))){
this.cachedTimeScale = 1;
};
propTweenLookup = {};
_ease = defaultEase;
_overwrite = (((!((Number(_arg3.overwrite) > -1))) || (((!(overwriteManager.enabled)) && ((_arg3.overwrite > 1)))))) ? overwriteManager.mode : int(_arg3.overwrite);
var _local4:Array = masterList[_arg1];
if (!_local4){
masterList[_arg1] = [this];
} else {
if (_overwrite == 1){
for each (_local5 in _local4) {
if (!_local5.gc){
_local5.setEnabled(false, false);
};
};
masterList[_arg1] = [this];
} else {
_local4[_local4.length] = this;
};
};
if (((this.active) || (this.vars.immediateRender))){
renderTime(0, false, true);
};
}
protected function easeProxy(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
return (this.vars.proxiedEase.apply(null, arguments.concat(this.vars.easeParams)));
}
override public function renderTime(_arg1:Number, _arg2:Boolean=false, _arg3:Boolean=false):void{
var _local4:Boolean;
var _local5:Number = this.cachedTime;
if (_arg1 >= this.cachedDuration){
this.cachedTotalTime = (this.cachedTime = this.cachedDuration);
this.ratio = 1;
_local4 = true;
if (this.cachedDuration == 0){
if ((((((_arg1 == 0)) || ((_rawPrevTime < 0)))) && (!((_rawPrevTime == _arg1))))){
_arg3 = true;
};
_rawPrevTime = _arg1;
};
} else {
if (_arg1 <= 0){
this.cachedTotalTime = (this.cachedTime = (this.ratio = 0));
if (_arg1 < 0){
this.active = false;
if (this.cachedDuration == 0){
if (_rawPrevTime > 0){
_arg3 = true;
_local4 = true;
};
_rawPrevTime = _arg1;
};
};
if (((this.cachedReversed) && (!((_local5 == 0))))){
_local4 = true;
};
} else {
this.cachedTotalTime = (this.cachedTime = _arg1);
this.ratio = _ease(_arg1, 0, 1, this.cachedDuration);
};
};
if ((((this.cachedTime == _local5)) && (!(_arg3)))){
return;
};
if (!this.initted){
init();
if (((!(_local4)) && (this.cachedTime))){
this.ratio = _ease(this.cachedTime, 0, 1, this.cachedDuration);
};
};
if (((!(this.active)) && (!(this.cachedPaused)))){
this.active = true;
};
if ((((((((_local5 == 0)) && (this.vars.onStart))) && (!((this.cachedTime == 0))))) && (!(_arg2)))){
this.vars.onStart.apply(null, this.vars.onStartParams);
};
var _local6:PropTween = this.cachedPT1;
while (_local6) {
_local6.target[_local6.property] = (_local6.start + (this.ratio * _local6.change));
_local6 = _local6.nextNode;
};
if (((_hasUpdate) && (!(_arg2)))){
this.vars.onUpdate.apply(null, this.vars.onUpdateParams);
};
if (_local4){
if (((_hasPlugins) && (this.cachedPT1))){
onPluginEvent("onComplete", this);
};
complete(true, _arg2);
};
}
override public function setEnabled(_arg1:Boolean, _arg2:Boolean=false):Boolean{
var _local3:Array;
if (_arg1){
_local3 = TweenLite.masterList[this.target];
if (!_local3){
TweenLite.masterList[this.target] = [this];
} else {
_local3[_local3.length] = this;
};
};
super.setEnabled(_arg1, _arg2);
if (((_notifyPluginsOfEnabled) && (this.cachedPT1))){
return (onPluginEvent((_arg1) ? "onEnable" : "onDisable", this));
};
return (false);
}
protected function init():void{
var _local1:String;
var _local2:int;
var _local3:*;
var _local4:Boolean;
var _local5:Array;
var _local6:PropTween;
if (this.vars.onInit){
this.vars.onInit.apply(null, this.vars.onInitParams);
};
if (typeof(this.vars.ease) == "function"){
_ease = this.vars.ease;
};
if (this.vars.easeParams){
this.vars.proxiedEase = _ease;
_ease = easeProxy;
};
this.cachedPT1 = null;
this.propTweenLookup = {};
for (_local1 in this.vars) {
if ((((_local1 in _reservedProps)) && (!((((_local1 == "timeScale")) && ((this.target is TweenCore))))))){
} else {
if ((((_local1 in plugins)) && (new ((plugins[_local1] as Class)).onInitTween(this.target, this.vars[_local1], this)))){
this.cachedPT1 = new PropTween(_local3, "changeFactor", 0, 1, ((_local3.overwriteProps.length)==1) ? _local3.overwriteProps[0] : "_MULTIPLE_", true, this.cachedPT1);
if (this.cachedPT1.name == "_MULTIPLE_"){
_local2 = _local3.overwriteProps.length;
while (--_local2 > -1) {
this.propTweenLookup[_local3.overwriteProps[_local2]] = this.cachedPT1;
};
} else {
this.propTweenLookup[this.cachedPT1.name] = this.cachedPT1;
};
if (_local3.priority){
this.cachedPT1.priority = _local3.priority;
_local4 = true;
};
if (((_local3.onDisable) || (_local3.onEnable))){
_notifyPluginsOfEnabled = true;
};
_hasPlugins = true;
} else {
this.cachedPT1 = new PropTween(this.target, _local1, Number(this.target[_local1]), ((typeof(this.vars[_local1]))=="number") ? (Number(this.vars[_local1]) - this.target[_local1]) : Number(this.vars[_local1]), _local1, false, this.cachedPT1);
this.propTweenLookup[_local1] = this.cachedPT1;
};
};
};
if (_local4){
onPluginEvent("onInit", this);
};
if (this.vars.runBackwards){
_local6 = this.cachedPT1;
while (_local6) {
_local6.start = (_local6.start + _local6.change);
_local6.change = -(_local6.change);
_local6 = _local6.nextNode;
};
};
_hasUpdate = Boolean(!((this.vars.onUpdate == null)));
if (_overwrittenProps){
killVars(_overwrittenProps);
if (this.cachedPT1 == null){
this.setEnabled(false, false);
};
};
if ((((((((_overwrite > 1)) && (this.cachedPT1))) && (masterList[this.target]))) && ((_local5.length > 1)))){
if (overwriteManager.manageOverwrites(this, this.propTweenLookup, _local5, _overwrite)){
init();
};
};
this.initted = true;
}
public function killVars(_arg1:Object, _arg2:Boolean=true):Boolean{
var _local3:String;
var _local4:PropTween;
var _local5:Boolean;
if (_overwrittenProps == null){
_overwrittenProps = {};
};
for (_local3 in _arg1) {
if ((_local3 in propTweenLookup)){
_local4 = propTweenLookup[_local3];
if (((_local4.isPlugin) && ((_local4.name == "_MULTIPLE_")))){
_local4.target.killProps(_arg1);
if (_local4.target.overwriteProps.length == 0){
_local4.name = "";
};
};
if (_local4.name != "_MULTIPLE_"){
if (_local4.nextNode){
_local4.nextNode.prevNode = _local4.prevNode;
};
if (_local4.prevNode){
_local4.prevNode.nextNode = _local4.nextNode;
} else {
if (this.cachedPT1 == _local4){
this.cachedPT1 = _local4.nextNode;
};
};
if (((_local4.isPlugin) && (_local4.target.onDisable))){
_local4.target.onDisable();
if (_local4.target.activeDisable){
_local5 = true;
};
};
delete propTweenLookup[_local3];
};
};
if (((_arg2) && (!((_arg1 == _overwrittenProps))))){
_overwrittenProps[_local3] = 1;
};
};
return (_local5);
}
override public function invalidate():void{
if (((_notifyPluginsOfEnabled) && (this.cachedPT1))){
onPluginEvent("onDisable", this);
};
this.cachedPT1 = null;
_overwrittenProps = null;
_hasUpdate = (this.initted = (this.active = (_notifyPluginsOfEnabled = false)));
this.propTweenLookup = {};
}
public static function initClass():void{
rootFrame = 0;
rootTimeline = new SimpleTimeline(null);
rootFramesTimeline = new SimpleTimeline(null);
rootTimeline.cachedStartTime = (getTimer() * 0.001);
rootFramesTimeline.cachedStartTime = rootFrame;
rootTimeline.autoRemoveChildren = true;
rootFramesTimeline.autoRemoveChildren = true;
_shape.addEventListener(Event.ENTER_FRAME, updateAll, false, 0, true);
if (overwriteManager == null){
overwriteManager = {mode:1, enabled:false};
};
}
public static function killTweensOf(_arg1:Object, _arg2:Boolean=false, _arg3:Object=null):void{
var _local4:Array;
var _local5:int;
var _local6:TweenLite;
if ((_arg1 in masterList)){
_local4 = masterList[_arg1];
_local5 = _local4.length;
while (--_local5 > -1) {
_local6 = _local4[_local5];
if (!_local6.gc){
if (_arg2){
_local6.complete(false, false);
};
if (_arg3 != null){
_local6.killVars(_arg3);
};
if ((((_arg3 == null)) || ((((_local6.cachedPT1 == null)) && (_local6.initted))))){
_local6.setEnabled(false, false);
};
};
};
if (_arg3 == null){
delete masterList[_arg1];
};
};
}
public static function from(_arg1:Object, _arg2:Number, _arg3:Object):TweenLite{
_arg3.runBackwards = true;
if (!("immediateRender" in _arg3)){
_arg3.immediateRender = true;
};
return (new TweenLite(_arg1, _arg2, _arg3));
}
protected static function easeOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
_arg1 = (1 - (_arg1 / _arg4));
return ((1 - (_arg1 * _arg1)));
}
public static function delayedCall(_arg1:Number, _arg2:Function, _arg3:Array=null, _arg4:Boolean=false):TweenLite{
return (new TweenLite(_arg2, 0, {delay:_arg1, onComplete:_arg2, onCompleteParams:_arg3, immediateRender:false, useFrames:_arg4, overwrite:0}));
}
protected static function updateAll(_arg1:Event=null):void{
var _local2:Dictionary;
var _local3:Object;
var _local4:Array;
var _local5:int;
rootTimeline.renderTime((((getTimer() * 0.001) - rootTimeline.cachedStartTime) * rootTimeline.cachedTimeScale), false, false);
rootFrame = (rootFrame + 1);
rootFramesTimeline.renderTime(((rootFrame - rootFramesTimeline.cachedStartTime) * rootFramesTimeline.cachedTimeScale), false, false);
if (!(rootFrame % 60)){
_local2 = masterList;
for (_local3 in _local2) {
_local4 = _local2[_local3];
_local5 = _local4.length;
while (--_local5 > -1) {
if (TweenLite(_local4[_local5]).gc){
_local4.splice(_local5, 1);
};
};
if (_local4.length == 0){
delete _local2[_local3];
};
};
};
}
public static function to(_arg1:Object, _arg2:Number, _arg3:Object):TweenLite{
return (new TweenLite(_arg1, _arg2, _arg3));
}
}
}//package com.greensock
Section 6
//IntroBall (graphics.sticky.IntroBall)
package graphics.sticky {
import flash.events.*;
import flash.display.*;
public dynamic class IntroBall extends MovieClip {
public function IntroBall(){
addFrameScript(108, this.frame109, 142, this.frame143);
}
function frame109(){
stop();
dispatchEvent(new Event("ready"));
}
function frame143(){
stop();
}
}
}//package graphics.sticky
Section 7
//Ring (graphics.sticky.Ring)
package graphics.sticky {
import flash.display.*;
public dynamic class Ring extends MovieClip {
public var content:MovieClip;
}
}//package graphics.sticky
Section 8
//StickAnimation (graphics.sticky.StickAnimation)
package graphics.sticky {
import flash.display.*;
public dynamic class StickAnimation extends MovieClip {
public function StickAnimation(){
addFrameScript(0, this.frame1);
}
function frame1(){
stop();
}
}
}//package graphics.sticky
Section 9
//StickyHand (graphics.sticky.StickyHand)
package graphics.sticky {
import flash.display.*;
public dynamic class StickyHand extends MovieClip {
public var stickAnimation:MovieClip;
public var stickAnimationCorner:StickAnimation;
public var content:MovieClip;
}
}//package graphics.sticky
Section 10
//StickyApplication (nu.random.cocacola.sticky.StickyApplication)
package nu.random.cocacola.sticky {
import flash.events.*;
import flash.display.*;
import flash.ui.*;
public class StickyApplication extends Sprite {
public function StickyApplication(){
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(_arg1:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.stageFocusRect = false;
var _local2:ContextMenu = new ContextMenu();
_local2.hideBuiltInItems();
contextMenu = _local2;
addChild(new StickyView2());
}
}
}//package nu.random.cocacola.sticky
Section 11
//StickyView2 (nu.random.cocacola.sticky.StickyView2)
package nu.random.cocacola.sticky {
import flash.events.*;
import org.cove.ape.*;
import flash.display.*;
import flash.geom.*;
import nu.random.utils.sound.*;
import com.greensock.*;
import graphics.sticky.*;
import flash.filters.*;
import nu.random.cocacola.utils.*;
import sounds.sticky.*;
import sound.sticky.*;
public class StickyView2 extends Sprite {
private var _preventSlapSound:Boolean;
private var _ring:Ring;
private var _cx:Number;// = 0
private var _cy:Number;// = 0
private var _slapSoundA:ISoundControl;
private var _stickHand:StickyHand;
private var _slapSoundB:ISoundControl;
private var _slapSoundC:ISoundControl;
private var _released:Boolean;// = false
private var _shineShadow:DropShadowFilter;
private var particles:Array;
private var constraints:Array;
private var _slapSoundD:ISoundControl;
private var _shadow:DropShadowFilter;
private var _speed:Number;
private var wall:Group;
private var _canCheckForProximity:Boolean;// = true
private var _hand:Sprite;
private var _wooshSound:ISoundControl;
private var g:Group;
private var _shine:Sprite;
private var _intro:IntroBall;
private var _bevel:BevelFilter;
public function StickyView2(){
var _local1:CircleParticle;
var _local2:SpringConstraint;
particles = [];
constraints = [];
_bevel = new BevelFilter(4, 0, 0xFF3300, 1, 16724737, 1, 4, 4, 2, 2);
_shadow = new DropShadowFilter(5, 0, 10617089, 1, 2, 2, 0.45, 1);
_shineShadow = new DropShadowFilter(4, 0, 0xFFFFFF, 1, 0, 0, 0.6, 2, false, false, true);
_intro = new IntroBall();
_wooshSound = SoundManager.instance.addSound(new WooshSound());
_slapSoundA = SoundManager.instance.addSound(new SlapSoundA());
_slapSoundB = SoundManager.instance.addSound(new SlapSoundB());
_slapSoundC = SoundManager.instance.addSound(new SlapSoundC());
_slapSoundD = SoundManager.instance.addSound(new SlapSoundD());
super();
APEngine.container = new Sprite();
APEngine.damping = 0.99;
APEngine.init(0.5);
APEngine.addMasslessForce(new Vector(0, 15));
_hand = new Sprite();
_shine = new Sprite();
_ring = new Ring();
_stickHand = new StickyHand();
addChild(_hand);
_hand.addChild(_ring);
_hand.addChild(_shine);
_hand.addChild(_stickHand);
_hand.visible = false;
_stickHand.stickAnimation.stop();
_stickHand.stickAnimation.visible = false;
_stickHand.stickAnimationCorner.stop();
_stickHand.stickAnimationCorner.visible = false;
_hand.filters = [_bevel];
_shine.filters = [_shineShadow];
g = new Group(false);
var _local3 = 6;
var _local4:int;
while (_local4 < _local3) {
_local1 = new CircleParticle(400, 100, 2, false, 1);
_local1.friction = 1;
_local1.elasticity = 0;
particles.push(_local1);
g.addParticle(_local1);
if ((((_local4 > 0)) && ((_local4 < (_local3 - 1))))){
_local2 = new SpringConstraint(particles[_local4], particles[(_local4 - 1)], 0.7, false);
constraints.push(_local2);
_local2.restLength = 10;
g.addConstraint(_local2);
} else {
if (_local4 == (_local3 - 1)){
_local2 = new SpringConstraint(particles[_local4], particles[(_local4 - 1)], 1, false);
constraints.push(_local2);
_local2.restLength = 160;
g.addConstraint(_local2);
};
};
if (_local4 > 0){
_local1.collisionSignal.add(onHandCollision);
};
_local4++;
};
APEngine.addGroup(g);
addChild(_intro);
_intro.stop();
_intro.addEventListener("ready", onIntroReady);
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(_arg1:Event):void{
stage.addEventListener(Event.RESIZE, onResize);
onResize(null);
TweenLite.delayedCall(1, _intro.play);
}
private function stickWhenClose():void{
_canCheckForProximity = true;
}
private function onMouseDown(_arg1:MouseEvent):void{
_released = true;
_canCheckForProximity = false;
particles[0].fixed = false;
TweenLite.killDelayedCallsTo(stickWhenClose);
TweenLite.delayedCall(0.25, stickWhenClose);
}
private function onIntroReady(_arg1:Event):void{
_intro.addEventListener(MouseEvent.MOUSE_MOVE, onIntroRollOver);
}
private function calculateStretch():Number{
var _local1:int = constraints.length;
var _local2:Number = 0;
var _local3:Number = 0;
var _local4:int;
while (_local4 < _local1) {
_local2 = (_local2 + (constraints[_local4] as SpringConstraint).currLength);
_local3 = (_local3 + (constraints[_local4] as SpringConstraint).restLength);
_local4++;
};
return (Math.min(((_local3 * 3) / _local2), 1));
}
private function onIntroRollOver(_arg1:MouseEvent):void{
_intro.removeEventListener(MouseEvent.MOUSE_MOVE, onIntroRollOver);
_intro.play();
start();
}
private function onHandCollision(_arg1:AbstractParticle, _arg2:AbstractParticle):void{
var slapSound:ISoundControl;
var nr:int;
var dx:Number;
var dy:Number;
var cdx:Number;
var cdy:Number;
var angle:Number;
var cangle:Number;
var dangle:Number;
var particle = _arg1;
var target = _arg2;
if (!particle.fixed){
particle.fixed = true;
if ((((particle == particles[(particles.length - 2)])) || ((particle == particles[(particles.length - 1)])))){
if (((!(_preventSlapSound)) && ((particle == particles[(particles.length - 1)])))){
nr = int((Math.random() * 4));
switch (nr){
case 0:
slapSound = _slapSoundA;
break;
case 1:
slapSound = _slapSoundB;
break;
case 2:
slapSound = _slapSoundC;
break;
case 3:
slapSound = _slapSoundD;
break;
};
slapSound.volume = (Math.max((_speed - 10), 0) / 200);
slapSound.play();
_preventSlapSound = true;
TweenLite.delayedCall(0.2, function ():void{
_preventSlapSound = false;
});
};
if (((particles[(particles.length - 2)].fixed) && (particles[(particles.length - 1)].fixed))){
dx = (particles[(particles.length - 1)].px - particles[(particles.length - 2)].px);
dy = (particles[(particles.length - 1)].py - particles[(particles.length - 2)].py);
cdx = (particles[(particles.length - 1)].px - (stage.stageWidth * 0.5));
cdy = (particles[(particles.length - 1)].py - (stage.stageHeight * 0.5));
angle = ((Math.atan2(dy, dx) / Math.PI) * 180);
cangle = ((Math.atan2(cdy, cdx) / Math.PI) * 180);
if (angle < 0){
angle = (angle + 360);
};
if (cangle < 0){
cangle = (cangle + 360);
};
if ((angle % 90) == 0){
_stickHand.stickAnimation.visible = true;
_stickHand.stickAnimationCorner.visible = false;
} else {
dangle = (angle - cangle);
if (dangle > 0){
dangle = (dangle - 360);
};
if (dangle > -180){
_stickHand.stickAnimationCorner.scaleX = 1;
} else {
_stickHand.stickAnimationCorner.scaleX = -1;
};
_stickHand.stickAnimation.visible = false;
_stickHand.stickAnimationCorner.visible = true;
_stickHand.stickAnimationCorner.gotoAndPlay(2);
};
};
};
};
}
private function checkStickyness(_arg1:CircleParticle):void{
var _local2:CircleParticle;
var _local9:Number;
var _local10:Number;
var _local3:int = particles.length;
var _local4:int;
var _local5 = 1;
while (_local5 < _local3) {
if (_arg1 == particles[_local5]){
_local2 = particles[(_local5 - 1)];
_local4 = (_local5 - 1);
};
_local5++;
};
var _local6:Number = (_local2.px - _arg1.px);
var _local7:Number = (_local2.py - _arg1.py);
var _local8:SpringConstraint = constraints[_local4];
if ((((_local8.stiffness == 1)) && (!(particles[(particles.length - 2)].fixed)))){
_local6 = (mouseX - _arg1.px);
_local7 = (mouseY - _arg1.py);
_local9 = Math.min(stage.stageWidth, stage.stageHeight);
if (Math.sqrt(((_local6 * _local6) + (_local7 * _local7))) > (_local9 * 0.4)){
_arg1.fixed = false;
_stickHand.stickAnimation.play();
};
} else {
_local10 = (1 - ((_local4 - 1) / particles.length));
if (Math.sqrt(((_local6 * _local6) + (_local7 * _local7))) > ((_local8.restLength * 8) * _local10)){
_arg1.fixed = false;
};
};
}
private function start():void{
var _local1:int;
while (_local1 < particles.length) {
particles[_local1].px = (mouseX + (_local1 * 1));
particles[_local1].py = (mouseY + (_local1 * 2));
_local1++;
};
_wooshSound.play(0, -1);
addEventListener(Event.ENTER_FRAME, animate);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
private function animate(_arg1:Event):void{
var _local11:CircleParticle;
var _local12:Point;
var _local14:Curve;
var _local17:Number;
var _local18:Number;
var _local19:Number;
if (!_hand.visible){
_hand.visible = true;
};
if (!_released){
particles[0].fixed = true;
particles[0].px = mouseX;
particles[0].py = mouseY;
} else {
if (_canCheckForProximity){
_local17 = (particles[0].px - mouseX);
_local18 = (particles[0].py - mouseY);
_local19 = Math.sqrt(((_local17 * _local17) + (_local18 * _local18)));
if (_local19 < 70){
_released = false;
};
};
};
var _local2:Number = (_cx - particles[(particles.length - 1)].px);
var _local3:Number = (_cy - particles[(particles.length - 1)].py);
_cx = particles[(particles.length - 1)].px;
_cy = particles[(particles.length - 1)].py;
_speed = Math.sqrt(((_local2 * _local2) + (_local3 * _local3)));
_wooshSound.volume = (Math.max((_speed - 50), 0) / 1000);
var _local4 = 1;
while (_local4 < particles.length) {
if (particles[_local4].fixed){
checkStickyness(particles[_local4]);
};
_local4++;
};
if (((particles[(particles.length - 2)].fixed) && (particles[(particles.length - 1)].fixed))){
_stickHand.content.visible = false;
_stickHand.content.gotoAndStop(16);
} else {
if (((particles[(particles.length - 2)].fixed) || (particles[(particles.length - 1)].fixed))){
_stickHand.stickAnimation.visible = false;
_stickHand.stickAnimationCorner.visible = false;
_stickHand.content.visible = true;
_stickHand.content.stop();
} else {
_stickHand.stickAnimation.visible = false;
_stickHand.stickAnimationCorner.visible = false;
_stickHand.content.visible = true;
_stickHand.content.nextFrame();
};
};
APEngine.step();
var _local5:CircleParticle = particles[1];
var _local6:CircleParticle = particles[0];
_ring.x = _local6.px;
_ring.y = _local6.py;
var _local7:Number = (_local6.px - _local5.px);
var _local8:Number = (_local6.py - _local5.py);
_ring.rotation = ((Math.atan2(_local8, _local7) / Math.PI) * 180);
_local7 = (particles[(particles.length - 1)].px - (stage.stageWidth * 0.5));
_local8 = (particles[(particles.length - 1)].py - (stage.stageHeight * 0.5));
if ((((((_stickHand.rotation == 0)) || ((_stickHand.rotation == -180)))) || ((_stickHand.rotation == 180)))){
if ((((_local7 > 0)) && ((_stickHand.rotation == 0)))){
_stickHand.stickAnimation.scaleX = -1;
} else {
if ((((_local7 < 0)) && ((((_stickHand.rotation == -180)) || ((_stickHand.rotation == 180)))))){
_stickHand.stickAnimation.scaleX = -1;
} else {
_stickHand.stickAnimation.scaleX = 1;
};
};
};
if ((((_stickHand.rotation == -90)) || ((_stickHand.rotation == 90)))){
if ((((_local8 > 0)) && ((_stickHand.rotation == 90)))){
_stickHand.stickAnimation.scaleX = -1;
} else {
if ((((_local8 < 0)) && ((_stickHand.rotation == -90)))){
_stickHand.stickAnimation.scaleX = -1;
} else {
_stickHand.stickAnimation.scaleX = 1;
};
};
};
var _local9:int = particles.length;
var _local10:Array = [];
_local4 = 0;
while (_local4 < (_local9 - 1)) {
_local11 = particles[_local4];
_local12 = new Point(_local11.px, _local11.py);
_local10.push(_local12);
_local4++;
};
var _local13:Array = Curve.getCurvesFromPointArray(_local10);
var _local15:Graphics = _hand.graphics;
_local15.clear();
var _local16:Number = calculateStretch();
_local9 = _local13.length;
_local15.lineStyle((18.15 * _local16), 0xFF0000);
_local15.moveTo(_local10[0].x, _local10[0].y);
_local4 = 0;
while (_local4 < _local9) {
_local14 = _local13[_local4];
_local14.drawCurve(_local15);
_local4++;
};
_local15 = _shine.graphics;
_local15.clear();
_local15.lineStyle(3, 0xFFFFFF, 0.5);
_local15.moveTo((_local10[0].x + 3), _local10[0].y);
_local4 = 0;
while (_local4 < _local9) {
_local14 = _local13[_local4];
_local14.drawCurve(_local15, 3);
_local4++;
};
_local5 = particles[(particles.length - 2)];
_local6 = particles[(particles.length - 1)];
_stickHand.x = _local5.px;
_stickHand.y = _local5.py;
_local7 = (_local6.px - _local5.px);
_local8 = (_local6.py - _local5.py);
_stickHand.rotation = (-90 + ((Math.atan2(_local8, _local7) / Math.PI) * 180));
}
private function onResize(_arg1:Event):void{
_intro.x = (stage.stageWidth * 0.5);
_intro.y = (stage.stageHeight * 0.5);
var _local2:int = particles.length;
var _local3:int;
var _local4 = 1;
while (_local4 < _local2) {
particles[_local4].fixed = false;
_local4++;
};
if (wall){
APEngine.removeGroup(wall);
};
wall = new Group();
var _local5:Number = 500;
wall.addParticle(new RectangleParticle((-(_local5) * 0.5), (stage.stageHeight * 0.5), _local5, (stage.stageHeight + _local5), 0, true, 1, 0, 1));
wall.addParticle(new RectangleParticle((stage.stageWidth + (_local5 * 0.5)), (stage.stageHeight * 0.5), _local5, (stage.stageHeight + _local5), 0, true, 1, 0, 1));
wall.addParticle(new RectangleParticle((stage.stageWidth * 0.5), (-(_local5) * 0.5), stage.stageWidth, _local5, 0, true, 1, 0, 1));
wall.addParticle(new RectangleParticle((stage.stageWidth * 0.5), (stage.stageHeight + (_local5 * 0.5)), stage.stageWidth, _local5, 0, true, 1, 0, 1));
wall.addCollidable(g);
APEngine.addGroup(wall);
}
}
}//package nu.random.cocacola.sticky
Section 12
//Curve (nu.random.cocacola.utils.Curve)
package nu.random.cocacola.utils {
import flash.display.*;
import flash.geom.*;
public class Curve {
public var length:Number;// = 0
public var cx:Number;
public var p2x:Number;
public var p1x:Number;
public var p1y:Number;
public var cy:Number;
public var p2y:Number;
public function Curve(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number){
this.p1x = _arg1;
this.p1y = _arg2;
this.p2x = _arg5;
this.p2y = _arg6;
this.cx = _arg3;
this.cy = _arg4;
}
public function getCurveLengthByIntegral():Number{
var _local1:Number = ((p1x - (2 * cx)) + p2x);
var _local2:Number = ((p1y - (2 * cy)) + p2y);
var _local3:Number = ((2 * cx) - (2 * p1x));
var _local4:Number = ((2 * cy) - (2 * p1y));
var _local5:Number = (4 * ((_local1 * _local1) + (_local2 * _local2)));
var _local6:Number = (4 * ((_local1 * _local3) + (_local2 * _local4)));
var _local7:Number = ((_local3 * _local3) + (_local4 * _local4));
var _local8:Number = (2 * Math.sqrt(((_local5 + _local6) + _local7)));
var _local9:Number = Math.sqrt(_local5);
var _local10:Number = ((2 * _local5) * _local9);
var _local11:Number = (2 * Math.sqrt(_local7));
var _local12:Number = (_local6 / _local9);
return (((((_local10 * _local8) + ((_local9 * _local6) * (_local8 - _local11))) + ((((4 * _local7) * _local5) - (_local6 * _local6)) * Math.log(((((2 * _local9) + _local12) + _local8) / (_local12 + _local11))))) / (4 * _local10)));
}
public function getPointOnCurve(_arg1:Number=0.5):Point{
var _local2:Number = (1 - _arg1);
var _local3:Number = (((Math.pow(_local2, 2) * p1x) + (((2 * _local2) * _arg1) * cx)) + (Math.pow(_arg1, 2) * p2x));
var _local4:Number = (((Math.pow(_local2, 2) * p1y) + (((2 * _local2) * _arg1) * cy)) + (Math.pow(_arg1, 2) * p2y));
return (new Point(_local3, _local4));
}
public function toPointsArray(_arg1:int=20):Array{
var _local2:Array = [];
var _local3:Number = 0;
var _local4:Number = (1 / _arg1);
while (_local3 < 1) {
_local2.push(getPointOnCurve(_local3));
_local3 = (_local3 + _local4);
};
return (_local2);
}
public function drawCurve(_arg1:Graphics, _arg2:Number=0, _arg3:Number=0):void{
_arg1.curveTo((cx + _arg2), (cy + _arg3), (p2x + _arg2), (p2y + _arg3));
}
public static function getCurvesFromPointArray(_arg1:Array):Array{
var _local4:Point;
var _local5:Point;
var _local8:Point;
var _local2:Array = [];
var _local3:Point;
var _local6:int = _arg1.length;
var _local7 = 1;
while (_local7 < _local6) {
_local4 = _arg1[(_local7 - 1)];
_local5 = _arg1[_local7];
_local8 = new Point((_local4.x + ((_local5.x - _local4.x) * 0.5)), (_local4.y + ((_local5.y - _local4.y) * 0.5)));
if (_local3){
_local2.push(new Curve(_local3.x, _local3.y, _local4.x, _local4.y, _local8.x, _local8.y));
} else {
_local2.push(new Curve(_local4.x, _local4.y, (_local4.x + ((_local8.x - _local4.x) * 0.5)), (_local4.y + ((_local8.y - _local4.y) * 0.5)), _local8.x, _local8.y));
};
_local3 = _local8;
_local7++;
};
_local2.push(new Curve(_local8.x, _local8.y, (_local8.x + ((_local5.x - _local8.x) * 0.5)), (_local8.y + ((_local5.y - _local8.y) * 0.5)), _local5.x, _local5.y));
return (_local2);
}
}
}//package nu.random.cocacola.utils
Section 13
//ISoundControl (nu.random.utils.sound.ISoundControl)
package nu.random.utils.sound {
import flash.events.*;
public interface ISoundControl extends IEventDispatcher {
function stop():void;
function get isPlaying():Boolean;
function set volume(_arg1:Number):void;
function pause():void;
function get volume():Number;
function play(_arg1:Number=0, _arg2:int=0):void;
function resume():void;
}
}//package nu.random.utils.sound
Section 14
//ISoundManager (nu.random.utils.sound.ISoundManager)
package nu.random.utils.sound {
import flash.events.*;
import flash.media.*;
public interface ISoundManager extends IEventDispatcher {
function addSound(_arg1:Sound):ISoundControl;
}
}//package nu.random.utils.sound
Section 15
//SoundControl (nu.random.utils.sound.SoundControl)
package nu.random.utils.sound {
import flash.events.*;
import flash.media.*;
public class SoundControl extends EventDispatcher implements ISoundControl {
private var _channel:SoundChannel;
private var _pausePosition:Number;// = -1
private var _sound:Sound;
private var _loops:int;
private var _manager:SoundManager;
private var _volume:Number;// = 1
public function SoundControl(_arg1:Sound, _arg2:SoundManager){
_sound = _arg1;
_manager = _arg2;
}
public function stop():void{
if (_channel){
_channel.stop();
_channel = null;
};
_manager.removeEventListener(Event.CHANGE, onSoundUpdate);
}
private function onSoundEvent(_arg1:Event):void{
switch (_arg1.type){
case Event.SOUND_COMPLETE:
if (_loops > 0){
play(0, --_loops);
} else {
if (_loops == -1){
play(0, _loops);
} else {
_manager.removeEventListener(Event.CHANGE, onSoundUpdate);
dispatchEvent(_arg1);
};
};
break;
};
}
public function set volume(_arg1:Number):void{
_volume = _arg1;
onSoundUpdate();
}
public function get sound():Sound{
return (_sound);
}
private function onSoundUpdate(_arg1:Event=null):void{
if (_channel){
_channel.soundTransform = new SoundTransform((_manager.volume * _volume));
};
}
public function get volume():Number{
return (_volume);
}
private function onSoundUnload(_arg1:Event=null):void{
var e = _arg1;
try {
_sound.close();
} catch(error:Error) {
};
stop();
}
public function get length():Number{
if (_sound){
return (_sound.length);
};
return (0);
}
public function get position():Number{
if (_channel){
return (_channel.position);
};
return (0);
}
public function get isPlaying():Boolean{
return (!((_channel == null)));
}
public function resume():void{
if (_pausePosition >= 0){
play(_pausePosition, _loops);
};
}
public function play(_arg1:Number=0, _arg2:int=0):void{
if (!_sound){
return;
};
if (_channel){
stop();
};
_pausePosition = -1;
_channel = _sound.play(_arg1, 0, new SoundTransform((_manager.volume * _volume)));
if (_channel == null){
return;
};
_loops = _arg2;
_channel.addEventListener(Event.SOUND_COMPLETE, onSoundEvent);
_manager.addEventListener(Event.CHANGE, onSoundUpdate, false, 0, true);
_manager.addEventListener(Event.UNLOAD, onSoundUnload, false, 0, true);
}
public function pause():void{
if (_channel){
_pausePosition = _channel.position;
stop();
};
}
}
}//package nu.random.utils.sound
Section 16
//SoundManager (nu.random.utils.sound.SoundManager)
package nu.random.utils.sound {
import flash.events.*;
import flash.media.*;
import flash.utils.*;
import flash.net.*;
public class SoundManager extends EventDispatcher implements ISoundManager {
private var _volume:Number;
private static var _instance:SoundManager;
public function SoundManager(_arg1:Number=1){
_volume = _arg1;
}
public function createSoundFromDefinition(_arg1:String):ISoundControl{
var cls:Class;
var definition = _arg1;
try {
cls = (getDefinitionByName(definition) as Class);
return (createSound(cls));
} catch(e:Error) {
};
return (addSound(null));
}
public function get volume():Number{
return (_volume);
}
public function set volume(_arg1:Number):void{
_volume = _arg1;
dispatchEvent(new Event(Event.CHANGE, false, false));
}
public function createSound(_arg1:Class):ISoundControl{
var snd:Sound;
var soundCls = _arg1;
try {
snd = (new (soundCls) as Sound);
} catch(e:Error) {
trace(e);
};
return (new SoundControl(snd, this));
}
public function createStream(_arg1:String, _arg2:SoundLoaderContext=null):ISoundControl{
var _local3:Sound = new Sound();
var _local4:URLRequest = new URLRequest(_arg1);
_local3.load(_local4, _arg2);
return (new SoundControl(_local3, this));
}
public function addSound(_arg1:Sound):ISoundControl{
trace(("addSound()" + _arg1));
return (new SoundControl(_arg1, this));
}
public function unload():void{
dispatchEvent(new Event(Event.UNLOAD));
}
public static function get instance():SoundManager{
if (_instance == null){
_instance = new (SoundManager);
};
return (_instance);
}
}
}//package nu.random.utils.sound
Section 17
//AbstractCollection (org.cove.ape.AbstractCollection)
package org.cove.ape {
import flash.display.*;
import flash.utils.*;
public class AbstractCollection {
private var _sprite:Sprite;
private var _particles:Array;
private var _isParented:Boolean;
private var _constraints:Array;
public function AbstractCollection(){
if (getQualifiedClassName(this) == "org.cove.ape::AbstractCollection"){
throw (new ArgumentError("AbstractCollection can't be instantiated directly"));
};
_isParented = false;
_particles = new Array();
_constraints = new Array();
}
public function removeConstraint(_arg1:AbstractConstraint):void{
var _local2:int = constraints.indexOf(_arg1);
if (_local2 == -1){
return;
};
constraints.splice(_local2, 1);
_arg1.cleanup();
}
public function getAll():Array{
return (particles.concat(constraints));
}
function checkCollisionsVsCollection(_arg1:AbstractCollection):void{
var _local5:AbstractParticle;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:AbstractParticle;
var _local10:SpringConstraint;
var _local11:SpringConstraint;
var _local12:int;
var _local2:int = _particles.length;
var _local3:int;
while (_local3 < _local2) {
_local5 = _particles[_local3];
if (!_local5.collidable){
} else {
_local6 = _arg1.particles.length;
_local7 = 0;
while (_local7 < _local6) {
_local9 = _arg1.particles[_local7];
if (_local9.collidable){
CollisionDetector.test(_local5, _local9);
};
_local7++;
};
_local8 = _arg1.constraints.length;
_local7 = 0;
while (_local7 < _local8) {
_local10 = _arg1.constraints[_local7];
if (((_local10.collidable) && (!(_local10.isConnectedTo(_local5))))){
_local10.scp.updatePosition();
CollisionDetector.test(_local5, _local10.scp);
};
_local7++;
};
};
_local3++;
};
var _local4:int = _constraints.length;
_local3 = 0;
while (_local3 < _local4) {
_local11 = _constraints[_local3];
if (!_local11.collidable){
} else {
_local6 = _arg1.particles.length;
_local12 = 0;
while (_local12 < _local6) {
_local9 = _arg1.particles[_local12];
if (((_local9.collidable) && (!(_local11.isConnectedTo(_local9))))){
_local11.scp.updatePosition();
CollisionDetector.test(_local9, _local11.scp);
};
_local12++;
};
};
_local3++;
};
}
public function get sprite():Sprite{
if (_sprite != null){
return (_sprite);
};
if (APEngine.container == null){
throw (new Error("The container property of the APEngine class has not been set"));
};
_sprite = new Sprite();
APEngine.container.addChild(_sprite);
return (_sprite);
}
function checkInternalCollisions():void{
var _local3:AbstractParticle;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:AbstractParticle;
var _local8:SpringConstraint;
var _local1:int = _particles.length;
var _local2:int;
while (_local2 < _local1) {
_local3 = _particles[_local2];
if (!_local3.collidable){
} else {
_local4 = (_local2 + 1);
while (_local4 < _local1) {
_local7 = _particles[_local4];
if (_local7.collidable){
CollisionDetector.test(_local3, _local7);
};
_local4++;
};
_local5 = _constraints.length;
_local6 = 0;
while (_local6 < _local5) {
_local8 = _constraints[_local6];
if (((_local8.collidable) && (!(_local8.isConnectedTo(_local3))))){
_local8.scp.updatePosition();
CollisionDetector.test(_local3, _local8.scp);
};
_local6++;
};
};
_local2++;
};
}
public function addParticle(_arg1:AbstractParticle):void{
particles.push(_arg1);
if (isParented){
_arg1.init();
};
}
public function init():void{
var _local1:int;
while (_local1 < particles.length) {
particles[_local1].init();
_local1++;
};
_local1 = 0;
while (_local1 < constraints.length) {
constraints[_local1].init();
_local1++;
};
}
function satisfyConstraints():void{
var _local3:AbstractConstraint;
var _local1:int = _constraints.length;
var _local2:int;
while (_local2 < _local1) {
_local3 = _constraints[_local2];
_local3.resolve();
_local2++;
};
}
function get isParented():Boolean{
return (_isParented);
}
public function paint():void{
var _local1:AbstractParticle;
var _local4:SpringConstraint;
var _local2:int = _particles.length;
var _local3:int;
while (_local3 < _local2) {
_local1 = _particles[_local3];
if (((!(_local1.fixed)) || (_local1.alwaysRepaint))){
_local1.paint();
};
_local3++;
};
_local2 = _constraints.length;
_local3 = 0;
while (_local3 < _local2) {
_local4 = _constraints[_local3];
if (((!(_local4.fixed)) || (_local4.alwaysRepaint))){
_local4.paint();
};
_local3++;
};
}
public function addConstraint(_arg1:AbstractConstraint):void{
constraints.push(_arg1);
if (isParented){
_arg1.init();
};
}
function set isParented(_arg1:Boolean):void{
_isParented = _arg1;
}
public function removeParticle(_arg1:AbstractParticle):void{
var _local2:int = particles.indexOf(_arg1);
if (_local2 == -1){
return;
};
particles.splice(_local2, 1);
_arg1.cleanup();
}
public function cleanup():void{
var _local1:int;
while (_local1 < particles.length) {
particles[_local1].cleanup();
_local1++;
};
_local1 = 0;
while (_local1 < constraints.length) {
constraints[_local1].cleanup();
_local1++;
};
}
public function get particles():Array{
return (_particles);
}
function integrate(_arg1:Number):void{
var _local4:AbstractParticle;
var _local2:int = _particles.length;
var _local3:int;
while (_local3 < _local2) {
_local4 = _particles[_local3];
_local4.update(_arg1);
_local3++;
};
}
public function get constraints():Array{
return (_constraints);
}
}
}//package org.cove.ape
Section 18
//AbstractConstraint (org.cove.ape.AbstractConstraint)
package org.cove.ape {
import flash.utils.*;
public class AbstractConstraint extends AbstractItem {
private var _stiffness:Number;
public function AbstractConstraint(_arg1:Number){
if (getQualifiedClassName(this) == "org.cove.ape::AbstractConstraint"){
throw (new ArgumentError("AbstractConstraint can't be instantiated directly"));
};
this.stiffness = _arg1;
setStyle();
}
function resolve():void{
}
public function set stiffness(_arg1:Number):void{
_stiffness = _arg1;
}
public function get stiffness():Number{
return (_stiffness);
}
}
}//package org.cove.ape
Section 19
//AbstractItem (org.cove.ape.AbstractItem)
package org.cove.ape {
import flash.display.*;
public class AbstractItem {
var lineAlpha:Number;
var lineColor:uint;
var displayObjectOffset:Vector;
var lineThickness:Number;
var displayObject:DisplayObject;
var fillAlpha:Number;
private var _sprite:Sprite;
var fillColor:uint;
private var _visible:Boolean;
private var _alwaysRepaint:Boolean;
var displayObjectRotation:Number;
public function AbstractItem(){
_visible = true;
_alwaysRepaint = false;
}
public function setLine(_arg1:Number=0, _arg2:uint=0, _arg3:Number=1):void{
lineThickness = _arg1;
lineColor = _arg2;
lineAlpha = _arg3;
}
public function set visible(_arg1:Boolean):void{
_visible = _arg1;
sprite.visible = _arg1;
}
public function setFill(_arg1:uint=0xFFFFFF, _arg2:Number=1):void{
fillColor = _arg1;
fillAlpha = _arg2;
}
public function init():void{
}
public function get sprite():Sprite{
if (_sprite != null){
return (_sprite);
};
if (APEngine.container == null){
throw (new Error("The container property of the APEngine class has not been set"));
};
_sprite = new Sprite();
APEngine.container.addChild(_sprite);
return (_sprite);
}
public function paint():void{
}
public function cleanup():void{
sprite.graphics.clear();
var _local1:int;
while (_local1 < sprite.numChildren) {
sprite.removeChildAt(_local1);
_local1++;
};
}
public function setStyle(_arg1:Number=0, _arg2:uint=0, _arg3:Number=1, _arg4:uint=0xFFFFFF, _arg5:Number=1):void{
setLine(_arg1, _arg2, _arg3);
setFill(_arg4, _arg5);
}
public function get visible():Boolean{
return (_visible);
}
final public function set alwaysRepaint(_arg1:Boolean):void{
_alwaysRepaint = _arg1;
}
final public function get alwaysRepaint():Boolean{
return (_alwaysRepaint);
}
}
}//package org.cove.ape
Section 20
//AbstractParticle (org.cove.ape.AbstractParticle)
package org.cove.ape {
import flash.display.*;
import org.osflash.signals.*;
import flash.utils.*;
public class AbstractParticle extends AbstractItem {
public const collisionSignal:Signal;
private var _collidable:Boolean;
private var _center:Vector;
private var collision:Collision;
private var _kfr:Number;
var prev:Vector;
var interval:Interval;
private var _invMass:Number;
var curr:Vector;
private var _mass:Number;
private var temp:Vector;
private var _friction:Number;
private var forces:Vector;
var samp:Vector;
private var _multisample:int;
private var _fixed:Boolean;
public function AbstractParticle(_arg1:Number, _arg2:Number, _arg3:Boolean, _arg4:Number, _arg5:Number, _arg6:Number){
collisionSignal = new Signal(AbstractParticle, AbstractParticle);
super();
if (getQualifiedClassName(this) == "org.cove.ape::AbstractParticle"){
throw (new ArgumentError("AbstractParticle can't be instantiated directly"));
};
interval = new Interval(0, 0);
curr = new Vector(_arg1, _arg2);
prev = new Vector(_arg1, _arg2);
samp = new Vector();
temp = new Vector();
fixed = _arg3;
forces = new Vector();
collision = new Collision(new Vector(), new Vector());
collidable = true;
this.mass = _arg4;
this.elasticity = _arg5;
this.friction = _arg6;
setStyle();
_center = new Vector();
_multisample = 0;
}
public function get fixed():Boolean{
return (_fixed);
}
function get invMass():Number{
return ((fixed) ? 0 : _invMass);
}
public function get px():Number{
return (curr.x);
}
public function get py():Number{
return (curr.y);
}
public function setDisplay(_arg1:DisplayObject, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0):void{
displayObject = _arg1;
displayObjectRotation = _arg4;
displayObjectOffset = new Vector(_arg2, _arg3);
}
public function set px(_arg1:Number):void{
curr.x = _arg1;
prev.x = _arg1;
}
public function set py(_arg1:Number):void{
curr.y = _arg1;
prev.y = _arg1;
}
function getComponents(_arg1:Vector):Collision{
var _local2:Vector = velocity;
var _local3:Number = _arg1.dot(_local2);
collision.vn = _arg1.mult(_local3);
collision.vt = _local2.minus(collision.vn);
return (collision);
}
function initDisplay():void{
displayObject.x = displayObjectOffset.x;
displayObject.y = displayObjectOffset.y;
displayObject.rotation = displayObjectRotation;
sprite.addChild(displayObject);
}
public function get multisample():int{
return (_multisample);
}
public function get position():Vector{
return (new Vector(curr.x, curr.y));
}
function resolveCollision(_arg1:Vector, _arg2:Vector, _arg3:Vector, _arg4:Number, _arg5:int, _arg6:AbstractParticle):void{
curr.plusEquals(_arg1);
velocity = _arg2;
}
public function get elasticity():Number{
return (_kfr);
}
public function addMasslessForce(_arg1:Vector):void{
forces.plusEquals(_arg1);
}
public function set collidable(_arg1:Boolean):void{
_collidable = _arg1;
}
public function set velocity(_arg1:Vector):void{
prev = curr.minus(_arg1);
}
public function set multisample(_arg1:int):void{
_multisample = _arg1;
}
public function addForce(_arg1:Vector):void{
forces.plusEquals(_arg1.mult(invMass));
}
public function set position(_arg1:Vector):void{
curr.copy(_arg1);
prev.copy(_arg1);
}
public function get center():Vector{
_center.setTo(px, py);
return (_center);
}
public function update(_arg1:Number):void{
if (fixed){
return;
};
addForce(APEngine.force);
addMasslessForce(APEngine.masslessForce);
temp.copy(curr);
var _local2:Vector = velocity.plus(forces.multEquals(_arg1));
curr.plusEquals(_local2.multEquals(APEngine.damping));
prev.copy(temp);
forces.setTo(0, 0);
}
public function get velocity():Vector{
return (curr.minus(prev));
}
public function get collidable():Boolean{
return (_collidable);
}
public function set mass(_arg1:Number):void{
if (_arg1 <= 0){
throw (new ArgumentError("mass may not be set <= 0"));
};
_mass = _arg1;
_invMass = (1 / _mass);
}
public function set elasticity(_arg1:Number):void{
_kfr = _arg1;
}
public function get mass():Number{
return (_mass);
}
public function set fixed(_arg1:Boolean):void{
_fixed = _arg1;
}
public function get friction():Number{
return (_friction);
}
public function set friction(_arg1:Number):void{
if ((((_arg1 < 0)) || ((_arg1 > 1)))){
throw (new ArgumentError("Legal friction must be >= 0 and <=1"));
};
_friction = _arg1;
}
}
}//package org.cove.ape
Section 21
//APEngine (org.cove.ape.APEngine)
package org.cove.ape {
import flash.display.*;
public final class APEngine {
private static var _container:DisplayObjectContainer;
private static var _damping:Number;
private static var _constraintCollisionCycles:int;
private static var groups:Array;
static var masslessForce:Vector;
private static var _constraintCycles:int;
static var force:Vector;
private static var timeStep:Number;
private static var numGroups:int;
public static function get container():DisplayObjectContainer{
return (_container);
}
public static function get constraintCollisionCycles():int{
return (_constraintCollisionCycles);
}
public static function set damping(_arg1:Number):void{
_damping = _arg1;
}
public static function step():void{
integrate();
var _local1:int;
while (_local1 < _constraintCycles) {
satisfyConstraints();
_local1++;
};
var _local2:int;
while (_local2 < _constraintCollisionCycles) {
satisfyConstraints();
checkCollisions();
_local2++;
};
}
public static function init(_arg1:Number=0.25):void{
timeStep = (_arg1 * _arg1);
numGroups = 0;
groups = new Array();
force = new Vector(0, 0);
masslessForce = new Vector(0, 0);
damping = 1;
_constraintCycles = 0;
_constraintCollisionCycles = 1;
}
public static function get constraintCycles():int{
return (_constraintCycles);
}
public static function set constraintCollisionCycles(_arg1:int):void{
_constraintCollisionCycles = _arg1;
}
public static function set constraintCycles(_arg1:int):void{
_constraintCycles = _arg1;
}
public static function addForce(_arg1:Vector):void{
force.plusEquals(_arg1);
}
public static function get damping():Number{
return (_damping);
}
public static function set container(_arg1:DisplayObjectContainer):void{
_container = _arg1;
}
public static function addGroup(_arg1:Group):void{
groups.push(_arg1);
_arg1.isParented = true;
numGroups++;
_arg1.init();
}
public static function removeGroup(_arg1:Group):void{
var _local2:int = groups.indexOf(_arg1);
if (_local2 == -1){
return;
};
groups.splice(_local2, 1);
_arg1.isParented = false;
numGroups--;
_arg1.cleanup();
}
public static function paint():void{
var _local2:Group;
var _local1:int;
while (_local1 < numGroups) {
_local2 = groups[_local1];
_local2.paint();
_local1++;
};
}
private static function checkCollisions():void{
var _local2:Group;
var _local1:int;
while (_local1 < numGroups) {
_local2 = groups[_local1];
_local2.checkCollisions();
_local1++;
};
}
private static function integrate():void{
var _local2:Group;
var _local1:int;
while (_local1 < numGroups) {
_local2 = groups[_local1];
_local2.integrate(timeStep);
_local1++;
};
}
private static function satisfyConstraints():void{
var _local2:Group;
var _local1:int;
while (_local1 < numGroups) {
_local2 = groups[_local1];
_local2.satisfyConstraints();
_local1++;
};
}
public static function addMasslessForce(_arg1:Vector):void{
masslessForce.plusEquals(_arg1);
}
}
}//package org.cove.ape
Section 22
//CircleParticle (org.cove.ape.CircleParticle)
package org.cove.ape {
public class CircleParticle extends AbstractParticle {
private var _radius:Number;
public function CircleParticle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Boolean=false, _arg5:Number=1, _arg6:Number=0.3, _arg7:Number=0){
super(_arg1, _arg2, _arg4, _arg5, _arg6, _arg7);
_radius = _arg3;
}
override public function init():void{
cleanup();
if (displayObject != null){
initDisplay();
} else {
sprite.graphics.clear();
sprite.graphics.lineStyle(lineThickness, lineColor, lineAlpha);
sprite.graphics.beginFill(fillColor, fillAlpha);
sprite.graphics.drawCircle(0, 0, radius);
sprite.graphics.endFill();
};
paint();
}
public function set radius(_arg1:Number):void{
_radius = _arg1;
}
function getProjection(_arg1:Vector):Interval{
var _local2:Number = samp.dot(_arg1);
interval.min = (_local2 - _radius);
interval.max = (_local2 + _radius);
return (interval);
}
function getIntervalY():Interval{
interval.min = (curr.y - _radius);
interval.max = (curr.y + _radius);
return (interval);
}
public function get radius():Number{
return (_radius);
}
function getIntervalX():Interval{
interval.min = (curr.x - _radius);
interval.max = (curr.x + _radius);
return (interval);
}
override public function paint():void{
sprite.x = curr.x;
sprite.y = curr.y;
}
}
}//package org.cove.ape
Section 23
//Collision (org.cove.ape.Collision)
package org.cove.ape {
import org.cove.ape.*;
final class Collision {
var vn:Vector;
var vt:Vector;
function Collision(_arg1:Vector, _arg2:Vector){
this.vn = _arg1;
this.vt = _arg2;
}
}
}//package org.cove.ape
Section 24
//CollisionDetector (org.cove.ape.CollisionDetector)
package org.cove.ape {
import org.cove.ape.*;
final class CollisionDetector {
private static function testOBBvsCircle(_arg1:RectangleParticle, _arg2:CircleParticle):Boolean{
var _local3:Vector;
var _local8:Vector;
var _local9:Number;
var _local10:Vector;
var _local11:Number;
var _local4:Number = Number.POSITIVE_INFINITY;
var _local5:Array = new Array(2);
var _local6:int;
while (_local6 < 2) {
_local8 = _arg1.axes[_local6];
_local9 = testIntervals(_arg1.getProjection(_local8), _arg2.getProjection(_local8));
if (_local9 == 0){
return (false);
};
if (Math.abs(_local9) < Math.abs(_local4)){
_local3 = _local8;
_local4 = _local9;
};
_local5[_local6] = _local9;
_local6++;
};
var _local7:Number = _arg2.radius;
if ((((Math.abs(_local5[0]) < _local7)) && ((Math.abs(_local5[1]) < _local7)))){
_local10 = closestVertexOnOBB(_arg2.samp, _arg1);
_local3 = _local10.minus(_arg2.samp);
_local11 = _local3.magnitude();
_local4 = (_local7 - _local11);
if (_local4 > 0){
_local3.divEquals(_local11);
} else {
return (false);
};
};
CollisionResolver.resolveParticleParticle(_arg1, _arg2, _local3, _local4);
return (true);
}
static function test(_arg1:AbstractParticle, _arg2:AbstractParticle):void{
if (((_arg1.fixed) && (_arg2.fixed))){
return;
};
if ((((_arg1.multisample == 0)) && ((_arg2.multisample == 0)))){
normVsNorm(_arg1, _arg2);
} else {
if ((((_arg1.multisample > 0)) && ((_arg2.multisample == 0)))){
sampVsNorm(_arg1, _arg2);
} else {
if ((((_arg2.multisample > 0)) && ((_arg1.multisample == 0)))){
sampVsNorm(_arg2, _arg1);
} else {
if (_arg1.multisample == _arg2.multisample){
sampVsSamp(_arg1, _arg2);
} else {
normVsNorm(_arg1, _arg2);
};
};
};
};
}
private static function testIntervals(_arg1:Interval, _arg2:Interval):Number{
if (_arg1.max < _arg2.min){
return (0);
};
if (_arg2.max < _arg1.min){
return (0);
};
var _local3:Number = (_arg2.max - _arg1.min);
var _local4:Number = (_arg2.min - _arg1.max);
return (((Math.abs(_local3))<Math.abs(_local4)) ? _local3 : _local4);
}
private static function normVsNorm(_arg1:AbstractParticle, _arg2:AbstractParticle):void{
_arg1.samp.copy(_arg1.curr);
_arg2.samp.copy(_arg2.curr);
var _local3:Boolean = testTypes(_arg1, _arg2);
if (_local3){
_arg1.collisionSignal.dispatch(_arg1, _arg2);
_arg2.collisionSignal.dispatch(_arg2, _arg1);
};
}
private static function testCirclevsCircle(_arg1:CircleParticle, _arg2:CircleParticle):Boolean{
var _local3:Number = testIntervals(_arg1.getIntervalX(), _arg2.getIntervalX());
if (_local3 == 0){
return (false);
};
var _local4:Number = testIntervals(_arg1.getIntervalY(), _arg2.getIntervalY());
if (_local4 == 0){
return (false);
};
var _local5:Vector = _arg1.samp.minus(_arg2.samp);
var _local6:Number = _local5.magnitude();
var _local7:Number = ((_arg1.radius + _arg2.radius) - _local6);
if (_local7 > 0){
_local5.divEquals(_local6);
CollisionResolver.resolveParticleParticle(_arg1, _arg2, _local5, _local7);
return (true);
};
return (false);
}
private static function testTypes(_arg1:AbstractParticle, _arg2:AbstractParticle):Boolean{
if ((((_arg1 is RectangleParticle)) && ((_arg2 is RectangleParticle)))){
return (testOBBvsOBB((_arg1 as RectangleParticle), (_arg2 as RectangleParticle)));
};
if ((((_arg1 is CircleParticle)) && ((_arg2 is CircleParticle)))){
return (testCirclevsCircle((_arg1 as CircleParticle), (_arg2 as CircleParticle)));
};
if ((((_arg1 is RectangleParticle)) && ((_arg2 is CircleParticle)))){
return (testOBBvsCircle((_arg1 as RectangleParticle), (_arg2 as CircleParticle)));
};
if ((((_arg1 is CircleParticle)) && ((_arg2 is RectangleParticle)))){
return (testOBBvsCircle((_arg2 as RectangleParticle), (_arg1 as CircleParticle)));
};
return (false);
}
private static function sampVsNorm(_arg1:AbstractParticle, _arg2:AbstractParticle):void{
var _local3:Number = (1 / (_arg1.multisample + 1));
var _local4:Number = _local3;
_arg2.samp.copy(_arg2.curr);
var _local5:int;
while (_local5 <= _arg1.multisample) {
_arg1.samp.setTo((_arg1.prev.x + (_local4 * (_arg1.curr.x - _arg1.prev.x))), (_arg1.prev.y + (_local4 * (_arg1.curr.y - _arg1.prev.y))));
if (testTypes(_arg1, _arg2)){
return;
};
_local4 = (_local4 + _local3);
_local5++;
};
}
private static function closestVertexOnOBB(_arg1:Vector, _arg2:RectangleParticle):Vector{
var _local6:Number;
var _local3:Vector = _arg1.minus(_arg2.samp);
var _local4:Vector = new Vector(_arg2.samp.x, _arg2.samp.y);
var _local5:int;
while (_local5 < 2) {
_local6 = _local3.dot(_arg2.axes[_local5]);
if (_local6 >= 0){
_local6 = _arg2.extents[_local5];
} else {
if (_local6 < 0){
_local6 = -(_arg2.extents[_local5]);
};
};
_local4.plusEquals(_arg2.axes[_local5].mult(_local6));
_local5++;
};
return (_local4);
}
private static function testOBBvsOBB(_arg1:RectangleParticle, _arg2:RectangleParticle):Boolean{
var _local3:Vector;
var _local6:Vector;
var _local7:Number;
var _local8:Vector;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Boolean;
var _local4:Number = Number.POSITIVE_INFINITY;
var _local5:int;
while (_local5 < 2) {
_local6 = _arg1.axes[_local5];
_local7 = testIntervals(_arg1.getProjection(_local6), _arg2.getProjection(_local6));
if (_local7 == 0){
return (false);
};
_local8 = _arg2.axes[_local5];
_local9 = testIntervals(_arg1.getProjection(_local8), _arg2.getProjection(_local8));
if (_local9 == 0){
return (false);
};
_local10 = Math.abs(_local7);
_local11 = Math.abs(_local9);
if ((((_local10 < Math.abs(_local4))) || ((_local11 < Math.abs(_local4))))){
_local12 = (_local10 < _local11);
_local3 = (_local12) ? _local6 : _local8;
_local4 = (_local12) ? _local7 : _local9;
};
_local5++;
};
CollisionResolver.resolveParticleParticle(_arg1, _arg2, _local3, _local4);
return (true);
}
private static function sampVsSamp(_arg1:AbstractParticle, _arg2:AbstractParticle):void{
var _local3:Number = (1 / (_arg1.multisample + 1));
var _local4:Number = _local3;
var _local5:int;
while (_local5 <= _arg1.multisample) {
_arg1.samp.setTo((_arg1.prev.x + (_local4 * (_arg1.curr.x - _arg1.prev.x))), (_arg1.prev.y + (_local4 * (_arg1.curr.y - _arg1.prev.y))));
_arg2.samp.setTo((_arg2.prev.x + (_local4 * (_arg2.curr.x - _arg2.prev.x))), (_arg2.prev.y + (_local4 * (_arg2.curr.y - _arg2.prev.y))));
if (testTypes(_arg1, _arg2)){
return;
};
_local4 = (_local4 + _local3);
_local5++;
};
}
}
}//package org.cove.ape
Section 25
//CollisionResolver (org.cove.ape.CollisionResolver)
package org.cove.ape {
import org.cove.ape.*;
final class CollisionResolver {
static function resolveParticleParticle(_arg1:AbstractParticle, _arg2:AbstractParticle, _arg3:Vector, _arg4:Number):void{
_arg1.curr.copy(_arg1.samp);
_arg2.curr.copy(_arg2.samp);
var _local5:Vector = _arg3.mult(_arg4);
var _local6:Number = (_arg1.elasticity + _arg2.elasticity);
var _local7:Number = (_arg1.invMass + _arg2.invMass);
var _local8:Number = clamp((1 - (_arg1.friction + _arg2.friction)), 0, 1);
var _local9:Collision = _arg1.getComponents(_arg3);
var _local10:Collision = _arg2.getComponents(_arg3);
var _local11:Vector = _local10.vn.mult(((_local6 + 1) * _arg1.invMass)).plus(_local9.vn.mult((_arg2.invMass - (_local6 * _arg1.invMass)))).divEquals(_local7);
var _local12:Vector = _local9.vn.mult(((_local6 + 1) * _arg2.invMass)).plus(_local10.vn.mult((_arg1.invMass - (_local6 * _arg2.invMass)))).divEquals(_local7);
_local9.vt.multEquals(_local8);
_local10.vt.multEquals(_local8);
var _local13:Vector = _local5.mult((_arg1.invMass / _local7));
var _local14:Vector = _local5.mult((-(_arg2.invMass) / _local7));
_local11.plusEquals(_local9.vt);
_local12.plusEquals(_local10.vt);
if (!_arg1.fixed){
_arg1.resolveCollision(_local13, _local11, _arg3, _arg4, -1, _arg2);
};
if (!_arg2.fixed){
_arg2.resolveCollision(_local14, _local12, _arg3, _arg4, 1, _arg1);
};
}
static function clamp(_arg1:Number, _arg2:Number, _arg3:Number):Number{
if (_arg1 > _arg3){
return (_arg3);
};
if (_arg1 < _arg2){
return (_arg2);
};
return (_arg1);
}
}
}//package org.cove.ape
Section 26
//Composite (org.cove.ape.Composite)
package org.cove.ape {
public class Composite extends AbstractCollection {
private var delta:Vector;
public function Composite(){
delta = new Vector();
}
public function rotateByAngle(_arg1:Number, _arg2:Vector):void{
var _local3:Number = (_arg1 * MathUtil.PI_OVER_ONE_EIGHTY);
rotateByRadian(_local3, _arg2);
}
public function rotateByRadian(_arg1:Number, _arg2:Vector):void{
var _local3:AbstractParticle;
var _local7:Number;
var _local8:Number;
var _local4:Array = particles;
var _local5:int = _local4.length;
var _local6:int;
while (_local6 < _local5) {
_local3 = _local4[_local6];
_local7 = _local3.center.distance(_arg2);
_local8 = (getRelativeAngle(_arg2, _local3.center) + _arg1);
_local3.px = ((Math.cos(_local8) * _local7) + _arg2.x);
_local3.py = ((Math.sin(_local8) * _local7) + _arg2.y);
_local6++;
};
}
public function get fixed():Boolean{
var _local1:int;
while (_local1 < particles.length) {
if (!particles[_local1].fixed){
return (false);
};
_local1++;
};
return (true);
}
private function getRelativeAngle(_arg1:Vector, _arg2:Vector):Number{
delta.setTo((_arg2.x - _arg1.x), (_arg2.y - _arg1.y));
return (Math.atan2(delta.y, delta.x));
}
public function set fixed(_arg1:Boolean):void{
var _local2:int;
while (_local2 < particles.length) {
particles[_local2].fixed = _arg1;
_local2++;
};
}
}
}//package org.cove.ape
Section 27
//Group (org.cove.ape.Group)
package org.cove.ape {
public class Group extends AbstractCollection {
private var _composites:Array;
private var _collisionList:Array;
private var _collideInternal:Boolean;
public function Group(_arg1:Boolean=false){
_composites = new Array();
_collisionList = new Array();
this.collideInternal = _arg1;
}
public function addCollidableList(_arg1:Array):void{
var _local3:Group;
var _local2:int;
while (_local2 < _arg1.length) {
_local3 = _arg1[_local2];
collisionList.push(_local3);
_local2++;
};
}
function checkCollisions():void{
var _local3:Group;
if (collideInternal){
checkCollisionGroupInternal();
};
var _local1:int = collisionList.length;
var _local2:int;
while (_local2 < _local1) {
_local3 = collisionList[_local2];
checkCollisionVsGroup(_local3);
_local2++;
};
}
public function removeComposite(_arg1:Composite):void{
var _local2:int = composites.indexOf(_arg1);
if (_local2 == -1){
return;
};
composites.splice(_local2, 1);
_arg1.isParented = false;
_arg1.cleanup();
}
override public function cleanup():void{
super.cleanup();
var _local1:int;
while (_local1 < composites.length) {
composites[_local1].cleanup();
_local1++;
};
}
public function removeCollidable(_arg1:Group):void{
var _local2:int = collisionList.indexOf(_arg1);
if (_local2 == -1){
return;
};
collisionList.splice(_local2, 1);
}
public function addComposite(_arg1:Composite):void{
composites.push(_arg1);
_arg1.isParented = true;
if (isParented){
_arg1.init();
};
}
public function addCollidable(_arg1:Group):void{
collisionList.push(_arg1);
}
override function integrate(_arg1:Number):void{
var _local4:Composite;
super.integrate(_arg1);
var _local2:int = _composites.length;
var _local3:int;
while (_local3 < _local2) {
_local4 = _composites[_local3];
_local4.integrate(_arg1);
_local3++;
};
}
public function get composites():Array{
return (_composites);
}
override public function init():void{
super.init();
var _local1:int;
while (_local1 < composites.length) {
composites[_local1].init();
_local1++;
};
}
override public function getAll():Array{
return (particles.concat(constraints).concat(composites));
}
public function get collisionList():Array{
return (_collisionList);
}
private function checkCollisionGroupInternal():void{
var _local3:Composite;
var _local4:int;
var _local5:Composite;
checkInternalCollisions();
var _local1:int = _composites.length;
var _local2:int;
while (_local2 < _local1) {
_local3 = _composites[_local2];
_local3.checkCollisionsVsCollection(this);
_local4 = (_local2 + 1);
while (_local4 < _local1) {
_local5 = _composites[_local4];
_local3.checkCollisionsVsCollection(_local5);
_local4++;
};
_local2++;
};
}
override function satisfyConstraints():void{
var _local3:Composite;
super.satisfyConstraints();
var _local1:int = _composites.length;
var _local2:int;
while (_local2 < _local1) {
_local3 = _composites[_local2];
_local3.satisfyConstraints();
_local2++;
};
}
public function get collideInternal():Boolean{
return (_collideInternal);
}
public function set collideInternal(_arg1:Boolean):void{
_collideInternal = _arg1;
}
override public function paint():void{
var _local3:Composite;
super.paint();
var _local1:int = _composites.length;
var _local2:int;
while (_local2 < _local1) {
_local3 = _composites[_local2];
_local3.paint();
_local2++;
};
}
private function checkCollisionVsGroup(_arg1:Group):void{
var _local5:Composite;
var _local6:int;
var _local7:Composite;
checkCollisionsVsCollection(_arg1);
var _local2:int = _composites.length;
var _local3:int = _arg1.composites.length;
var _local4:int;
while (_local4 < _local2) {
_local5 = _composites[_local4];
_local5.checkCollisionsVsCollection(_arg1);
_local6 = 0;
while (_local6 < _local3) {
_local7 = _arg1.composites[_local6];
_local5.checkCollisionsVsCollection(_local7);
_local6++;
};
_local4++;
};
_local6 = 0;
while (_local6 < _local3) {
_local7 = _arg1.composites[_local6];
checkCollisionsVsCollection(_local7);
_local6++;
};
}
}
}//package org.cove.ape
Section 28
//Interval (org.cove.ape.Interval)
package org.cove.ape {
final class Interval {
var min:Number;
var max:Number;
function Interval(_arg1:Number, _arg2:Number){
this.min = _arg1;
this.max = _arg2;
}
function toString():String{
return (((min + " : ") + max));
}
}
}//package org.cove.ape
Section 29
//MathUtil (org.cove.ape.MathUtil)
package org.cove.ape {
final class MathUtil {
static var ONE_EIGHTY_OVER_PI:Number = 57.2957795130823;
static var PI_OVER_ONE_EIGHTY:Number = 0.0174532925199433;
static function clamp(_arg1:Number, _arg2:Number, _arg3:Number):Number{
if (_arg1 < _arg2){
return (_arg2);
};
if (_arg1 > _arg3){
return (_arg3);
};
return (_arg1);
}
static function sign(_arg1:Number):int{
if (_arg1 < 0){
return (-1);
};
return (1);
}
}
}//package org.cove.ape
Section 30
//RectangleParticle (org.cove.ape.RectangleParticle)
package org.cove.ape {
public class RectangleParticle extends AbstractParticle {
private var _axes:Array;
private var _radian:Number;
private var _extents:Array;
public function RectangleParticle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number=0, _arg6:Boolean=false, _arg7:Number=1, _arg8:Number=0.3, _arg9:Number=0){
super(_arg1, _arg2, _arg6, _arg7, _arg8, _arg9);
_extents = new Array((_arg3 / 2), (_arg4 / 2));
_axes = new Array(new Vector(0, 0), new Vector(0, 0));
radian = _arg5;
}
public function get radian():Number{
return (_radian);
}
public function set radian(_arg1:Number):void{
_radian = _arg1;
setAxes(_arg1);
}
function get axes():Array{
return (_axes);
}
public function set angle(_arg1:Number):void{
radian = (_arg1 * MathUtil.PI_OVER_ONE_EIGHTY);
}
function get extents():Array{
return (_extents);
}
public function set width(_arg1:Number):void{
_extents[0] = (_arg1 / 2);
}
public function get width():Number{
return ((_extents[0] * 2));
}
public function set height(_arg1:Number):void{
_extents[1] = (_arg1 / 2);
}
override public function init():void{
var _local1:Number;
var _local2:Number;
cleanup();
if (displayObject != null){
initDisplay();
} else {
_local1 = (extents[0] * 2);
_local2 = (extents[1] * 2);
sprite.graphics.clear();
sprite.graphics.lineStyle(lineThickness, lineColor, lineAlpha);
sprite.graphics.beginFill(fillColor, fillAlpha);
sprite.graphics.drawRect((-(_local1) / 2), (-(_local2) / 2), _local1, _local2);
sprite.graphics.endFill();
};
paint();
}
public function get height():Number{
return ((_extents[1] * 2));
}
public function get angle():Number{
return ((radian * MathUtil.ONE_EIGHTY_OVER_PI));
}
function getProjection(_arg1:Vector):Interval{
var _local2:Number = ((extents[0] * Math.abs(_arg1.dot(axes[0]))) + (extents[1] * Math.abs(_arg1.dot(axes[1]))));
var _local3:Number = samp.dot(_arg1);
interval.min = (_local3 - _local2);
interval.max = (_local3 + _local2);
return (interval);
}
override public function paint():void{
sprite.x = curr.x;
sprite.y = curr.y;
sprite.rotation = angle;
}
private function setAxes(_arg1:Number):void{
var _local2:Number = Math.sin(_arg1);
var _local3:Number = Math.cos(_arg1);
axes[0].x = _local3;
axes[0].y = _local2;
axes[1].x = -(_local2);
axes[1].y = _local3;
}
}
}//package org.cove.ape
Section 31
//SpringConstraint (org.cove.ape.SpringConstraint)
package org.cove.ape {
import flash.display.*;
public class SpringConstraint extends AbstractConstraint {
private var _collidable:Boolean;
private var p1:AbstractParticle;
private var p2:AbstractParticle;
private var _scp:SpringConstraintParticle;
private var _restLength:Number;
public function SpringConstraint(_arg1:AbstractParticle, _arg2:AbstractParticle, _arg3:Number=0.5, _arg4:Boolean=false, _arg5:Number=1, _arg6:Number=1, _arg7:Boolean=false){
super(_arg3);
this.p1 = _arg1;
this.p2 = _arg2;
checkParticlesLocation();
_restLength = currLength;
setCollidable(_arg4, _arg5, _arg6, _arg7);
}
public function get fixed():Boolean{
return (((p1.fixed) && (p2.fixed)));
}
public function get rectScale():Number{
return (scp.rectScale);
}
public function set rectScale(_arg1:Number):void{
if (scp == null){
return;
};
scp.rectScale = _arg1;
}
public function setDisplay(_arg1:DisplayObject, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0):void{
if (collidable){
scp.setDisplay(_arg1, _arg2, _arg3, _arg4);
} else {
displayObject = _arg1;
displayObjectRotation = _arg4;
displayObjectOffset = new Vector(_arg2, _arg3);
};
}
override public function init():void{
cleanup();
if (collidable){
scp.init();
} else {
if (displayObject != null){
initDisplay();
};
};
paint();
}
function initDisplay():void{
if (collidable){
scp.initDisplay();
} else {
displayObject.x = displayObjectOffset.x;
displayObject.y = displayObjectOffset.y;
displayObject.rotation = displayObjectRotation;
sprite.addChild(displayObject);
};
}
public function get angle():Number{
return ((radian * MathUtil.ONE_EIGHTY_OVER_PI));
}
public function get center():Vector{
return (p1.curr.plus(p2.curr).divEquals(2));
}
public function set rectHeight(_arg1:Number):void{
if (scp == null){
return;
};
scp.rectHeight = _arg1;
}
public function get restLength():Number{
return (_restLength);
}
override public function paint():void{
var _local1:Vector;
if (collidable){
scp.paint();
} else {
if (displayObject != null){
_local1 = center;
sprite.x = _local1.x;
sprite.y = _local1.y;
sprite.rotation = angle;
} else {
sprite.graphics.clear();
sprite.graphics.lineStyle(lineThickness, lineColor, lineAlpha);
sprite.graphics.moveTo(p1.px, p1.py);
sprite.graphics.lineTo(p2.px, p2.py);
};
};
}
function get scp():SpringConstraintParticle{
return (_scp);
}
public function get collidable():Boolean{
return (_collidable);
}
public function setCollidable(_arg1:Boolean, _arg2:Number, _arg3:Number, _arg4:Boolean=false):void{
_collidable = _arg1;
_scp = null;
if (_collidable){
_scp = new SpringConstraintParticle(p1, p2, this, _arg2, _arg3, _arg4);
};
}
public function isConnectedTo(_arg1:AbstractParticle):Boolean{
return ((((_arg1 == p1)) || ((_arg1 == p2))));
}
public function get rectHeight():Number{
return (scp.rectHeight);
}
override function resolve():void{
if (((p1.fixed) && (p2.fixed))){
return;
};
var _local1:Number = currLength;
var _local2:Number = ((_local1 - restLength) / (_local1 * (p1.invMass + p2.invMass)));
var _local3:Vector = delta.mult((_local2 * stiffness));
p1.curr.minusEquals(_local3.mult(p1.invMass));
p2.curr.plusEquals(_local3.mult(p2.invMass));
}
public function set fixedEndLimit(_arg1:Number):void{
if (scp == null){
return;
};
scp.fixedEndLimit = _arg1;
}
public function get radian():Number{
var _local1:Vector = delta;
return (Math.atan2(_local1.y, _local1.x));
}
public function set restLength(_arg1:Number):void{
if (_arg1 <= 0){
throw (new ArgumentError("restLength must be greater than 0"));
};
_restLength = _arg1;
}
public function get currLength():Number{
return (p1.curr.distance(p2.curr));
}
public function get fixedEndLimit():Number{
return (scp.fixedEndLimit);
}
private function checkParticlesLocation():void{
if ((((p1.curr.x == p2.curr.x)) && ((p1.curr.y == p2.curr.y)))){
p2.curr.x = (p2.curr.x + 0.0001);
};
}
function get delta():Vector{
return (p1.curr.minus(p2.curr));
}
}
}//package org.cove.ape
Section 32
//SpringConstraintParticle (org.cove.ape.SpringConstraintParticle)
package org.cove.ape {
import org.cove.ape.*;
import flash.display.*;
class SpringConstraintParticle extends RectangleParticle {
private var p1:AbstractParticle;
private var lambda:Vector;
private var p2:AbstractParticle;
private var _rectHeight:Number;
private var avgVelocity:Vector;
private var rca:Vector;
private var rcb:Vector;
private var _rectScale:Number;
private var parent:SpringConstraint;
private var scaleToLength:Boolean;
private var s:Number;
private var _fixedEndLimit:Number;
function SpringConstraintParticle(_arg1:AbstractParticle, _arg2:AbstractParticle, _arg3:SpringConstraint, _arg4:Number, _arg5:Number, _arg6:Boolean){
super(0, 0, 0, 0, 0, false);
this.p1 = _arg1;
this.p2 = _arg2;
lambda = new Vector(0, 0);
avgVelocity = new Vector(0, 0);
parent = _arg3;
this.rectScale = _arg5;
this.rectHeight = _arg4;
this.scaleToLength = _arg6;
fixedEndLimit = 0;
rca = new Vector();
rcb = new Vector();
}
private function setCorners(_arg1:RectangleParticle, _arg2:int):void{
var _local3:Number = _arg1.curr.x;
var _local4:Number = _arg1.curr.y;
var _local5:Array = _arg1.axes;
var _local6:Array = _arg1.extents;
var _local7:Number = (_local5[0].x * _local6[0]);
var _local8:Number = (_local5[0].y * _local6[0]);
var _local9:Number = (_local5[1].x * _local6[1]);
var _local10:Number = (_local5[1].y * _local6[1]);
var _local11:Number = (_local7 - _local9);
var _local12:Number = (_local8 - _local10);
var _local13:Number = (_local7 + _local9);
var _local14:Number = (_local8 + _local10);
if (_arg2 == 0){
rca.x = (_local3 - _local13);
rca.y = (_local4 - _local14);
rcb.x = (_local3 + _local11);
rcb.y = (_local4 + _local12);
} else {
if (_arg2 == 1){
rca.x = (_local3 + _local11);
rca.y = (_local4 + _local12);
rcb.x = (_local3 + _local13);
rcb.y = (_local4 + _local14);
} else {
if (_arg2 == 2){
rca.x = (_local3 + _local13);
rca.y = (_local4 + _local14);
rcb.x = (_local3 - _local11);
rcb.y = (_local4 - _local12);
} else {
if (_arg2 == 3){
rca.x = (_local3 - _local11);
rca.y = (_local4 - _local12);
rcb.x = (_local3 - _local13);
rcb.y = (_local4 - _local14);
};
};
};
};
}
override function get invMass():Number{
if (((p1.fixed) && (p2.fixed))){
return (0);
};
return ((1 / ((p1.mass + p2.mass) / 2)));
}
function get rectScale():Number{
return (_rectScale);
}
function set rectScale(_arg1:Number):void{
_rectScale = _arg1;
}
override public function get friction():Number{
return (((p1.friction + p2.friction) / 2));
}
override public function init():void{
var _local1:Sprite;
var _local2:Number;
var _local3:Number;
if (displayObject != null){
initDisplay();
} else {
_local1 = new Sprite();
parent.sprite.addChild(_local1);
_local1.name = "inner";
_local2 = (parent.currLength * rectScale);
_local3 = rectHeight;
_local1.graphics.clear();
_local1.graphics.lineStyle(parent.lineThickness, parent.lineColor, parent.lineAlpha);
_local1.graphics.beginFill(parent.fillColor, parent.fillAlpha);
_local1.graphics.drawRect((-(_local2) / 2), (-(_local3) / 2), _local2, _local3);
_local1.graphics.endFill();
};
paint();
}
override function initDisplay():void{
displayObject.x = displayObjectOffset.x;
displayObject.y = displayObjectOffset.y;
displayObject.rotation = displayObjectRotation;
var _local1:Sprite = new Sprite();
_local1.name = "inner";
_local1.addChild(displayObject);
parent.sprite.addChild(_local1);
}
function set rectHeight(_arg1:Number):void{
_rectHeight = _arg1;
}
function updatePosition():void{
var _local1:Vector = parent.center;
curr.setTo(_local1.x, _local1.y);
width = (scaleToLength) ? (parent.currLength * rectScale) : (parent.restLength * rectScale);
height = rectHeight;
radian = parent.radian;
}
override public function get velocity():Vector{
var _local1:Vector = p1.velocity;
var _local2:Vector = p2.velocity;
avgVelocity.setTo(((_local1.x + _local2.x) / 2), ((_local1.y + _local2.y) / 2));
return (avgVelocity);
}
override public function paint():void{
var _local1:Vector = parent.center;
var _local2:Sprite = parent.sprite;
if (scaleToLength){
_local2.getChildByName("inner").width = (parent.currLength * rectScale);
} else {
if (displayObject != null){
_local2.getChildByName("inner").width = (parent.restLength * rectScale);
};
};
_local2.x = _local1.x;
_local2.y = _local1.y;
_local2.rotation = parent.angle;
}
private function getContactPointParam(_arg1:AbstractParticle):Number{
var _local2:Number;
var _local3:Number;
var _local4:Array;
var _local5:Number;
var _local6:int;
var _local7:Number;
if ((_arg1 is CircleParticle)){
_local2 = closestParamPoint(_arg1.curr);
} else {
if ((_arg1 is RectangleParticle)){
_local4 = new Array(4);
_local5 = Number.POSITIVE_INFINITY;
_local6 = 0;
while (_local6 < 4) {
setCorners((_arg1 as RectangleParticle), _local6);
_local7 = closestPtSegmentSegment();
if (_local7 < _local5){
_local5 = _local7;
_local3 = _local6;
_local4[_local6] = s;
};
_local6++;
};
_local2 = _local4[_local3];
};
};
return (_local2);
}
function set fixedEndLimit(_arg1:Number):void{
_fixedEndLimit = _arg1;
}
private function closestPtSegmentSegment():Number{
var _local8:Number;
var _local1:Vector = p1.curr;
var _local2:Vector = p2.curr;
var _local3:Vector = rca;
var _local4:Vector = rcb;
var _local5:Vector = _local2.minus(_local1);
var _local6:Vector = _local4.minus(_local3);
var _local7:Vector = _local1.minus(_local3);
var _local9:Number = _local5.dot(_local5);
var _local10:Number = _local6.dot(_local6);
var _local11:Number = _local6.dot(_local7);
var _local12:Number = _local5.dot(_local7);
var _local13:Number = _local5.dot(_local6);
var _local14:Number = ((_local9 * _local10) - (_local13 * _local13));
if (_local14 != 0){
s = MathUtil.clamp((((_local13 * _local11) - (_local12 * _local10)) / _local14), 0, 1);
} else {
s = 0.5;
};
_local8 = (((_local13 * s) + _local11) / _local10);
if (_local8 < 0){
_local8 = 0;
s = MathUtil.clamp((-(_local12) / _local9), 0, 1);
} else {
if (_local8 > 0){
_local8 = 1;
s = MathUtil.clamp(((_local13 - _local12) / _local9), 0, 1);
};
};
var _local15:Vector = _local1.plus(_local5.mult(s));
var _local16:Vector = _local3.plus(_local6.mult(_local8));
var _local17:Vector = _local15.minus(_local16);
return (_local15.minus(_local16).dot(_local17));
}
override function resolveCollision(_arg1:Vector, _arg2:Vector, _arg3:Vector, _arg4:Number, _arg5:int, _arg6:AbstractParticle):void{
var _local10:Number;
var _local11:AbstractParticle;
var _local7:Number = getContactPointParam(_arg6);
var _local8:Number = (1 - _local7);
var _local9:Number = _local7;
if (p1.fixed){
if (_local9 <= fixedEndLimit){
return;
};
lambda.setTo((_arg1.x / _local9), (_arg1.y / _local9));
p2.curr.plusEquals(lambda);
p2.velocity = _arg2;
} else {
if (p2.fixed){
if (_local8 <= fixedEndLimit){
return;
};
lambda.setTo((_arg1.x / _local8), (_arg1.y / _local8));
p1.curr.plusEquals(lambda);
p1.velocity = _arg2;
} else {
_local10 = ((_local8 * _local8) + (_local9 * _local9));
if (_local10 == 0){
return;
};
lambda.setTo((_arg1.x / _local10), (_arg1.y / _local10));
p1.curr.plusEquals(lambda.mult(_local8));
p2.curr.plusEquals(lambda.mult(_local9));
if (_local7 == 0.5){
p1.velocity = _arg2;
p2.velocity = _arg2;
} else {
_local11 = ((_local7)<0.5) ? p1 : p2;
_local11.velocity = _arg2;
};
};
};
}
function get rectHeight():Number{
return (_rectHeight);
}
function get fixedEndLimit():Number{
return (_fixedEndLimit);
}
override public function get elasticity():Number{
return (((p1.elasticity + p2.elasticity) / 2));
}
override public function get mass():Number{
return (((p1.mass + p2.mass) / 2));
}
private function closestParamPoint(_arg1:Vector):Number{
var _local2:Vector = p2.curr.minus(p1.curr);
var _local3:Number = (_local2.dot(_arg1.minus(p1.curr)) / _local2.dot(_local2));
return (MathUtil.clamp(_local3, 0, 1));
}
}
}//package org.cove.ape
Section 33
//Vector (org.cove.ape.Vector)
package org.cove.ape {
public class Vector {
public var x:Number;
public var y:Number;
public function Vector(_arg1:Number=0, _arg2:Number=0){
x = _arg1;
y = _arg2;
}
public function cross(_arg1:Vector):Number{
return (((x * _arg1.y) - (y * _arg1.x)));
}
public function magnitude():Number{
return (Math.sqrt(((x * x) + (y * y))));
}
public function divEquals(_arg1:Number):Vector{
if (_arg1 == 0){
_arg1 = 0.0001;
};
x = (x / _arg1);
y = (y / _arg1);
return (this);
}
public function times(_arg1:Vector):Vector{
return (new Vector((x * _arg1.x), (y * _arg1.y)));
}
public function plusEquals(_arg1:Vector):Vector{
x = (x + _arg1.x);
y = (y + _arg1.y);
return (this);
}
public function dot(_arg1:Vector):Number{
return (((x * _arg1.x) + (y * _arg1.y)));
}
public function toString():String{
return (((x + " : ") + y));
}
public function normalize():Vector{
var _local1:Number = magnitude();
if (_local1 == 0){
_local1 = 0.0001;
};
return (mult((1 / _local1)));
}
public function minusEquals(_arg1:Vector):Vector{
x = (x - _arg1.x);
y = (y - _arg1.y);
return (this);
}
public function copy(_arg1:Vector):void{
x = _arg1.x;
y = _arg1.y;
}
public function multEquals(_arg1:Number):Vector{
x = (x * _arg1);
y = (y * _arg1);
return (this);
}
public function minus(_arg1:Vector):Vector{
return (new Vector((x - _arg1.x), (y - _arg1.y)));
}
public function plus(_arg1:Vector):Vector{
return (new Vector((x + _arg1.x), (y + _arg1.y)));
}
public function distance(_arg1:Vector):Number{
var _local2:Vector = this.minus(_arg1);
return (_local2.magnitude());
}
public function setTo(_arg1:Number, _arg2:Number):void{
x = _arg1;
y = _arg2;
}
public function mult(_arg1:Number):Vector{
return (new Vector((x * _arg1), (y * _arg1)));
}
}
}//package org.cove.ape
Section 34
//IDispatcher (org.osflash.signals.IDispatcher)
package org.osflash.signals {
public interface IDispatcher {
function dispatch(... _args):void;
}
}//package org.osflash.signals
Section 35
//ISignal (org.osflash.signals.ISignal)
package org.osflash.signals {
public interface ISignal {
function get valueClasses():Array;
function set valueClasses(_arg1:Array):void;
function get numListeners():uint;
function add(_arg1:Function):Function;
function addOnce(_arg1:Function):Function;
function remove(_arg1:Function):Function;
}
}//package org.osflash.signals
Section 36
//ISignalOwner (org.osflash.signals.ISignalOwner)
package org.osflash.signals {
public interface ISignalOwner extends ISignal, IDispatcher {
function removeAll():void;
}
}//package org.osflash.signals
Section 37
//Signal (org.osflash.signals.Signal)
package org.osflash.signals {
import flash.utils.*;
import flash.errors.*;
public class Signal implements ISignalOwner, IDispatcher {
protected var _valueClasses:Array;
protected var listeners:Array;
protected var onceListeners:Dictionary;
protected var listenersNeedCloning:Boolean;// = false
public function Signal(... _args){
this.listeners = [];
this.onceListeners = new Dictionary();
if ((((_args.length == 1)) && ((_args[0] is Array)))){
var _local1:Array = _args[0];
};
this.valueClasses = _args;
}
public function get valueClasses():Array{
return (this._valueClasses);
}
public function set valueClasses(_arg1:Array):void{
this._valueClasses = (_arg1) ? _arg1.slice() : [];
var _local2:int = this._valueClasses.length;
while (_local2--) {
if (!(this._valueClasses[_local2] is Class)){
throw (new ArgumentError(((((("Invalid valueClasses argument: item at index " + _local2) + " should be a Class but was:<") + this._valueClasses[_local2]) + ">.") + getQualifiedClassName(this._valueClasses[_local2]))));
};
};
}
public function get numListeners():uint{
return (this.listeners.length);
}
public function add(_arg1:Function):Function{
this.registerListener(_arg1);
return (_arg1);
}
public function addOnce(_arg1:Function):Function{
this.registerListener(_arg1, true);
return (_arg1);
}
public function remove(_arg1:Function):Function{
var _local2:int = this.listeners.indexOf(_arg1);
if (_local2 == -1){
return (_arg1);
};
if (this.listenersNeedCloning){
this.listeners = this.listeners.slice();
this.listenersNeedCloning = false;
};
this.listeners.splice(_local2, 1);
delete this.onceListeners[_arg1];
return (_arg1);
}
public function removeAll():void{
var _local1:uint = this.listeners.length;
while (_local1--) {
this.remove((this.listeners[_local1] as Function));
};
}
public function dispatch(... _args):void{
var _local2:Object;
var _local3:Class;
var _local6:Function;
var _local4:int = this._valueClasses.length;
if (_args.length < _local4){
throw (new ArgumentError((((("Incorrect number of arguments. Expected at least " + _local4) + " but received ") + _args.length) + ".")));
};
var _local5:int;
while (_local5 < _local4) {
_local2 = _args[_local5];
if ((((_local2 === null)) || ((_local2 is this._valueClasses[_local5])))){
} else {
throw (new ArgumentError((((("Value object <" + _local2) + "> is not an instance of <") + _local3) + ">.")));
};
_local5++;
};
if (!this.listeners.length){
return;
};
this.listenersNeedCloning = true;
switch (_args.length){
case 0:
for each (_local6 in this.listeners) {
if (this.onceListeners[_local6]){
this.remove(_local6);
};
_local6();
};
break;
case 1:
for each (_local6 in this.listeners) {
if (this.onceListeners[_local6]){
this.remove(_local6);
};
_local6(_args[0]);
};
break;
default:
for each (_local6 in this.listeners) {
if (this.onceListeners[_local6]){
this.remove(_local6);
};
_local6.apply(null, _args);
};
};
this.listenersNeedCloning = false;
}
protected function registerListener(_arg1:Function, _arg2:Boolean=false):void{
var _local3:String;
if (_arg1.length < this._valueClasses.length){
_local3 = ((_arg1.length)==1) ? "argument" : "arguments";
throw (new ArgumentError((((((("Listener has " + _arg1.length) + " ") + _local3) + " but it needs at least ") + this._valueClasses.length) + " to match the given value classes.")));
};
if (!this.listeners.length){
this.listeners[0] = _arg1;
if (_arg2){
this.onceListeners[_arg1] = true;
};
return;
};
if (this.listeners.indexOf(_arg1) >= 0){
if (((this.onceListeners[_arg1]) && (!(_arg2)))){
throw (new IllegalOperationError("You cannot addOnce() then add() the same listener without removing the relationship first."));
};
if (((!(this.onceListeners[_arg1])) && (_arg2))){
throw (new IllegalOperationError("You cannot add() then addOnce() the same listener without removing the relationship first."));
};
return;
};
if (this.listenersNeedCloning){
this.listeners = this.listeners.slice();
this.listenersNeedCloning = false;
};
this.listeners[this.listeners.length] = _arg1;
if (_arg2){
this.onceListeners[_arg1] = true;
};
}
}
}//package org.osflash.signals
Section 38
//SlapSoundA (sound.sticky.SlapSoundA)
package sound.sticky {
import flash.media.*;
public dynamic class SlapSoundA extends Sound {
}
}//package sound.sticky
Section 39
//SlapSoundB (sound.sticky.SlapSoundB)
package sound.sticky {
import flash.media.*;
public dynamic class SlapSoundB extends Sound {
}
}//package sound.sticky
Section 40
//SlapSoundC (sound.sticky.SlapSoundC)
package sound.sticky {
import flash.media.*;
public dynamic class SlapSoundC extends Sound {
}
}//package sound.sticky
Section 41
//SlapSoundD (sound.sticky.SlapSoundD)
package sound.sticky {
import flash.media.*;
public dynamic class SlapSoundD extends Sound {
}
}//package sound.sticky
Section 42
//WooshSound (sounds.sticky.WooshSound)
package sounds.sticky {
import flash.media.*;
public dynamic class WooshSound extends Sound {
}
}//package sounds.sticky