Camo DecalSheetMaterialList for PV3d
♥0 |
Line 94 |
Modified 2009-07-26 03:49:12 |
MIT License
archived:2017-03-20 11:55:37
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 );
}
}
}