package com.guru.project.papervision3D.element.base
{
	import com.guru.call.ICall;
	import org.papervision3d.core.proto.MaterialObject3D;
	import org.papervision3d.events.InteractiveScene3DEvent;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.Plane;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class MaterialPlane extends DisplayObject3D
	{
		protected var mPlane:Plane;
		protected var mMaterial:MaterialObject3D;
		protected var mPressCall:ICall;
		
		public function MaterialPlane()
		{
			mMaterial = new WireframeMaterial();
		}
		
		override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void 
		{
			mPlane.addEventListener(type, listener, useCapture, priority, useWeakReference);
		}
		
		public function init():void
		{
			this.addChild(mPlane);
		}
		
		public function interactive(pEnable_bol:Boolean):void
		{
			if (mMaterial)
			{
				mMaterial.interactive = pEnable_bol;
				
				if (pEnable_bol)
					mPlane.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, onObjectPressHandler);
				else
					mPlane.removeEventListener(InteractiveScene3DEvent.OBJECT_PRESS, onObjectPressHandler);
			}
			else
			{
				trace("mMaterial does not set!");
			}
		}
		
		public function doubleSided(pEnable_bol:Boolean):void
		{
			if (mMaterial)
			{
				mMaterial.doubleSided = pEnable_bol;
			}
			else
			{
				trace("mMaterial does not set!");
			}
		}
		
		public function getMaterial():MaterialObject3D
		{
			return mMaterial;
		}
		
		public function getPlane():Plane
		{
			return mPlane;
		}
		
		public function setPressCall(pCall:ICall):void
		{
			mPressCall = pCall;
			this.interactive(true);
		}
		
		protected function onObjectPressHandler(e:InteractiveScene3DEvent):void
		{
			if (mPressCall)
				mPressCall.execute();
		}
		
	}

}