Camo DecalSheetMaterialList for PV3d FlashBum forked:0favorite:0lines:94license : MIT License modified : 2009-07-26 03:49:12 Embed Tweet 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 ); } } } Code Fullscreen Preview Fullscreen Camo DecalSheet MaterialList material pv3d map materialsByName Dictionary rotationX rotationY XML Object String Event Array int Number