Section 1
//FPS (com.alternativagame.admin.FPS)
package com.alternativagame.admin {
import flash.events.*;
import flash.display.*;
import flash.geom.*;
import flash.text.*;
import flash.system.*;
import flash.utils.*;
public final class FPS extends Sprite {
private var currentY:int;
private var diagramTimer:int;
private var tfTimer:int;
private var downloadedBytes:uint;// = 0
private var socketOutBytes:uint;// = 0
private var socketOutLast:uint;// = 0
private var socketInBytes:uint;// = 0
private var mem:TextField;
private var skn:TextField;
private var diagram:BitmapData;
private var socketOut:TextField;
private var skins:int;// = -1
private var fps:TextField;
private var socketInLast:uint;// = 0
private var tfDelay:int;// = 0
private var socketIn:TextField;
private var dwl:TextField;
private var skinsChanged:int;// = 0
private static const maxMemory:uint = 41943040;
private static const diagramWidth:uint = 60;
private static const tfDelayMax:int = 10;
private static const maxSocket:uint = 4200;
private static const diagramHeight:uint = 40;
private static var instance:FPS;
public function FPS(_arg1:DisplayObjectContainer){
var _local2:Bitmap;
fps = new TextField();
mem = new TextField();
skn = new TextField();
dwl = new TextField();
socketIn = new TextField();
socketOut = new TextField();
super();
if (instance == null){
mouseEnabled = false;
mouseChildren = false;
_arg1.addChild(this);
fps.defaultTextFormat = new TextFormat("Tahoma", 10, 0xCCCCCC);
fps.autoSize = TextFieldAutoSize.LEFT;
fps.text = ("FPS: " + Number(stage.frameRate).toFixed(2));
fps.selectable = false;
fps.x = (-(diagramWidth) - 2);
addChild(fps);
mem.defaultTextFormat = new TextFormat("Tahoma", 10, 0xCCCC00);
mem.autoSize = TextFieldAutoSize.LEFT;
mem.text = ("MEM: " + bytesToString(System.totalMemory));
mem.selectable = false;
mem.x = (-(diagramWidth) - 2);
mem.y = 10;
addChild(mem);
currentY = 20;
skn.defaultTextFormat = new TextFormat("Tahoma", 10, 0xFF6600);
skn.autoSize = TextFieldAutoSize.LEFT;
skn.text = ("MEM: " + bytesToString(System.totalMemory));
skn.selectable = false;
skn.x = (-(diagramWidth) - 2);
dwl.defaultTextFormat = new TextFormat("Tahoma", 10, 0xCC00CC);
dwl.autoSize = TextFieldAutoSize.LEFT;
dwl.selectable = false;
dwl.x = (-(diagramWidth) - 2);
socketIn.defaultTextFormat = new TextFormat("Tahoma", 10, 0xFF00);
socketIn.autoSize = TextFieldAutoSize.LEFT;
socketIn.selectable = false;
socketIn.x = (-(diagramWidth) - 2);
socketOut.defaultTextFormat = new TextFormat("Tahoma", 10, 26367);
socketOut.autoSize = TextFieldAutoSize.LEFT;
socketOut.selectable = false;
socketOut.x = (-(diagramWidth) - 2);
diagram = new BitmapData(diagramWidth, diagramHeight, true, 553648127);
_local2 = new Bitmap(diagram);
_local2.y = (currentY + 4);
_local2.x = -(diagramWidth);
addChildAt(_local2, 0);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(Event.RESIZE, onResize);
onResize();
diagramTimer = getTimer();
tfTimer = getTimer();
} else {
throw (new Error("FPS is a Singleton. Use FPS.init to create FPS instance"));
};
}
private function bytesToString(_arg1:uint):String{
var _local2:String;
if (_arg1 < 0x0400){
_local2 = (String(_arg1) + "b");
} else {
if (_arg1 < 0x2800){
_local2 = (Number((_arg1 / 0x0400)).toFixed(2) + "kb");
} else {
if (_arg1 < 102400){
_local2 = (Number((_arg1 / 0x0400)).toFixed(1) + "kb");
} else {
if (_arg1 < 0x100000){
_local2 = ((_arg1 >> 10) + "kb");
} else {
if (_arg1 < 0xA00000){
_local2 = (Number((_arg1 / 0x100000)).toFixed(2) + "mb");
} else {
if (_arg1 < 104857600){
_local2 = (Number((_arg1 / 0x100000)).toFixed(1) + "mb");
} else {
_local2 = ((_arg1 >> 20) + "mb");
};
};
};
};
};
};
return (_local2);
}
private function onEnterFrame(_arg1:Event):void{
tfDelay++;
if (tfDelay >= tfDelayMax){
tfDelay = 0;
fps.text = ("FPS: " + Number(((1000 * tfDelayMax) / (getTimer() - tfTimer))).toFixed(2));
tfTimer = getTimer();
};
var _local2:Number = (1000 / (getTimer() - diagramTimer));
var _local3:Number = ((_local2)>stage.frameRate) ? 1 : (_local2 / stage.frameRate);
diagramTimer = getTimer();
diagram.scroll(1, 0);
diagram.fillRect(new Rectangle(0, 0, 1, diagram.height), 553648127);
diagram.setPixel32(0, (diagramHeight * (1 - _local3)), 4291611852);
mem.text = ("MEM: " + bytesToString(System.totalMemory));
var _local4:Number = ((skins)==0) ? 0 : (skinsChanged / skins);
diagram.setPixel32(0, (diagramHeight * (1 - _local4)), 4294927872);
var _local5:Number = (System.totalMemory / maxMemory);
diagram.setPixel32(0, (diagramHeight * (1 - _local5)), 4291611648);
var _local6:Number = ((socketInBytes - socketInLast) / maxSocket);
socketInLast = socketInBytes;
diagram.setPixel32(0, (diagramHeight * (1 - _local6)), 4278255360);
var _local7:Number = ((socketOutBytes - socketOutLast) / maxSocket);
socketOutLast = socketOutBytes;
diagram.setPixel32(0, (diagramHeight * (1 - _local7)), 4278216447);
}
private function onResize(_arg1:Event=null):void{
var _local2:Point = parent.globalToLocal(new Point((stage.stageWidth - 2), -3));
x = _local2.x;
y = _local2.y;
}
public static function addDownloadBytes(_arg1:uint):void{
if (instance.downloadedBytes == 0){
instance.dwl.y = instance.currentY;
instance.currentY = (instance.currentY + 10);
instance.addChild(instance.dwl);
instance.getChildAt(0).y = (instance.currentY + 4);
};
instance.downloadedBytes = (instance.downloadedBytes + _arg1);
instance.dwl.text = ("DWL: " + instance.bytesToString(instance.downloadedBytes));
}
public static function init(_arg1:DisplayObjectContainer):void{
instance = new FPS(_arg1);
}
public static function addSocketInBytes(_arg1:uint):void{
if (instance.socketInBytes == 0){
instance.socketIn.y = instance.currentY;
instance.currentY = (instance.currentY + 10);
instance.addChild(instance.socketIn);
instance.getChildAt(0).y = (instance.currentY + 4);
};
instance.socketInBytes = (instance.socketInBytes + _arg1);
instance.socketIn.text = ("IN: " + instance.bytesToString(instance.socketInBytes));
}
public static function addSocketOutBytes(_arg1:uint):void{
if (instance.socketOutBytes == 0){
instance.socketOut.y = instance.currentY;
instance.currentY = (instance.currentY + 10);
instance.addChild(instance.socketOut);
instance.getChildAt(0).y = (instance.currentY + 4);
};
instance.socketOutBytes = (instance.socketOutBytes + _arg1);
instance.socketOut.text = ("OUT: " + instance.bytesToString(instance.socketOutBytes));
}
public static function addSkins(_arg1:uint, _arg2:uint):void{
if (instance.skins < 0){
instance.skn.y = instance.currentY;
instance.currentY = (instance.currentY + 10);
instance.addChild(instance.skn);
instance.getChildAt(0).y = (instance.currentY + 4);
};
instance.skins = _arg1;
instance.skinsChanged = _arg2;
instance.skn.text = ("SKN: " + ((_arg2)>0) ? ((_arg1.toString() + "-") + _arg2.toString()) : _arg1.toString());
}
}
}//package com.alternativagame.admin
Section 2
//TestInfo (com.alternativagame.test.TestInfo)
package com.alternativagame.test {
import flash.text.*;
import flash.system.*;
public class TestInfo extends TextField {
public function TestInfo(){
autoSize = TextFieldAutoSize.LEFT;
selectable = false;
text = (((("Flash Player (" + Capabilities.playerType) + ") ") + Capabilities.version) + "\n");
setTextFormat(new TextFormat("Tahoma", 10, 8355635));
defaultTextFormat = new TextFormat("Tahoma", 10, 0x7F7F7F);
}
public function write(_arg1:String):void{
appendText(("\n" + _arg1));
}
}
}//package com.alternativagame.test
Section 3
//RGB (com.alternativagame.type.RGB)
package com.alternativagame.type {
import com.alternativagame.utility.*;
public final class RGB {
public var green:uint;// = 0
public var red:uint;// = 0
public var blue:uint;// = 0
public function RGB(... _args){
if (_args.length > 0){
if (_args.length > 1){
red = _args[0];
green = _args[1];
blue = _args[2];
} else {
red = ((_args[0] & 0xFF0000) >>> 16);
green = ((_args[0] & 0xFF00) >>> 8);
blue = (_args[0] & 0xFF);
};
};
}
public function add(_arg1:RGB):void{
red = (red + _arg1.red);
green = (green + _arg1.green);
blue = (blue + _arg1.blue);
}
public function multiply(_arg1:Number):void{
red = (red * _arg1);
green = (green * _arg1);
blue = (blue * _arg1);
}
public function subtract(_arg1:RGB):void{
red = ((red)<_arg1.red) ? 0 : (red - _arg1.red);
green = ((green)<_arg1.green) ? 0 : (green - _arg1.green);
blue = ((blue)<_arg1.blue) ? 0 : (blue - _arg1.blue);
}
public function toString():String{
var _local1:String = red.toString(16).toUpperCase();
var _local2:String = green.toString(16).toUpperCase();
var _local3:String = blue.toString(16).toUpperCase();
_local1 = ((_local1.length)==1) ? ("0" + _local1) : _local1;
_local2 = ((_local2.length)==1) ? ("0" + _local2) : _local2;
_local3 = ((_local3.length)==1) ? ("0" + _local3) : _local3;
return ((((("[RGB: " + _local1) + _local2) + _local3) + "]"));
}
public function copy(_arg1:RGB):void{
red = _arg1.red;
green = _arg1.green;
blue = _arg1.blue;
}
public function toInt():uint{
return ((((((red >>> 8)) ? 0xFF : red << 16) + (((green >>> 8)) ? 0xFF : green << 8)) + ((blue >>> 8)) ? 0xFF : blue));
}
public function clone():RGB{
return (new RGB(red, green, blue));
}
public function equals(_arg1:RGB):Boolean{
return ((((((red == _arg1.red)) && ((green == _arg1.green)))) && ((blue == _arg1.blue))));
}
public static function interpolate(_arg1:RGB, _arg2:RGB, _arg3:Number):RGB{
return (new RGB((_arg1.red + ((_arg2.red - _arg1.red) * _arg3)), (_arg1.green + ((_arg2.green - _arg1.green) * _arg3)), (_arg1.blue + ((_arg2.blue - _arg1.blue) * _arg3))));
}
public static function random(_arg1:uint=0, _arg2:uint=0xFF, _arg3:uint=0, _arg4:uint=0xFF, _arg5:uint=0, _arg6:uint=0xFF):RGB{
return (new RGB(MathUtility.random(_arg1, _arg2), MathUtility.random(_arg3, _arg4), MathUtility.random(_arg5, _arg6)));
}
public static function average(_arg1:RGB, _arg2:RGB):RGB{
return (new RGB(((_arg1.red + _arg2.red) >>> 1), ((_arg1.green + _arg2.green) >>> 1), ((_arg1.blue + _arg2.blue) >>> 1)));
}
}
}//package com.alternativagame.type
Section 4
//MathUtility (com.alternativagame.utility.MathUtility)
package com.alternativagame.utility {
import flash.geom.*;
public final class MathUtility {
public static const degree60:Number = (Math.PI / 3);
private static const toDeg:Number = (180 / Math.PI);
public static const degree45:Number = (Math.PI / 4);
private static const toRad:Number = (Math.PI / 180);
public static const degree180:Number = Math.PI;
public static const degree360:Number = (Math.PI + Math.PI);
public static const degree90:Number = (Math.PI / 2);
public static const degree1:Number = toRad;
public static const degree30:Number = (Math.PI / 6);
public static const degree10:Number = (Math.PI / 18);
public static const degree5:Number = (Math.PI / 36);
public static function random(_arg1:Number=0, _arg2:Number=0):Number{
if (arguments.length == 0){
return (Math.random());
};
if (arguments.length == 1){
return ((Math.random() * _arg1));
};
return (((Math.random() * (_arg2 - _arg1)) + _arg1));
}
public static function segmentDistance(_arg1:Point, _arg2:Point, _arg3:Point):Number{
var _local4:Number = (_arg2.x - _arg1.x);
var _local5:Number = (_arg2.y - _arg1.y);
var _local6:Number = (_arg3.x - _arg1.x);
var _local7:Number = (_arg3.y - _arg1.y);
return ((((_local4 * _local7) - (_local5 * _local6)) / Math.sqrt(((_local4 * _local4) + (_local5 * _local5)))));
}
public static function randomAngle():Number{
return ((Math.random() * degree360));
}
public static function vectorAngleFast(_arg1:Point, _arg2:Point):Number{
var _local3:Number = vectorDot(_arg1, _arg2);
if (Math.abs(_local3) > 1){
_local3 = ((_local3)>0) ? 1 : -1;
};
return (Math.acos(_local3));
}
public static function vectorAngle(_arg1:Point, _arg2:Point):Number{
var _local3:Number = (_arg1.length * _arg2.length);
var _local4:Number = ((_local3)!=0) ? (vectorDot(_arg1, _arg2) / _local3) : 1;
return (Math.acos(_local4));
}
public static function limitAngle(_arg1:Number):Number{
var _local2:Number = (_arg1 % degree360);
_local2 = ((_local2)>0) ? ((_local2)>degree180) ? (_local2 - degree360) : _local2 : ((_local2)<-(degree180)) ? (_local2 + degree360) : _local2;
return (_local2);
}
public static function vectorDot(_arg1:Point, _arg2:Point):Number{
return (((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y)));
}
public static function toDegree(_arg1:Number):Number{
return ((_arg1 * toDeg));
}
public static function deltaAngle(_arg1:Number, _arg2:Number):Number{
var _local3:Number = (_arg2 - _arg1);
if (_local3 > degree180){
return ((_local3 - degree360));
};
if (_local3 < -(degree180)){
return ((_local3 + degree360));
};
return (_local3);
}
public static function toRadian(_arg1:Number):Number{
return ((_arg1 * toRad));
}
public static function vectorCross(_arg1:Point, _arg2:Point):Number{
return (((_arg1.x * _arg2.y) - (_arg1.y * _arg2.x)));
}
public static function triangleHasPoint(_arg1:Point, _arg2:Point, _arg3:Point, _arg4:Point):Boolean{
if (vectorCross(_arg3.subtract(_arg1), _arg4.subtract(_arg1)) <= 0){
if (vectorCross(_arg2.subtract(_arg3), _arg4.subtract(_arg3)) <= 0){
if (vectorCross(_arg1.subtract(_arg2), _arg4.subtract(_arg2)) <= 0){
return (true);
};
return (false);
} else {
return (false);
};
//unresolved jump
};
return (false);
}
public static function equals(_arg1:Number, _arg2:Number, _arg3:Number=0):Boolean{
return ((Math.abs((_arg2 - _arg1)) <= _arg3));
}
}
}//package com.alternativagame.utility
Section 5
//MouseUtility (com.alternativagame.utility.MouseUtility)
package com.alternativagame.utility {
import flash.display.*;
import flash.geom.*;
public class MouseUtility {
private static var _stage:Stage = null;
public static function init(_arg1:Stage):void{
_stage = _arg1;
}
public static function localCoords(_arg1:DisplayObject):Point{
return (_arg1.globalToLocal(globalCoords()));
}
public static function globalCoords(_arg1:Boolean=true):Point{
var _local3:int;
var _local4:int;
var _local2:Point;
if (_stage != null){
_local3 = _stage.mouseX;
_local4 = _stage.mouseY;
if (_arg1){
_local3 = ((_local3)<0) ? 0 : ((_local3)>_stage.stageWidth) ? _stage.stageWidth : _local3;
_local4 = ((_local4)<0) ? 0 : ((_local4)>_stage.stageHeight) ? _stage.stageHeight : _local4;
};
_local2 = new Point(_local3, _local4);
} else {
throw (new Error("MouseUtility don't have link to stage. Use MouseUtility.init(stage) before."));
};
return (_local2);
}
}
}//package com.alternativagame.utility
Section 6
//BitmapAsset (mx.core.BitmapAsset)
package mx.core {
import flash.display.*;
public class BitmapAsset extends FlexBitmap implements IFlexAsset, IFlexDisplayObject {
mx_internal static const VERSION:String = "3.0.0.0";
public function BitmapAsset(_arg1:BitmapData=null, _arg2:String="auto", _arg3:Boolean=false){
super(_arg1, _arg2, _arg3);
}
public function get measuredWidth():Number{
if (bitmapData){
return (bitmapData.width);
};
return (0);
}
public function get measuredHeight():Number{
if (bitmapData){
return (bitmapData.height);
};
return (0);
}
public function setActualSize(_arg1:Number, _arg2:Number):void{
width = _arg1;
height = _arg2;
}
public function move(_arg1:Number, _arg2:Number):void{
this.x = _arg1;
this.y = _arg2;
}
}
}//package mx.core
Section 7
//FlexBitmap (mx.core.FlexBitmap)
package mx.core {
import flash.display.*;
import mx.utils.*;
public class FlexBitmap extends Bitmap {
mx_internal static const VERSION:String = "3.0.0.0";
public function FlexBitmap(_arg1:BitmapData=null, _arg2:String="auto", _arg3:Boolean=false){
var bitmapData = _arg1;
var pixelSnapping = _arg2;
var smoothing = _arg3;
super(bitmapData, pixelSnapping, smoothing);
try {
name = NameUtil.createUniqueName(this);
} catch(e:Error) {
};
}
override public function toString():String{
return (NameUtil.displayObjectToString(this));
}
}
}//package mx.core
Section 8
//IFlexAsset (mx.core.IFlexAsset)
package mx.core {
public interface IFlexAsset {
}
}//package mx.core
Section 9
//IFlexDisplayObject (mx.core.IFlexDisplayObject)
package mx.core {
import flash.events.*;
import flash.display.*;
import flash.geom.*;
import flash.accessibility.*;
public interface IFlexDisplayObject extends IBitmapDrawable, IEventDispatcher {
function get visible():Boolean;
function get rotation():Number;
function localToGlobal(_arg1:Point):Point;
function get name():String;
function set width(_arg1:Number):void;
function get measuredHeight():Number;
function get blendMode():String;
function get scale9Grid():Rectangle;
function set name(_arg1:String):void;
function set scaleX(_arg1:Number):void;
function set scaleY(_arg1:Number):void;
function get measuredWidth():Number;
function get accessibilityProperties():AccessibilityProperties;
function set scrollRect(_arg1:Rectangle):void;
function get cacheAsBitmap():Boolean;
function globalToLocal(_arg1:Point):Point;
function get height():Number;
function set blendMode(_arg1:String):void;
function get parent():DisplayObjectContainer;
function getBounds(_arg1:DisplayObject):Rectangle;
function get opaqueBackground():Object;
function set scale9Grid(_arg1:Rectangle):void;
function setActualSize(_arg1:Number, _arg2:Number):void;
function set alpha(_arg1:Number):void;
function set accessibilityProperties(_arg1:AccessibilityProperties):void;
function get width():Number;
function hitTestPoint(_arg1:Number, _arg2:Number, _arg3:Boolean=false):Boolean;
function set cacheAsBitmap(_arg1:Boolean):void;
function get scaleX():Number;
function get scaleY():Number;
function get scrollRect():Rectangle;
function get mouseX():Number;
function get mouseY():Number;
function set height(_arg1:Number):void;
function set mask(_arg1:DisplayObject):void;
function getRect(_arg1:DisplayObject):Rectangle;
function get alpha():Number;
function set transform(_arg1:Transform):void;
function move(_arg1:Number, _arg2:Number):void;
function get loaderInfo():LoaderInfo;
function get root():DisplayObject;
function hitTestObject(_arg1:DisplayObject):Boolean;
function set opaqueBackground(_arg1:Object):void;
function set visible(_arg1:Boolean):void;
function get mask():DisplayObject;
function set x(_arg1:Number):void;
function set y(_arg1:Number):void;
function get transform():Transform;
function set filters(_arg1:Array):void;
function get x():Number;
function get y():Number;
function get filters():Array;
function set rotation(_arg1:Number):void;
function get stage():Stage;
}
}//package mx.core
Section 10
//IRepeaterClient (mx.core.IRepeaterClient)
package mx.core {
public interface IRepeaterClient {
function get instanceIndices():Array;
function set instanceIndices(_arg1:Array):void;
function get isDocument():Boolean;
function set repeaters(_arg1:Array):void;
function initializeRepeaterArrays(_arg1:IRepeaterClient):void;
function get repeaters():Array;
function set repeaterIndices(_arg1:Array):void;
function get repeaterIndices():Array;
}
}//package mx.core
Section 11
//mx_internal (mx.core.mx_internal)
package mx.core {
public namespace mx_internal = "http://www.adobe.com/2006/flex/mx/internal";
}//package mx.core
Section 12
//NameUtil (mx.utils.NameUtil)
package mx.utils {
import flash.display.*;
import mx.core.*;
import flash.utils.*;
public class NameUtil {
mx_internal static const VERSION:String = "3.0.0.0";
private static var counter:int = 0;
public static function displayObjectToString(_arg1:DisplayObject):String{
var _local2:String;
var _local4:String;
var _local5:Array;
var _local3:DisplayObject = _arg1;
while (_local3 != null) {
if (((((_local3.parent) && (_local3.stage))) && ((_local3.parent == _local3.stage)))){
break;
};
_local4 = _local3.name;
if ((_local3 is IRepeaterClient)){
_local5 = IRepeaterClient(_local3).instanceIndices;
if (_local5){
_local4 = (_local4 + (("[" + _local5.join("][")) + "]"));
};
};
_local2 = ((_local2 == null)) ? _local4 : ((_local4 + ".") + _local2);
_local3 = _local3.parent;
};
return (_local2);
}
public static function createUniqueName(_arg1:Object):String{
if (!_arg1){
return (null);
};
var _local2:String = getQualifiedClassName(_arg1);
var _local3:int = _local2.indexOf("::");
if (_local3 != -1){
_local2 = _local2.substr((_local3 + 2));
};
var _local4:int = _local2.charCodeAt((_local2.length - 1));
if ((((_local4 >= 48)) && ((_local4 <= 57)))){
_local2 = (_local2 + "_");
};
return ((_local2 + counter++));
}
}
}//package mx.utils
Section 13
//Test3D (Test3D)
package {
import flash.events.*;
import com.alternativagame.type.*;
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
import com.alternativagame.test.*;
import com.alternativagame.admin.*;
import com.alternativagame.utility.*;
import flash.ui.*;
public class Test3D extends Sprite {
private var container:Sprite;
private var contrast:Number;// = 0.5
private var spotAlpha:Shape;
private var spotRect:Rectangle;
private var spot:BitmapData;
private var light:BitmapData;
private var coords:Point;
private var spotContainer:Sprite;
private var spotGreen:Shape;
private var spotRed:Shape;
private var diffuseBitmap:Bitmap;
private var spotRadius:Number;// = 200
private var spotAndNormal:BitmapData;
private var index:uint;// = 8
private var diffuse:BitmapData;
private var color:RGB;
private var lightBitmap:Bitmap;
private var normal:BitmapData;
private var needDraw:Boolean;// = false
private var spotBlue:Shape;
private var filter:ColorMatrixFilter;
private static const diffuse1:BitmapData = new bmpDiffuse1().bitmapData;
private static const diffuse2:BitmapData = new bmpDiffuse2().bitmapData;
private static const diffuse3:BitmapData = new bmpDiffuse3().bitmapData;
private static const diffuse4:BitmapData = new bmpDiffuse4().bitmapData;
private static const diffuse5:BitmapData = new bmpDiffuse5().bitmapData;
private static const diffuse6:BitmapData = new bmpDiffuse6().bitmapData;
private static const diffuse7:BitmapData = new bmpDiffuse7().bitmapData;
private static const diffuse8:BitmapData = new bmpDiffuse8().bitmapData;
private static const normal2:BitmapData = new bmpNormal2().bitmapData;
private static const normal4:BitmapData = new bmpNormal4().bitmapData;
private static const normal5:BitmapData = new bmpNormal5().bitmapData;
private static const normal6:BitmapData = new bmpNormal6().bitmapData;
private static const normal7:BitmapData = new bmpNormal7().bitmapData;
private static const normal1:BitmapData = new bmpNormal1().bitmapData;
private static const bmpSphere:Class = Test3D_bmpSphere;
private static const normal3:BitmapData = new bmpNormal3().bitmapData;
private static const bmpDiffuse1:Class = Test3D_bmpDiffuse1;
private static const bmpDiffuse2:Class = Test3D_bmpDiffuse2;
private static const bmpDiffuse3:Class = Test3D_bmpDiffuse3;
private static const bmpDiffuse4:Class = Test3D_bmpDiffuse4;
private static const bmpDiffuse5:Class = Test3D_bmpDiffuse5;
private static const bmpDiffuse6:Class = Test3D_bmpDiffuse6;
private static const bmpDiffuse7:Class = Test3D_bmpDiffuse7;
private static const bmpDiffuse8:Class = Test3D_bmpDiffuse8;
private static const normal8:BitmapData = new bmpNormal8().bitmapData;
private static const sphere:BitmapData = new bmpSphere().bitmapData;
private static const bmpNormal1:Class = Test3D_bmpNormal1;
private static const bmpNormal2:Class = Test3D_bmpNormal2;
private static const bmpNormal3:Class = Test3D_bmpNormal3;
private static const bmpNormal5:Class = Test3D_bmpNormal5;
private static const bmpNormal7:Class = Test3D_bmpNormal7;
private static const bmpNormal4:Class = Test3D_bmpNormal4;
private static const bmpNormal6:Class = Test3D_bmpNormal6;
private static const bmpNormal8:Class = Test3D_bmpNormal8;
public function Test3D(){
color = new RGB(0xFFFFFF);
coords = new Point();
spotRect = new Rectangle();
filter = new ColorMatrixFilter();
super();
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.quality = StageQuality.LOW;
stage.frameRate = 100;
MouseUtility.init(stage);
container = new Sprite();
addChild(container);
FPS.init(this);
var _local1:TestInfo = new TestInfo();
_local1.write("Mouse move — move light");
_local1.write("Mouse click — change light color");
_local1.write("Mouse wheel or +/- — change specularity");
_local1.write("Ctrl + mouse wheel or +/- — change spot size");
_local1.write("Space — change texture");
addChild(_local1);
diffuseBitmap = new Bitmap();
container.addChild(diffuseBitmap);
lightBitmap = new Bitmap();
lightBitmap.blendMode = BlendMode.HARDLIGHT;
container.addChild(lightBitmap);
spotContainer = new Sprite();
spotRed = new Shape();
spotGreen = new Shape();
spotBlue = new Shape();
spotAlpha = new Shape();
spotRed.blendMode = BlendMode.ADD;
spotGreen.blendMode = BlendMode.ADD;
spotBlue.blendMode = BlendMode.ADD;
spotContainer.addChild(spotRed);
spotContainer.addChild(spotGreen);
spotContainer.addChild(spotBlue);
var _local2:Matrix = new Matrix();
_local2.createGradientBox(100, 100, 0, -50, -50);
spotRed.graphics.beginGradientFill(GradientType.LINEAR, [0xFF0000, 0], [1, 1], [0, 0xFF], _local2);
spotRed.graphics.drawCircle(0, 0, 50);
_local2.rotate((-(Math.PI) / 2));
spotGreen.graphics.beginGradientFill(GradientType.LINEAR, [0, 0xFF00], [1, 1], [0, 0xFF], _local2);
spotGreen.graphics.drawCircle(0, 0, 50);
spotBlue.graphics.beginGradientFill(GradientType.RADIAL, [0, 0xFF], [1, 1], [0, 0xFF], _local2);
spotBlue.graphics.drawCircle(0, 0, 50);
spotAlpha.graphics.beginGradientFill(GradientType.RADIAL, [0xFFFFFF, 0], [1, 1], [0, 0xFF], _local2);
spotAlpha.graphics.drawCircle(0, 0, 50);
setTexture();
calculateMatrix();
drawSpot();
drawLight();
onResize(null);
stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
stage.addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheel);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(Event.RESIZE, onResize);
}
private function addRadius(_arg1:Number):void{
spotRadius = (spotRadius + _arg1);
spotRadius = ((spotRadius)<10) ? 10 : ((spotRadius)>500) ? 500 : spotRadius;
drawSpot();
needDraw = true;
}
private function drawLight():void{
light.fillRect(spotRect, 0);
spotRect = new Rectangle(Math.floor((coords.x - spotRadius)), Math.floor((coords.y - spotRadius)), (spotRadius * 2), (spotRadius * 2));
spotAndNormal.copyPixels(normal, spotRect, new Point());
spotAndNormal.draw(spot, null, new ColorTransform(1, 1, 1, 0, 0, 0, 0, 0xFF), BlendMode.DIFFERENCE);
spotAndNormal.applyFilter(spotAndNormal, spotAndNormal.rect, new Point(), filter);
light.copyPixels(spotAndNormal, spotAndNormal.rect, new Point(spotRect.x, spotRect.y), spot, new Point());
}
private function onEnterFrame(_arg1:Event):void{
if (needDraw){
drawLight();
needDraw = false;
};
}
private function onKeyDown(_arg1:KeyboardEvent):void{
switch (_arg1.keyCode){
case Keyboard.SPACE:
index = ((index)<8) ? (index + 1) : 1;
setTexture();
needDraw = true;
break;
case 107:
case 187:
if (_arg1.ctrlKey){
addRadius(20);
} else {
addContrast(0.1);
};
break;
case 109:
case 189:
if (_arg1.ctrlKey){
addRadius(-20);
} else {
addContrast(-0.1);
};
break;
};
}
private function calculateMatrix():void{
var _local1:Number = (-1 - contrast);
var _local2:Number = (-1 - contrast);
var _local3:Number = 0;
var _local4:Number = (128 / contrast);
var _local5:Array = [_local1, _local2, _local3, 0, _local4, _local1, _local2, _local3, 0, _local4, _local1, _local2, _local3, 0, _local4, 0, 0, 0, 1, 0];
filter.matrix = _local5;
}
private function onMouseDown(_arg1:MouseEvent):void{
color = RGB.random();
lightBitmap.transform.colorTransform = new ColorTransform((color.red / 0xFF), (color.green / 0xFF), (color.blue / 0xFF));
}
private function setTexture():void{
switch (index){
case 1:
diffuse = diffuse1;
normal = normal1;
break;
case 2:
diffuse = diffuse2;
normal = normal2;
break;
case 3:
diffuse = diffuse3;
normal = normal3;
break;
case 4:
diffuse = diffuse4;
normal = normal4;
break;
case 5:
diffuse = diffuse5;
normal = normal5;
break;
case 6:
diffuse = diffuse6;
normal = normal6;
break;
case 7:
diffuse = diffuse7;
normal = normal7;
break;
case 8:
diffuse = diffuse8;
normal = normal8;
break;
};
diffuseBitmap.bitmapData = diffuse;
diffuseBitmap.x = (-(diffuse.width) / 2);
diffuseBitmap.y = (-(diffuse.height) / 2);
if ((((((light == null)) || (!((light.width == normal.width))))) || (!((light.height == normal.height))))){
light = new BitmapData(normal.width, normal.height, false, 0);
lightBitmap.bitmapData = light;
lightBitmap.x = (-(normal.width) / 2);
lightBitmap.y = (-(normal.height) / 2);
};
}
private function addContrast(_arg1:Number):void{
contrast = (contrast * (1 + _arg1));
contrast = ((contrast)<0.1) ? 0.1 : ((contrast)>1.5) ? 1.5 : contrast;
calculateMatrix();
needDraw = true;
}
private function drawSpot():void{
var _local1:Matrix = new Matrix((spotRadius / 50), 0, 0, (spotRadius / 50), spotRadius, spotRadius);
spotAndNormal = new BitmapData((spotRadius * 2), (spotRadius * 2), false, 0);
spotAndNormal.draw(spotAlpha, _local1);
spot = new BitmapData((spotRadius * 2), (spotRadius * 2), true, 0);
spot.draw(spotContainer, _local1);
spot.copyChannel(spotAndNormal, spotAndNormal.rect, new Point(), BitmapDataChannel.RED, BitmapDataChannel.ALPHA);
}
private function onResize(_arg1:Event):void{
container.x = (stage.stageWidth / 2);
container.y = (stage.stageHeight / 2);
}
private function onMouseWheel(_arg1:MouseEvent):void{
if (_arg1.ctrlKey){
addRadius((_arg1.delta * 10));
} else {
addContrast((_arg1.delta / 20));
};
}
private function onMouseMove(_arg1:MouseEvent):void{
coords = MouseUtility.localCoords(lightBitmap);
needDraw = true;
}
}
}//package
Section 14
//Test3D_bmpDiffuse1 (Test3D_bmpDiffuse1)
package {
import mx.core.*;
public class Test3D_bmpDiffuse1 extends BitmapAsset {
}
}//package
Section 15
//Test3D_bmpDiffuse2 (Test3D_bmpDiffuse2)
package {
import mx.core.*;
public class Test3D_bmpDiffuse2 extends BitmapAsset {
}
}//package
Section 16
//Test3D_bmpDiffuse3 (Test3D_bmpDiffuse3)
package {
import mx.core.*;
public class Test3D_bmpDiffuse3 extends BitmapAsset {
}
}//package
Section 17
//Test3D_bmpDiffuse4 (Test3D_bmpDiffuse4)
package {
import mx.core.*;
public class Test3D_bmpDiffuse4 extends BitmapAsset {
}
}//package
Section 18
//Test3D_bmpDiffuse5 (Test3D_bmpDiffuse5)
package {
import mx.core.*;
public class Test3D_bmpDiffuse5 extends BitmapAsset {
}
}//package
Section 19
//Test3D_bmpDiffuse6 (Test3D_bmpDiffuse6)
package {
import mx.core.*;
public class Test3D_bmpDiffuse6 extends BitmapAsset {
}
}//package
Section 20
//Test3D_bmpDiffuse7 (Test3D_bmpDiffuse7)
package {
import mx.core.*;
public class Test3D_bmpDiffuse7 extends BitmapAsset {
}
}//package
Section 21
//Test3D_bmpDiffuse8 (Test3D_bmpDiffuse8)
package {
import mx.core.*;
public class Test3D_bmpDiffuse8 extends BitmapAsset {
}
}//package
Section 22
//Test3D_bmpNormal1 (Test3D_bmpNormal1)
package {
import mx.core.*;
public class Test3D_bmpNormal1 extends BitmapAsset {
}
}//package
Section 23
//Test3D_bmpNormal2 (Test3D_bmpNormal2)
package {
import mx.core.*;
public class Test3D_bmpNormal2 extends BitmapAsset {
}
}//package
Section 24
//Test3D_bmpNormal3 (Test3D_bmpNormal3)
package {
import mx.core.*;
public class Test3D_bmpNormal3 extends BitmapAsset {
}
}//package
Section 25
//Test3D_bmpNormal4 (Test3D_bmpNormal4)
package {
import mx.core.*;
public class Test3D_bmpNormal4 extends BitmapAsset {
}
}//package
Section 26
//Test3D_bmpNormal5 (Test3D_bmpNormal5)
package {
import mx.core.*;
public class Test3D_bmpNormal5 extends BitmapAsset {
}
}//package
Section 27
//Test3D_bmpNormal6 (Test3D_bmpNormal6)
package {
import mx.core.*;
public class Test3D_bmpNormal6 extends BitmapAsset {
}
}//package
Section 28
//Test3D_bmpNormal7 (Test3D_bmpNormal7)
package {
import mx.core.*;
public class Test3D_bmpNormal7 extends BitmapAsset {
}
}//package
Section 29
//Test3D_bmpNormal8 (Test3D_bmpNormal8)
package {
import mx.core.*;
public class Test3D_bmpNormal8 extends BitmapAsset {
}
}//package
Section 30
//Test3D_bmpSphere (Test3D_bmpSphere)
package {
import mx.core.*;
public class Test3D_bmpSphere extends BitmapAsset {
}
}//package