home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Templates / Flash / flashmo_101_3d_carousel / org / papervision3d / materials / MovieMaterial.as < prev    next >
Text File  |  2007-07-18  |  6KB  |  171 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. // __________________________________________________________________________ MOVIE MATERIAL
  37.  
  38. package org.papervision3d.materials
  39. {
  40. import flash.geom.Matrix;
  41. import flash.display.MovieClip;
  42. import flash.display.BitmapData;
  43. import flash.utils.Dictionary;
  44.  
  45. /**
  46. * The MovieMaterial class creates a texture from an existing MovieClip instance.
  47. * <p/>
  48. * The texture can be animated and/or transparent. Current scale and color values of the MovieClip instance will be used. Rotation will be discarded.
  49. * <p/>
  50. * The MovieClip's content needs to be top left aligned with the registration point.
  51. * <p/>
  52. * Materials collects data about how objects appear when rendered.
  53. */
  54. public class MovieMaterial extends BitmapMaterial
  55. {
  56.  
  57.     // ______________________________________________________________________ PUBLIC
  58.  
  59.     /**
  60.     * The MovieClip that is used as a texture.
  61.     */
  62.     public var movie :MovieClip;
  63.  
  64.     /**
  65.     * A Boolean value that determines whether the MovieClip is transparent. The default value is false, which is much faster.
  66.     */
  67.     public var movieTransparent :Boolean;
  68.  
  69.  
  70.     // ______________________________________________________________________ ANIMATED
  71.  
  72.     /**
  73.     * A Boolean value that determines whether the texture is animated.
  74.     *
  75.     * If set, the material must be included into the scene so the BitmapData texture can be updated when rendering. For performance reasons, the default value is false.
  76.     */
  77.     public function get animated():Boolean
  78.     {
  79.         return animatedMaterials[ this ];
  80.     }
  81.  
  82.     public function set animated( status:Boolean ):void
  83.     {
  84.         animatedMaterials[ this ] = status;
  85.     }
  86.  
  87.     // ______________________________________________________________________ NEW
  88.  
  89.     /**
  90.     * The MovieMaterial class creates a texture from an existing MovieClip instance.
  91.     *
  92.     * @param    asset            A String that contains an existing MovieClip library id.
  93.     * @param    transparent        [optional] - If it's not transparent, the empty areas of the MovieClip will be of fill32 color. Default value is false.
  94.     * @param    initObject        [optional] - An object that contains additional properties with which to populate the newly created material.
  95.     */
  96.     public function MovieMaterial( asset:*, transparent:Boolean=false, initObject:Object=null )
  97.     {
  98.         super( initBitmap( asset, transparent ), initObject );
  99.         
  100.         animatedMaterials[ this ] = false;
  101.     }
  102.  
  103.  
  104.     // ______________________________________________________________________ UPDATE
  105.  
  106.     /**
  107.     * Updates animated MovieClip bitmap.
  108.     *
  109.     * Draws the current MovieClip image onto bitmap.
  110.     */
  111.     public override function updateBitmap():void
  112.     {
  113.         var tex :BitmapData = this.bitmap;
  114.         var mov :MovieClip  = this.movie;
  115.  
  116.         tex.fillRect( tex.rect, this.fillColor );
  117.  
  118.         var mtx:Matrix = new Matrix();
  119.         mtx.scale( mov.scaleX, mov.scaleY );
  120.  
  121.         tex.draw( mov, mtx, mov.transform.colorTransform );
  122.         
  123.         extendBitmapEdges( tex, mov.width, mov.height );
  124.     }
  125.  
  126.  
  127.     // ______________________________________________________________________ CREATE BITMAP
  128.  
  129.     protected override function createBitmap( asset:* ):BitmapData
  130.     {
  131.         // Dispose of previous bitmap
  132.         if( this.bitmap ) this.bitmap.dispose();
  133.  
  134.         // Create new bitmap
  135.         this.bitmap = correctBitmap( new BitmapData( asset.width, asset.height, this.movieTransparent ), true );
  136.  
  137.         // Draw bitmap
  138.         this.movie = asset;
  139.         updateBitmap();
  140.  
  141.         return this.bitmap;
  142.     }
  143.  
  144.     // ______________________________________________________________________ CREATE BITMAP
  145.  
  146.     /**
  147.     * Updates bitmap on all animated MovieMaterial instances.
  148.     */
  149.     static public function updateAnimatedBitmaps():void
  150.     {
  151.         for( var material:Object in animatedMaterials )
  152.         {
  153.             if( animatedMaterials[ material ] )
  154.             {
  155.                 material.updateBitmap();
  156.             }
  157.         }
  158.     }
  159.  
  160.     // ______________________________________________________________________ PRIVATE
  161.  
  162.     private function initBitmap( asset:*, transparent:Boolean ):*
  163.     {
  164.         this.movieTransparent = transparent || false;
  165.  
  166.         return asset;
  167.     }
  168.     
  169.     static private var animatedMaterials :Dictionary = new Dictionary( false );
  170. }
  171. }