Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ////////////////////////////////////////////////////////////////////////////////
- //
- // © 2017 nexters.com
- //
- ////////////////////////////////////////////////////////////////////////////////
- package ru.nexters.ie2.view.scene.aspects.windows {
- import protobuf.Dictionary_;
- import protobuf.ProcessState;
- import protobuf.dict.aspect.CraftData;
- import protobuf.dict.aspect.CraftDragWindow;
- import ru.nexters.ie2.model.process.ProcessWrapper;
- import ru.nexters.ie2.utils.realcost.RealcostUtils;
- import ru.nexters.ie2.view.components.drag.DragDropPanelMediator;
- import ru.nexters.ie2.view.components.drag.InstrumentData;
- import ru.nexters.ie2.view.components.drag.renderer.DragProcessListItem;
- import ru.nexters.ie2.view.components.drag.renderer.DragResListItem;
- import ru.nexters.ie2.view.components.messagebox.MessageboxMediator;
- import ru.nexters.ie2.view.components.missing_resource.MissingResourcePanelMediator;
- import ru.nexters.ie2.view.scene.Entity;
- import ru.nexters.ie2.view.vos.MessageboxVO;
- /**
- * @author v.proskurin
- * @version 1.0
- * @playerversion Flash 10
- * @langversion 3.0
- * @date Mar 27, 2017
- */
- public class CraftDragWindowAspect extends BaseWindowAspect {
- //------------------------------------------------------------------------------
- // Class constants
- //------------------------------------------------------------------------------
- //------------------------------------------------------------------------------
- // Class variables
- //------------------------------------------------------------------------------
- //------------------------------------------------------------------------------
- // Class methods
- //------------------------------------------------------------------------------
- //--------------------------------------------------------------------------
- // Constructor
- //--------------------------------------------------------------------------
- public function CraftDragWindowAspect() {
- super();
- }
- //--------------------------------------------------------------------------
- // Variables
- //--------------------------------------------------------------------------
- private var _source:CraftDragWindow;
- private var _craftData:CraftData;
- //--------------------------------------------------------------------------
- // Properties
- //--------------------------------------------------------------------------
- //--------------------------------------------------------------------------
- // Public methods
- //--------------------------------------------------------------------------
- override public function init(target:Entity):void {
- super.init(target);
- _source = target.source.interactive.craftDragWindow;
- _craftData = target.source.interactive.craftData;
- if (!_craftData) {
- throw new Error("Missconfig: CraftDragWindowAspect without CraftDataAspect (" + _target.idProto.toString() + ")");
- }
- _target.onOver.add(onOver);
- _target.signals.onCollectDrop.add(onCollectDtop);
- }
- override public function dispose():void{
- super.dispose();
- _target.onOver.remove(onOver);
- _target.signals.onCollectDrop.remove(onCollectDtop);
- _craftData = null;
- _source = null;
- }
- //--------------------------------------------------------------------------
- // Protected methods
- //--------------------------------------------------------------------------
- override protected function onShow():void {
- super.onShow();
- const currentProcess:ProcessWrapper = _target.source.currentProcess;
- if (currentProcess && currentProcess.state == ProcessState.PROC_STATE_PRESENT) {
- MessageboxMediator.instance.show(MessageboxVO.create("COOMING SOON", "Boost is not supported"));
- return;
- }
- if (!currentProcess) {
- openWindow(InstrumentData.SETUP, DragProcessListItem, _craftData.processIds);
- }
- }
- protected function onCollectDtop():void {
- scrollToEntity();
- openWindow(InstrumentData.COLLECT, DragResListItem, [_source.collectResId]);
- }
- protected function onOver(status:Boolean):void {
- if (!status) return;
- sendInstrument();
- }
- //--------------------------------------------------------------------------
- // Private methods
- //--------------------------------------------------------------------------
- private function sendInstrument():void {
- if (!InstrumentData.isActive) return;
- var instrument:InstrumentData = InstrumentData.current;
- instrument.callback = null;
- //установка процесса
- if (instrument.type == InstrumentData.SETUP && hasProcess(instrument.data)) {
- if (!instrument.count) {
- //подпишимся на колбэк инструмента, только если небыло ничего выставлено
- instrument.callback = setupCallback;
- }
- _target.signals.onApplyInstrument.dispatch(instrument);
- }
- //сбор дропа
- else if (instrument.type == InstrumentData.COLLECT && equalCollectResId(instrument.data)) {
- _target.signals.onApplyInstrument.dispatch(instrument);
- }
- }
- private function hasProcess(processId:Dictionary_):Boolean {
- for each (var pr:Dictionary_ in _craftData.processIds) {
- if (pr.prototype.as32 == processId.prototype.as32) {
- return true;
- }
- }
- return false;
- }
- private function equalCollectResId(resId:Dictionary_):Boolean {
- return _source.collectResId.prototype.as32 == resId.prototype.as32;
- }
- private function setupCallback(instrument:InstrumentData, result:Boolean):void {
- if (!result) {
- const processId:Dictionary_ = instrument.data;
- const pw:ProcessWrapper = ProcessWrapper.fromProtoAndObjects(processId.prototype.as32,[]);
- MissingResourcePanelMediator.instance.show(RealcostUtils.calcProcessStart(pw), sendInstrument);
- instrument.cancel();
- }
- }
- private function openWindow(instrumentId:String, renderer:Class, data:Object):void {
- DragDropPanelMediator.instance.show(_target, instrumentId, renderer, data);
- }
- //--------------------------------------------------------------------------
- // Event handlers
- //--------------------------------------------------------------------------
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement