Advertisement
Guest User

Untitled

a guest
Aug 27th, 2019
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package projects.tanks.clients.flash.resources.resource.loaders
  2. {
  3.    import alternativa.engine3d.loaders.events.LoaderEvent;
  4.    import alternativa.engine3d.loaders.events.LoaderProgressEvent;
  5.    import flash.events.ErrorEvent;
  6.    import flash.events.Event;
  7.    import flash.events.EventDispatcher;
  8.    import flash.events.IOErrorEvent;
  9.    import flash.events.ProgressEvent;
  10.    import flash.events.SecurityErrorEvent;
  11.    import flash.net.URLLoaderDataFormat;
  12.    import flash.net.URLRequest;
  13.    import flash.utils.ByteArray;
  14.    import platform.client.fp10.core.resource.SafeURLLoader;
  15.    
  16.    [Event(name="loaderProgress",type="alternativa.engine3d.loaders.events.LoaderProgressEvent")]
  17.    [Event(name="partComplete",type="alternativa.engine3d.loaders.events.LoaderEvent")]
  18.    [Event(name="partOpen",type="alternativa.engine3d.loaders.events.LoaderEvent")]
  19.    [Event(name="ioError",type="flash.events.IOErrorEvent")]
  20.    [Event(name="complete",type="flash.events.Event")]
  21.    [Event(name="open",type="flash.events.Event")]
  22.    public class TextureLoader extends EventDispatcher
  23.    {
  24.      
  25.       private static const IDLE:int = 0;
  26.      
  27.       private static const LOADING_DIFFUSE_MAP:int = 1;
  28.      
  29.       private static const LOADING_OPACITY_MAP:int = 2;
  30.        
  31.      
  32.       public var diffuseData:ByteArray;
  33.      
  34.       public var opacityData:ByteArray;
  35.      
  36.       private var state:int = 0;
  37.      
  38.       private var urlLoader:SafeURLLoader;
  39.      
  40.       private var diffuseTextureUrl:String;
  41.      
  42.       private var opacityTextureUrl:String;
  43.      
  44.       public function TextureLoader()
  45.       {
  46.          super();
  47.       }
  48.      
  49.       public function load(param1:String, param2:String = null) : void
  50.       {
  51.          this.unload();
  52.          this.diffuseTextureUrl = param1;
  53.          this.opacityTextureUrl = param2;
  54.          this.loadPart(LOADING_DIFFUSE_MAP,param1);
  55.       }
  56.      
  57.       public function reload() : void
  58.       {
  59.          switch(this.state)
  60.          {
  61.             case LOADING_DIFFUSE_MAP:
  62.                this.destroyLoader();
  63.                this.loadPart(LOADING_DIFFUSE_MAP,this.diffuseTextureUrl);
  64.                break;
  65.             case LOADING_OPACITY_MAP:
  66.                this.destroyLoader();
  67.                this.loadPart(LOADING_OPACITY_MAP,this.opacityTextureUrl);
  68.                break;
  69.             default:
  70.                throw new Error("Wrong loader state: " + this.state);
  71.          }
  72.       }
  73.      
  74.       public function close() : void
  75.       {
  76.          if(this.state == IDLE)
  77.          {
  78.             return;
  79.          }
  80.          this.state = IDLE;
  81.          this.urlLoader.close();
  82.          this.cleanup();
  83.       }
  84.      
  85.       public function unload() : void
  86.       {
  87.          this.close();
  88.          this.diffuseData = null;
  89.          this.opacityData = null;
  90.       }
  91.      
  92.       private function cleanup() : void
  93.       {
  94.          this.destroyLoader();
  95.          this.diffuseTextureUrl = null;
  96.          this.opacityTextureUrl = null;
  97.       }
  98.      
  99.       private function loadPart(param1:int, param2:String) : void
  100.       {
  101.          this.state = param1;
  102.          this.createLoader();
  103.          this.urlLoader.load(new URLRequest(param2));
  104.       }
  105.      
  106.       private function onPartLoadingOpen(param1:Event) : void
  107.       {
  108.          if(this.diffuseData == null && hasEventListener(Event.OPEN))
  109.          {
  110.             dispatchEvent(new Event(Event.OPEN));
  111.          }
  112.          if(hasEventListener(LoaderEvent.PART_OPEN))
  113.          {
  114.             dispatchEvent(new LoaderEvent(LoaderEvent.PART_OPEN,2,this.state == LOADING_DIFFUSE_MAP?int(0):int(1)));
  115.          }
  116.       }
  117.      
  118.       private function onPartLoadingProgress(param1:ProgressEvent) : void
  119.       {
  120.          var _loc2_:int = 0;
  121.          var _loc3_:Number = NaN;
  122.          if(hasEventListener(LoaderProgressEvent.LOADER_PROGRESS))
  123.          {
  124.             _loc2_ = this.state == LOADING_DIFFUSE_MAP?int(0):int(1);
  125.             _loc3_ = 0.5 * (_loc2_ + param1.bytesLoaded / param1.bytesTotal);
  126.             dispatchEvent(new LoaderProgressEvent(LoaderProgressEvent.LOADER_PROGRESS,2,_loc2_,_loc3_,param1.bytesLoaded,param1.bytesTotal));
  127.          }
  128.       }
  129.      
  130.       private function onPartLoadingComplete(param1:Event) : void
  131.       {
  132.          switch(this.state)
  133.          {
  134.             case LOADING_DIFFUSE_MAP:
  135.                this.diffuseData = this.urlLoader.data;
  136.                this.destroyLoader();
  137.                this.dispatchPartComplete(0);
  138.                if(this.opacityTextureUrl)
  139.                {
  140.                   this.loadPart(LOADING_OPACITY_MAP,this.opacityTextureUrl);
  141.                }
  142.                else
  143.                {
  144.                   this.complete();
  145.                }
  146.                break;
  147.             case LOADING_OPACITY_MAP:
  148.                this.opacityData = this.urlLoader.data;
  149.                this.destroyLoader();
  150.                this.dispatchPartComplete(1);
  151.                this.complete();
  152.          }
  153.       }
  154.      
  155.       private function dispatchPartComplete(param1:int) : void
  156.       {
  157.          if(hasEventListener(LoaderEvent.PART_COMPLETE))
  158.          {
  159.             dispatchEvent(new LoaderEvent(LoaderEvent.PART_COMPLETE,2,param1));
  160.          }
  161.       }
  162.      
  163.       private function onLoadingError(param1:ErrorEvent) : void
  164.       {
  165.          this.state = IDLE;
  166.          this.cleanup();
  167.          dispatchEvent(param1);
  168.       }
  169.      
  170.       private function complete() : void
  171.       {
  172.          this.state = IDLE;
  173.          this.cleanup();
  174.          if(hasEventListener(Event.COMPLETE))
  175.          {
  176.             dispatchEvent(new Event(Event.COMPLETE));
  177.          }
  178.       }
  179.      
  180.       private function createLoader() : void
  181.       {
  182.          this.urlLoader = new SafeURLLoader();
  183.          this.urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
  184.          this.urlLoader.addEventListener(Event.OPEN,this.onPartLoadingOpen);
  185.          this.urlLoader.addEventListener(ProgressEvent.PROGRESS,this.onPartLoadingProgress);
  186.          this.urlLoader.addEventListener(Event.COMPLETE,this.onPartLoadingComplete);
  187.          this.urlLoader.addEventListener(IOErrorEvent.IO_ERROR,this.onLoadingError);
  188.          this.urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,this.onLoadingError);
  189.       }
  190.      
  191.       private function destroyLoader() : void
  192.       {
  193.          if(this.urlLoader != null)
  194.          {
  195.             this.urlLoader.close();
  196.             this.urlLoader.removeEventListener(Event.OPEN,this.onPartLoadingOpen);
  197.             this.urlLoader.removeEventListener(ProgressEvent.PROGRESS,this.onPartLoadingProgress);
  198.             this.urlLoader.removeEventListener(Event.COMPLETE,this.onPartLoadingComplete);
  199.             this.urlLoader.removeEventListener(IOErrorEvent.IO_ERROR,this.onLoadingError);
  200.             this.urlLoader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR,this.onLoadingError);
  201.             this.urlLoader = null;
  202.          }
  203.       }
  204.    }
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement