home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Templates / Flash / flashmo_101_3d_carousel / org / papervision3d / scenes / MovieScene3D.as < prev    next >
Text File  |  2007-07-18  |  6KB  |  176 lines

  1. /*
  2.  *  PAPER    ON   ERVIS  NPAPER ISION  PE  IS ON  PERVI IO  APER  SI  PA
  3.  *  AP  VI  ONPA  RV  IO PA     SI  PA ER  SI NP PE     ON AP  VI ION AP
  4.  *  PERVI  ON  PE VISIO  APER   IONPA  RV  IO PA  RVIS  NP PE  IS ONPAPE
  5.  *  ER     NPAPER IS     PE     ON  PE  ISIO  AP     IO PA ER  SI NP PER
  6.  *  RV     PA  RV SI     ERVISI NP  ER   IO   PE VISIO  AP  VISI  PA  RV3D
  7.  *  ______________________________________________________________________
  8.  *  papervision3d.org ΓÇó blog.papervision3d.org ΓÇó osflash.org/papervision3d
  9.  */
  10.  
  11. /*
  12.  * Copyright 2006 (c) Carlos Ulloa Matesanz, noventaynueve.com.
  13.  *
  14.  * Permission is hereby granted, free of charge, to any person
  15.  * obtaining a copy of this software and associated documentation
  16.  * files (the "Software"), to deal in the Software without
  17.  * restriction, including without limitation the rights to use,
  18.  * copy, modify, merge, publish, distribute, sublicense, and/or sell
  19.  * copies of the Software, and to permit persons to whom the
  20.  * Software is furnished to do so, subject to the following
  21.  * conditions:
  22.  *
  23.  * The above copyright notice and this permission notice shall be
  24.  * included in all copies or substantial portions of the Software.
  25.  *
  26.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  27.  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  28.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  29.  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  30.  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  31.  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  32.  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  33.  * OTHER DEALINGS IN THE SOFTWARE.
  34.  */
  35.  
  36. // _______________________________________________________________________ MovieScene3D
  37.  
  38. package org.papervision3d.scenes
  39. {
  40. import flash.utils.getTimer;
  41. import flash.display.*;
  42.  
  43. import org.papervision3d.scenes.*;
  44. import org.papervision3d.core.proto.*;
  45.  
  46. import org.papervision3d.objects.DisplayObject3D;
  47. import flash.utils.Dictionary;
  48.  
  49. /**
  50. * The MovieScene3D class lets you create a scene where each object is rendered in its own container.
  51. * <p/>
  52. * A scene is the place where objects are placed, it contains the 3D environment.
  53. */
  54.  
  55. public class MovieScene3D extends Scene3D
  56. {
  57.     // ___________________________________________________________________ N E W
  58.     //
  59.     // NN  NN EEEEEE WW    WW
  60.     // NNN NN EE     WW WW WW
  61.     // NNNNNN EEEE   WWWWWWWW
  62.     // NN NNN EE     WWW  WWW
  63.     // NN  NN EEEEEE WW    WW
  64.  
  65.     /**
  66.     * Creates a scene where each object is rendered in its own container.
  67.     *
  68.     * @param    container    The Sprite where the new containers are created.
  69.     *
  70.     */
  71.     public function MovieScene3D( container:Sprite )
  72.     {
  73.         super( container );
  74.  
  75.         this.containerList = new Array();
  76.         spriteList = new Dictionary();
  77.     }
  78.  
  79.  
  80.     // ___________________________________________________________________ A D D C H I L D
  81.     //
  82.     //   AA   DDDDD  DDDDD   CCCC  HH  HH II LL     DDDDD
  83.     //  AAAA  DD  DD DD  DD CC  CC HH  HH II LL     DD  DD
  84.     // AA  AA DD  DD DD  DD CC     HHHHHH II LL     DD  DD
  85.     // AAAAAA DD  DD DD  DD CC  CC HH  HH II LL     DD  DD
  86.     // AA  AA DDDDD  DDDDD   CCCC  HH  HH II LLLLLL DDDDD
  87.  
  88.     /**
  89.     * Adds a child DisplayObject3D instance to the scene.
  90.     *
  91.     * If you add a GeometryObject3D symbol, a new DisplayObject3D instance is created.
  92.     *
  93.     * [TODO: If you add a child object that already has a different display object container as a parent, the object is removed from the child list of the other display object container.]
  94.     *
  95.     * @param    child    The GeometryObject3D symbol or DisplayObject3D instance to add as a child of the scene.
  96.     * @param    name    An optional name of the child to add or create. If no name is provided, the child name will be used.
  97.     * @return    The DisplayObject3D instance that you have added or created.
  98.     */
  99.     public override function addChild( child :DisplayObject3D, name :String=null ):DisplayObject3D
  100.     {
  101.         child = super.addChild( child, name );
  102.  
  103.         child.container = new Sprite();
  104.         container.addChild( child.container );
  105.         this.containerList.push( child.container );
  106.         spriteList[child] = child.container;
  107.         return child;
  108.     }
  109.     
  110.     public function getSprite(child:DisplayObject3D):Sprite
  111.     {
  112.         return spriteList[child];
  113.     }
  114.  
  115.  
  116.     // ___________________________________________________________________ R E N D E R   C A M E R A
  117.     //
  118.     // RRRRR  EEEEEE NN  NN DDDDD  EEEEEE RRRRR
  119.     // RR  RR EE     NNN NN DD  DD EE     RR  RR
  120.     // RRRRR  EEEE   NNNNNN DD  DD EEEE   RRRRR
  121.     // RR  RR EE     NN NNN DD  DD EE     RR  RR
  122.     // RR  RR EEEEEE NN  NN DDDDD  EEEEEE RR  RR CAMERA
  123.  
  124.     /**
  125.     * Generates an image from the camera's point of view and the visible models of the scene.
  126.     *
  127.     * @param    camera        camera to render from.
  128.     */
  129.     protected override function renderObjects( sort:Boolean ):void
  130.     {
  131.         var objectsLength :Number = this.objects.length;
  132.  
  133.         // Clear object container
  134.         var gfx          :Sprite;
  135.         var containerList :Array = this.containerList;
  136.         var i            :Number = 0;
  137.  
  138.         // Clear all known object
  139.         while( gfx = containerList[i++] ) gfx.graphics.clear();
  140.  
  141.         // Render
  142.         var p       :DisplayObject3D;
  143.         var objects :Array  = this.objects;
  144.         i = objects.length;
  145.  
  146.         if( sort )
  147.         {
  148.             while( p = objects[--i] )
  149.             {
  150.                 if( p.visible )
  151.                 {
  152.                     container.addChild( p.container );
  153.                     p.render( this );
  154.                 }
  155.             }
  156.         }
  157.         else
  158.         {
  159.             while( p = objects[--i] )
  160.             {
  161.                 if( p.visible )
  162.                 {
  163.                     p.render( this );
  164.                 }
  165.             }
  166.         }
  167.  
  168.         // Update stats
  169.         var stats:Object  = this.stats;
  170.         stats.performance = getTimer() - stats.performance;
  171.     }
  172.  
  173.     private var containerList : Array;
  174.     private var spriteList : Dictionary;
  175. }
  176. }