Camo DecalSheetMaterialList for PV3d

by FlashBum
♥0 | Line 94 | Modified 2009-07-26 03:49:12 | MIT License
play

ActionScript3 source code

/**
 * Copyright FlashBum ( http://wonderfl.net/user/FlashBum )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/5c4s
 */

package {

	import camo.core.events.LoaderManagerEvent;
	import camo.core.managers.DecalSheetManager;
	import camo.core.decal.DecalSheet;

	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.objects.primitives.Cube;
	import org.papervision3d.view.BasicView;

	import flash.events.Event;
 
    public class TestFunction extends BasicView {
        private var cube : Cube;
		public var maxXRot : int = 90;
		public var maxYRot : int = 90;
		private var decalSheetManager : DecalSheetManager;

		public function TestFunction()
		{
			super( );
			
			camera.focus = 90;
			camera.zoom = 11;
			
			var decalSheetXML : XML = <decalsheet>
										<sheets baseURL="http://demos.flashartofwar.com/PvDecalSheetDemo/images/">
											<sheet name="cardboard" w="705" h="323" preload="true" src="cardboard.jpg"/>
										</sheets>
										<decals>
											<decal name="cardboard_top" x="21" y="0" w="684" h="20" sheet="cardboard"/>
											<decal name="cardboard_bottom" x="21" y="0" w="684" h="20" sheet="cardboard"/>
											<decal name="cardboard_back" x="21" y="23" w="684" h="300" sheet="cardboard"/>
											<decal name="cardboard_front" x="21" y="23" w="684" h="300" sheet="cardboard"/>
											<decal name="cardboard_right" x="0" y="0" w="20" h="300" sheet="cardboard"/>
											<decal name="cardboard_left" x="0" y="0" w="20" h="300" sheet="cardboard"/>
										</decals>
									</decalsheet>;
			
			decalSheetManager = new DecalSheetManager( );
			decalSheetManager.addEventListener( LoaderManagerEvent.PRELOAD_DONE, onDecalsLoaded );
			decalSheetManager.parseXML( decalSheetXML );
		}

		private function onDecalsLoaded(event : LoaderManagerEvent) : void
		{
			trace( "Hello?" );
			decalSheetManager.removeEventListener( LoaderManagerEvent.PRELOAD_DONE, onDecalsLoaded );
			create3dObject( );
			startRendering( );
		}

		private function create3dObject() : void
		{
			var decalSheet : DecalSheet = decalSheetManager.getSheet( "cardboard" );
			var decalNameMap : Object = {cardboard_top:"top", cardboard_bottom: "bottom", cardboard_back: "back", cardboard_front: "front", cardboard_right: "right", cardboard_left: "left"};
			var matList : DecalSheetMaterialList = new DecalSheetMaterialList( decalSheet, decalNameMap );
			
			cube = new Cube( matList, 684, 20, 300, 5, 5, 5, 0, 0 );
			scene.addChild( cube );
		}

		/**
		 * This rotates the cube to "face" the mouse.
		 */
		protected function updateMouseRotation() : void 
		{
			cube.rotationX = map( mouseY, 0, stage.stageWidth, maxXRot, - maxXRot );
			cube.rotationY = map( mouseX, 0, stage.stageHeight, maxYRot, - maxYRot );
		}

		override protected function onRenderTick(event : Event = null) : void
		{
			updateMouseRotation( );
			super.onRenderTick( event );
		}

		//Map the plane's rotation to a value in the defined range, based on the mouse position.
		private function map(v : Number, a : Number, b : Number, x : Number = 0, y : Number = 1) : Number 
		{
			return (v == a) ? x : (v - a) * (y - x) / (b - a) + x;
		}
    }
}

	import camo.core.decal.Decal;
	import camo.core.decal.DecalSheet;

	import org.papervision3d.materials.BitmapMaterial;
	import org.papervision3d.materials.utils.MaterialsList;

	import flash.utils.Dictionary;

	/**
	 * @author jessefreeman
	 */
        class DecalSheetMaterialList extends MaterialsList 
	{

		protected var decalSheet : DecalSheet;

		public function DecalSheetMaterialList(decalSheet : DecalSheet, nameMap : Object = null)
		{
			this.decalSheet = decalSheet;
			parseDecalSheet( nameMap );
		}

		protected function parseDecalSheet(nameMap : Object = null) : void
		{
			this.materialsByName = new Dictionary( true );
			this._materials = new Dictionary( false );
			//this._materialsTotal  = 0;
			var decals : Array = decalSheet.decalNames;
			
			for each (var value:String in decals)
			{
				var decalName : String = value;
				var decal : Decal = decalSheet.getDecal( decalName );
				var tempMat : BitmapMaterial = new BitmapMaterial( decal.bitmapData );
				    
				addMaterial( tempMat, (nameMap) ? nameMap[decalName] : decalName );
			}			
		}
	}