Advertisement
Guest User

CraftDragWindowAspect

a guest
Mar 28th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ////////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  © 2017 nexters.com
  4. //
  5. ////////////////////////////////////////////////////////////////////////////////
  6.  
  7. package ru.nexters.ie2.view.scene.aspects.windows {
  8.     import protobuf.Dictionary_;
  9.     import protobuf.ProcessState;
  10.     import protobuf.dict.aspect.CraftData;
  11.     import protobuf.dict.aspect.CraftDragWindow;
  12.    
  13.     import ru.nexters.ie2.model.process.ProcessWrapper;
  14.     import ru.nexters.ie2.utils.realcost.RealcostUtils;
  15.     import ru.nexters.ie2.view.components.drag.DragDropPanelMediator;
  16.     import ru.nexters.ie2.view.components.drag.InstrumentData;
  17.     import ru.nexters.ie2.view.components.drag.renderer.DragProcessListItem;
  18.     import ru.nexters.ie2.view.components.drag.renderer.DragResListItem;
  19.     import ru.nexters.ie2.view.components.messagebox.MessageboxMediator;
  20.     import ru.nexters.ie2.view.components.missing_resource.MissingResourcePanelMediator;
  21.     import ru.nexters.ie2.view.scene.Entity;
  22.     import ru.nexters.ie2.view.vos.MessageboxVO;
  23.  
  24.     /**
  25.      * @author                  v.proskurin
  26.      * @version                 1.0
  27.      * @playerversion           Flash 10
  28.      * @langversion             3.0
  29.      * @date                    Mar 27, 2017
  30.      */
  31.     public class CraftDragWindowAspect extends BaseWindowAspect {
  32.        
  33.         //------------------------------------------------------------------------------
  34.         //  Class constants
  35.         //------------------------------------------------------------------------------
  36.        
  37.         //------------------------------------------------------------------------------
  38.         //  Class variables
  39.         //------------------------------------------------------------------------------
  40.        
  41.         //------------------------------------------------------------------------------
  42.         //  Class methods
  43.         //------------------------------------------------------------------------------
  44.        
  45.         //--------------------------------------------------------------------------
  46.         //  Constructor
  47.         //--------------------------------------------------------------------------
  48.        
  49.         public function CraftDragWindowAspect() {
  50.             super();
  51.         }
  52.        
  53.         //--------------------------------------------------------------------------
  54.         //  Variables
  55.         //--------------------------------------------------------------------------
  56.        
  57.         private var _source:CraftDragWindow;
  58.         private var _craftData:CraftData;
  59.        
  60.         //--------------------------------------------------------------------------
  61.         //  Properties
  62.         //--------------------------------------------------------------------------
  63.        
  64.         //--------------------------------------------------------------------------
  65.         //  Public methods
  66.         //--------------------------------------------------------------------------
  67.        
  68.         override public function init(target:Entity):void {
  69.             super.init(target);
  70.            
  71.             _source = target.source.interactive.craftDragWindow;
  72.             _craftData = target.source.interactive.craftData;
  73.            
  74.             if (!_craftData) {
  75.                 throw new Error("Missconfig: CraftDragWindowAspect without CraftDataAspect (" + _target.idProto.toString() + ")");
  76.             }
  77.                
  78.             _target.onOver.add(onOver);
  79.             _target.signals.onCollectDrop.add(onCollectDtop);
  80.         }
  81.        
  82.         override public function dispose():void{
  83.             super.dispose();
  84.            
  85.             _target.onOver.remove(onOver);
  86.             _target.signals.onCollectDrop.remove(onCollectDtop);
  87.            
  88.             _craftData = null;
  89.             _source = null;
  90.         }
  91.        
  92.         //--------------------------------------------------------------------------
  93.         //  Protected methods
  94.         //--------------------------------------------------------------------------
  95.        
  96.         override protected function onShow():void {
  97.             super.onShow();
  98.            
  99.             const currentProcess:ProcessWrapper = _target.source.currentProcess;
  100.             if (currentProcess && currentProcess.state == ProcessState.PROC_STATE_PRESENT) {
  101.                 MessageboxMediator.instance.show(MessageboxVO.create("COOMING SOON", "Boost is not supported"));
  102.                 return;
  103.             }
  104.            
  105.             if (!currentProcess) {
  106.                 openWindow(InstrumentData.SETUP, DragProcessListItem, _craftData.processIds);
  107.             }
  108.         }
  109.        
  110.         protected function onCollectDtop():void {
  111.             scrollToEntity();
  112.             openWindow(InstrumentData.COLLECT, DragResListItem, [_source.collectResId]);
  113.         }
  114.        
  115.         protected function onOver(status:Boolean):void {
  116.             if (!status) return;
  117.            
  118.             sendInstrument();
  119.         }
  120.        
  121.         //--------------------------------------------------------------------------
  122.         //  Private methods
  123.         //--------------------------------------------------------------------------
  124.        
  125.         private function sendInstrument():void {
  126.             if (!InstrumentData.isActive) return;
  127.            
  128.             var instrument:InstrumentData = InstrumentData.current;
  129.             instrument.callback = null;
  130.            
  131.             //установка процесса
  132.             if (instrument.type == InstrumentData.SETUP && hasProcess(instrument.data)) {
  133.                 if (!instrument.count) {
  134.                     //подпишимся на колбэк инструмента, только если небыло ничего выставлено
  135.                     instrument.callback = setupCallback;
  136.                 }
  137.                 _target.signals.onApplyInstrument.dispatch(instrument);
  138.             }
  139.                
  140.             //сбор дропа
  141.             else if (instrument.type == InstrumentData.COLLECT && equalCollectResId(instrument.data)) {
  142.                 _target.signals.onApplyInstrument.dispatch(instrument);
  143.             }
  144.         }
  145.        
  146.         private function hasProcess(processId:Dictionary_):Boolean {
  147.             for each (var pr:Dictionary_ in _craftData.processIds) {
  148.                 if (pr.prototype.as32 == processId.prototype.as32) {
  149.                     return true;
  150.                 }
  151.             }
  152.             return false;
  153.         }
  154.        
  155.         private function equalCollectResId(resId:Dictionary_):Boolean {
  156.             return _source.collectResId.prototype.as32 == resId.prototype.as32;
  157.         }
  158.        
  159.         private function setupCallback(instrument:InstrumentData, result:Boolean):void {
  160.             if (!result) {
  161.                 const processId:Dictionary_ = instrument.data;
  162.                 const pw:ProcessWrapper = ProcessWrapper.fromProtoAndObjects(processId.prototype.as32,[]);
  163.                 MissingResourcePanelMediator.instance.show(RealcostUtils.calcProcessStart(pw), sendInstrument);
  164.                 instrument.cancel();
  165.             }
  166.         }
  167.        
  168.         private function openWindow(instrumentId:String, renderer:Class, data:Object):void {
  169.             DragDropPanelMediator.instance.show(_target, instrumentId, renderer, data);
  170.         }
  171.        
  172.         //--------------------------------------------------------------------------
  173.         //  Event handlers
  174.         //--------------------------------------------------------------------------
  175.     }
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement