package com.guru.project.papervision3D.base
{
	import com.guru.call.ICall;
	import flash.display.MovieClip;
	import flash.events.Event;
	import org.papervision3d.core.proto.CameraObject3D;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.view.BasicView;
	import org.papervision3d.view.Viewport3D;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class Papervision3DBase extends BasicView
	{
		private var mTimeline_mc:MovieClip;
		private var mRenderCall:ICall;
		private var mChild_array:Array;
		
		public function Papervision3DBase(pTimeline_mc:MovieClip, pViewportWidth_num:Number = 640, pViewportHeight_num:Number = 480, pScaleToStage_bol:Boolean = false, pInteractive_bol:Boolean = false, pCameraType_str:String = "Target")
		{
			mTimeline_mc = pTimeline_mc;
			mChild_array = new Array();
			
			super(pViewportWidth_num, pViewportHeight_num, pScaleToStage_bol, pInteractive_bol, pCameraType_str);
			
			mTimeline_mc.addChild(this.getViewPort());
		}
		
		public function enableInteraction(pEnable_bol:Boolean):void
		{
			this.getViewPort().interactive = pEnable_bol;
			//this.mouseEnabled = pEnable_bol;
			//this.mouseChildren = pEnable_bol;
		}
		
		public function get3DObject(pName_str):DisplayObject3D
		{
			var object:DisplayObject3D = this.getScene().getChildByName(pName_str);
			
			if(object == null)
				trace("3D Object \"" + pName_str + "\" does not exists!");
			
			return object;
		}
		
		public function add3DObject(pChild:DisplayObject3D, pName_str:String = ""):void
		{
			this.getScene().addChild(pChild, pName_str);
		}
		
		public function getCamera():CameraObject3D
		{
			return camera;
		}
		
		public function getViewPort():Viewport3D
		{
			return viewport;
		}
		
		public function getScene():Scene3D
		{
			return scene;
		}
		
		public function getRenderEngine():BasicRenderEngine
		{
			return renderer;
		}
		
		public function setRenderCall(pCall:ICall):void
		{
			mRenderCall = pCall;
		}
		
		override protected function onRenderTick(event:Event = null):void 
		{
			if(mRenderCall != null)
				mRenderCall.execute();
				
			super.onRenderTick(event);
		}
	}

}