package com.guru.project.papervision3D.element 
{
	import com.guru.project.papervision3D.element.base.ModelBase;
	import flash.display.MovieClip;
	import org.papervision3d.core.proto.MaterialObject3D;
	import org.papervision3d.events.InteractiveScene3DEvent;
	import org.papervision3d.objects.DisplayObject3D;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class RoomLab extends ModelBase
	{
		private var mTimeline_mc:MovieClip;
		
		public function RoomLab(pTimeline_mc:MovieClip, pDraggable_bol:Boolean = false)
		{
			super(pDraggable_bol, true);
			
			mTimeline_mc = pTimeline_mc;
			this.buildRoom();
			this.enablePlaneInteractive(true);
		}
		
		private function buildRoom():void
		{
			var numberOfChair_num:Number = 2;
			var gap_num:Number = 30;
			var chair_mc:MovieClip;
			for (var i:Number = 0; chair_mc = mTimeline_mc["chair"+i+"_mc"]; i++ )
			{
				var chair3D:DisplayObject3D = this.createChair(chair_mc);
				chair3D.z = 200;
				chair3D.x = (chair_mc.seat_mc.width / 2 + gap_num) * ((i * 2) - 1);
				this.addElementTo3DEnvironment(chair3D);
			}
			
			var floor_mc:MovieClip = mTimeline_mc.floorBtn_mc;
			var floor:MovieClipPlane = new MovieClipPlane(floor_mc, floor_mc.width, floor_mc.height, 4, 4, false, true);
			floor.interactive(true);
			floor.doubleSided(true);
			floor.z = 200;
			floor.localRotationX = -90;
			mPlane_array.push(floor.getPlane());
			mMaterial_array.push(floor.getMaterial());
			this.addElementTo3DEnvironment(floor);
		}
		
		public function addElementTo3DEnvironment(pObject:DisplayObject3D):void
		{
			this.getObjectContent().addChild(pObject, "element" + mElement_array.length);
			mElement_array.push(pObject);
		}
		
		private function createChair(pChair_mc:MovieClip):DisplayObject3D
		{
			var segmentW_num:Number = 2;
			var segmentH_num:Number = 2;
			
			var container_mc:DisplayObject3D = new DisplayObject3D();
			
			var back_mc:MovieClip = pChair_mc.back_mc;
			var seat_mc:MovieClip = pChair_mc.seat_mc;
			var leftFoot_mc:MovieClip = pChair_mc.left_mc;
			var rightFoot_mc:MovieClip = pChair_mc.right_mc;
			
			var backPlane:MovieClipPlane = new MovieClipPlane(back_mc, back_mc.width, back_mc.height, segmentW_num, segmentH_num, true);
			var seatPlane:MovieClipPlane = new MovieClipPlane(seat_mc, seat_mc.width, seat_mc.height, segmentW_num, segmentH_num, true);
			var leftPlane:MovieClipPlane = new MovieClipPlane(leftFoot_mc, leftFoot_mc.width, leftFoot_mc.height, segmentW_num, segmentH_num, true);
			var rightPlane:MovieClipPlane = new MovieClipPlane(rightFoot_mc, rightFoot_mc.width, rightFoot_mc.height, segmentW_num, segmentH_num, true);
			
			leftPlane.x = -seat_mc.width/2;
			leftPlane.y = leftFoot_mc.height/2;
			leftPlane.localRotationY = 90;
			
			rightPlane.x = seat_mc.width/2;
			rightPlane.y = rightFoot_mc.height/2;
			rightPlane.localRotationY = -90;
			
			seatPlane.y = Math.max(leftFoot_mc.height, rightFoot_mc.height);
			seatPlane.localRotationX = 90;
			
			backPlane.z = -seat_mc.height / 2;
			backPlane.y = seatPlane.y + back_mc.height / 2;
			
			backPlane.doubleSided(true);
			seatPlane.doubleSided(true);
			leftPlane.doubleSided(true);
			rightPlane.doubleSided(true);
			
			backPlane.interactive(true);
			seatPlane.interactive(true);
			leftPlane.interactive(true);
			rightPlane.interactive(true);
			
			container_mc.addChild(backPlane);
			container_mc.addChild(seatPlane);
			container_mc.addChild(leftPlane);
			container_mc.addChild(rightPlane);
			
			mPlane_array.push(backPlane.getPlane());
			mPlane_array.push(seatPlane.getPlane());
			mPlane_array.push(leftPlane.getPlane());
			mPlane_array.push(rightPlane.getPlane());
			
			mMaterial_array.push(backPlane.getMaterial());
			mMaterial_array.push(seatPlane.getMaterial());
			mMaterial_array.push(leftPlane.getMaterial());
			mMaterial_array.push(rightPlane.getMaterial());
			
			return container_mc;
		}
	}

}