Guest User

Space.as

a guest
Dec 4th, 2015
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package sfxworks
  2. {
  3.     import flash.display.Bitmap;
  4.     import flash.display.BitmapData;
  5.     import flash.display.DisplayObject;
  6.     import flash.display.JPEGEncoderOptions;
  7.     import flash.display.Loader;
  8.     import flash.display.MovieClip;
  9.     import flash.display.SpreadMethod;
  10.     import flash.display.Sprite;
  11.     import flash.display.Stage;
  12.     import flash.events.Event;
  13.     import flash.events.KeyboardEvent;
  14.     import flash.events.MouseEvent;
  15.     import flash.filesystem.File;
  16.     import flash.filesystem.FileMode;
  17.     import flash.filesystem.FileStream;
  18.     import flash.geom.Matrix;
  19.     import flash.geom.Rectangle;
  20.     import flash.html.HTMLLoader;
  21.     import flash.net.FileFilter;
  22.     import flash.utils.ByteArray;
  23.    
  24.     /**
  25.      * ...
  26.      * @author Samuel Jacob Walker
  27.      */
  28.     public class Space extends MovieClip
  29.     {
  30.         private var stagee:Stage;
  31.        
  32.         private var spacename:String;
  33.         private var spacepermissions:String;
  34.         private var spacedata:File;
  35.         private var _access:String;
  36.        
  37.         private var editTool:TransformTool;
  38.        
  39.         //Objects on stage
  40.         public var spaceObjects:Vector.<SpaceObject>;
  41.         private var selectedSpaceObject:SpaceObject;
  42.        
  43.        
  44.        
  45.        
  46.        
  47.         private var htmlLoader:HTMLLoader = new HTMLLoader();
  48.        
  49.         public function Space(stage:Stage, spaceToLoad:String=""):void
  50.         {
  51.             stagee = stage;
  52.             rightmenu_mc.visible = false;
  53.             config_mc.visible = false;
  54.             spaceObjects = new Vector.<SpaceObject>();
  55.             if (spaceToLoad != "")
  56.             {
  57.                 spacedata = new File(spaceToLoad);
  58.                 var fs:FileStream = new FileStream();
  59.                 fs.open(spacedata, FileMode.READ);
  60.                
  61.                 //Load the space based on the data
  62.                 var numberOfObjects:Number = fs.readDouble();
  63.                 spacepermissions = fs.readUTF();
  64.                
  65.                 for (var i:int = 0; i < numberOfObjects; i++)
  66.                 {
  67.                     var so:SpaceObject = new SpaceObject(fs.readUTF(), fs.readUTF(), new Rectangle(fs.readDouble(), fs.readDouble(), fs.readDouble(), fs.readDouble()), fs.readDouble(), new Matrix(fs.readDouble(), fs.readDouble(), fs.readDouble(), fs.readDouble(), fs.readDouble(), fs.readDouble()));
  68.                    
  69.                     bounds_mc.addChild(so);
  70.                     spaceObjects.push(so);
  71.                 }
  72.             }
  73.            
  74.         }
  75.        
  76.         private function handleBoundsMouseUp(e:MouseEvent):void
  77.         {
  78.             bounds_mc.stopDrag();
  79.         }
  80.        
  81.         private function handleBoundsMouseDown(e:MouseEvent):void
  82.         {
  83.             config_mc.gotoAndStop(2);
  84.             removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
  85.             editTool.target = null;
  86.            
  87.             bounds_mc.startDrag();
  88.         }
  89.        
  90.         private function handleMouseWheel(e:MouseEvent):void
  91.         {
  92.             removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
  93.             editTool.target = null;
  94.             var boundsx:int = bounds_mc.x;
  95.             var boundsy:int = bounds_mc.y;
  96.             if (e.delta > 0) //Positive
  97.             {
  98.                 bounds_mc.scaleX += 0.1;
  99.                 bounds_mc.scaleY += 0.1;
  100.             }
  101.             else //Negative
  102.             {
  103.                 if (bounds_mc.scaleX > 0.2) //If its not the smallest it can be
  104.                 {
  105.                     bounds_mc.scaleX += -0.1;
  106.                     bounds_mc.scaleY += -0.1;
  107.                 }
  108.             }
  109.            
  110.             bounds_mc.x = boundsx;
  111.             bounds_mc.y = boundsy;
  112.            
  113.             trace("Bounds scale = " + bounds_mc.scaleX + bounds_mc.scaleY);
  114.         }
  115.        
  116.         public function editMode():void
  117.         {
  118.              //Init bounds for handling right clicks and events.
  119.  
  120.             editTool = new TransformTool();
  121.             addEventListener(MouseEvent.RIGHT_CLICK, rightClickHandler);
  122.            
  123.             config_mc.visible = true;
  124.             addChild(editTool);
  125.            
  126.             addEventListener(MouseEvent.MOUSE_WHEEL, handleMouseWheel);
  127.             bounds_mc.addEventListener(MouseEvent.MOUSE_DOWN, handleBoundsMouseDown);
  128.             bounds_mc.addEventListener(MouseEvent.MOUSE_UP, handleBoundsMouseUp);
  129.            
  130.             stagee.addEventListener(KeyboardEvent.KEY_DOWN, handleEditKeyDown);
  131.             config_mc.saveandexit_btn.addEventListener(MouseEvent.CLICK, saveandexitClick);
  132.             removeChild(rightmenu_mc);
  133.             bounds_mc.addChild(rightmenu_mc);
  134.            
  135.             config_mc.scaleup_btn.addEventListener(MouseEvent.CLICK, scaleUp);
  136.             config_mc.scaledown_btn.addEventListener(MouseEvent.CLICK, scaleDown);
  137.            
  138.             for each (var so:SpaceObject in spaceObjects)
  139.             {
  140.                 so.addEventListener(MouseEvent.CLICK, contentClickHandler);
  141.             }
  142.         }
  143.        
  144.         private function scaleDown(e:MouseEvent):void
  145.         {
  146.             removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
  147.             editTool.target = null;
  148.            
  149.             if (bounds_mc.scaleX > 0.2) //If its not the smallest it can be
  150.             {
  151.                 bounds_mc.scaleX += -0.1;
  152.                 bounds_mc.scaleY += -0.1;
  153.             }
  154.         }
  155.        
  156.         private function scaleUp(e:MouseEvent):void
  157.         {
  158.             removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
  159.             editTool.target = null;
  160.            
  161.             bounds_mc.scaleX += 0.1;
  162.             bounds_mc.scaleY += 0.1;
  163.         }
  164.        
  165.         private function saveandexitClick(e:MouseEvent):void
  166.         {
  167.             removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
  168.             trace("Number of objects in space container = " + spaceObjects.length);
  169.             config_mc.gotoAndStop(2);
  170.             //Set file name from config_mc
  171.             var f:File = new File(); //ASD / spaces / examplespace
  172.             f = File.applicationStorageDirectory.resolvePath("spaces" + File.separator + "." + config_mc.stagename_txt.text);
  173.            
  174.             var fs:FileStream = new FileStream();
  175.             fs.open(f, FileMode.WRITE);
  176.             //First write the number of objects
  177.             fs.writeDouble(spaceObjects.length);
  178.             fs.writeUTF(config_mc.access_txt.text);
  179.             for (var i:int = 0; i < spaceObjects.length; i++)
  180.             {
  181.                 trace("Saved object: " + spaceObjects[i].source);
  182.                 fs.writeUTF(spaceObjects[i].source); //Source
  183.                 fs.writeUTF(spaceObjects[i].actions); //Actions text
  184.                 fs.writeDouble(spaceObjects[i].x); //Position
  185.                 fs.writeDouble(spaceObjects[i].y);
  186.                 fs.writeDouble(spaceObjects[i].width); //Size
  187.                 fs.writeDouble(spaceObjects[i].height);
  188.                 fs.writeDouble(spaceObjects[i].rotation); //Rotation
  189.                 fs.writeDouble(spaceObjects[i].transform.matrix.a); //Matrix
  190.                 fs.writeDouble(spaceObjects[i].transform.matrix.b);
  191.                 fs.writeDouble(spaceObjects[i].transform.matrix.c);
  192.                 fs.writeDouble(spaceObjects[i].transform.matrix.d);
  193.                 fs.writeDouble(spaceObjects[i].transform.matrix.tx);
  194.                 fs.writeDouble(spaceObjects[i].transform.matrix.ty);
  195.             }
  196.             fs.close();
  197.            
  198.             //Save image of desktop
  199.             var pathToSave:File = File.applicationStorageDirectory.resolvePath("spaces" + File.separator + config_mc.stagename_txt.text + ".jpeg");
  200.            
  201.             removeChild(config_mc);
  202.             removeChild(editTool);
  203.            
  204.             //New size will only represent edge to edge of objects
  205.             trace("width of this = " + this.width);
  206.             trace("Height of this = " + this.height);
  207.             /*
  208.             var bmd:BitmapData = new BitmapData(this.width, this.height);
  209.             bmd.draw(this);
  210.             var ba:ByteArray = new ByteArray();
  211.             bmd.encode(new Rectangle(0, 0, this.width, this.height), new JPEGEncoderOptions(), ba);
  212.            
  213.             var fileAccess:FileStream = new FileStream();
  214.             fileAccess.open(pathToSave, FileMode.WRITE);
  215.             fileAccess.writeBytes(ba, 0, ba.length);
  216.             fileAccess.close();
  217.             */
  218.             (parent as SpaceContainer).initSpaceMenu();
  219.         }
  220.        
  221.         private function handleEditKeyDown(e:KeyboardEvent):void
  222.         {
  223.             switch(e.keyCode)
  224.             {
  225.                 case 46:
  226.                     removeEventListener(Event.ENTER_FRAME, enterFrameHandler); 
  227.                     spaceObjects.splice(spaceObjects.indexOf(editTool.target), 1);
  228.                    
  229.                     bounds_mc.removeChild(editTool.target);
  230.                    
  231.                     //Remove edit tool
  232.                     editTool.target = null;
  233.                    
  234.                     //Clear config values
  235.                     config_mc.image_mc.removeChildren();
  236.                     config_mc.x_txt.text = "";
  237.                     config_mc.y_txt.text = "";
  238.                     config_mc.width_txt.text = "";
  239.                     config_mc.height_txt.text = "";
  240.                     config_mc.gotoAndStop(2);
  241.                    
  242.                     trace("Space objects length = " + spaceObjects.length);
  243.                     break;
  244.             }
  245.         }
  246.        
  247.         //Right menu and adding objects -------------
  248.         private var fileToDisplay:File;
  249.         private var objectType:String;
  250.        
  251.         private var rightMouseX:int;
  252.         private var rightMouseY:int;
  253.        
  254.         private function rightClickHandler(e:MouseEvent):void
  255.         {  
  256.             rightmenu_mc.visible = true;
  257.            
  258.             rightmenu_mc.x = e.localX;
  259.             rightmenu_mc.y = e.localY;
  260.            
  261.             rightMouseX = e.localX;
  262.             rightMouseY = e.localY;
  263.            
  264.             rightmenu_mc.addEventListener(MouseEvent.CLICK, rightMenuHandler);
  265.             rightmenu_mc.addEventListener(MouseEvent.ROLL_OUT, handleRightMenuOut);
  266.         }
  267.        
  268.         private function handleRightMenuOut(e:MouseEvent):void
  269.         {
  270.             rightmenu_mc.visible = false;
  271.            
  272.             rightmenu_mc.removeEventListener(MouseEvent.CLICK, rightMenuHandler);
  273.             rightmenu_mc.removeEventListener(MouseEvent.ROLL_OUT, handleRightMenuOut);
  274.         }
  275.        
  276.         private function rightMenuHandler(e:MouseEvent):void
  277.         {
  278.             rightmenu_mc.removeEventListener(MouseEvent.CLICK, rightMenuHandler);
  279.             rightmenu_mc.removeEventListener(MouseEvent.ROLL_OUT, handleRightMenuOut);
  280.             rightmenu_mc.visible = false;
  281.            
  282.             fileToDisplay = new File();
  283.             objectType = new String();
  284.            
  285.             var iFilter:FileFilter = new FileFilter("Images", "*.jpg;*.gif;*.png;*.jpeg;*.bmp");
  286.             var vFilter:FileFilter = new FileFilter("Videos", "*.mp4;*.m4v;*.f4v;*.3gpp;*.flv");
  287.            
  288.             var imageFilter:Array = new Array();
  289.             imageFilter.push(iFilter);
  290.            
  291.             var videoFilter:Array = new Array();
  292.             videoFilter.push(vFilter);
  293.            
  294.             fileToDisplay = new File();
  295.            
  296.             switch(e.target.name)
  297.             {
  298.                 case "imagefromdrive":
  299.                     fileToDisplay.browseForOpen("Image to add?", imageFilter);
  300.                     fileToDisplay.addEventListener(Event.SELECT, handleSelection);
  301.                     objectType = "image-from-drive";
  302.                     break;
  303.                 case "videofromdrive":
  304.                     fileToDisplay.browseForOpen("Video to add?", videoFilter);
  305.                     fileToDisplay.addEventListener(Event.SELECT, handleSelection);
  306.                     break;
  307.                 case "embeddedobject":
  308.                     trace("Embeddedobject");
  309.                     //For now, just testing a standard embedd from youtube. Dynamics later.
  310.                     var so:SpaceObject = new SpaceObject("embeddedobject", '<iframe width="560" height="315" src="https://www.youtube.com/embed/Kzgjiuvpmsk" frameborder="0" allowfullscreen></iframe>', new Rectangle(rightMouseX, rightMouseY));
  311.                     bounds_mc.addChild(so);
  312.                     //so.addEventListener(MouseEvent.CLICK, contentClickHandler);
  313.                     spaceObjects.push(so);
  314.                     break;
  315.             }
  316.            
  317.            
  318.         }
  319.        
  320.         private function handleSelection(e:Event):void //For file selection of text/video from embedded objects
  321.         {
  322.             fileToDisplay.removeEventListener(Event.SELECT, handleSelection);
  323.             var so:SpaceObject = new SpaceObject(fileToDisplay.nativePath, "", new Rectangle(rightMouseX, rightMouseY)) //Do they mirror eachother..
  324.             so.addEventListener(MouseEvent.CLICK, contentClickHandler);
  325.             bounds_mc.addChild(so);
  326.             spaceObjects.push(so);
  327.         }
  328.        
  329.         private function contentClickHandler(e:MouseEvent):void
  330.         {  
  331.             selectedSpaceObject = e.target as SpaceObject;
  332.             config_mc.gotoAndStop(1);
  333.             addChild(editTool);
  334.             removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
  335.             //Init selection
  336.             editTool.target = e.target as MovieClip;
  337.             editTool.constrainScale = true;
  338.             editTool.parent.setChildIndex(editTool, editTool.parent.numChildren - 1);
  339.             swapChildren(config_mc, editTool);
  340.            
  341.             //Configure..config
  342.            
  343.             //Image display
  344.             trace("Width and height = " + e.target.width + ":" + e.target.height);
  345.             var bmd:BitmapData = new BitmapData(e.target.width, e.target.height);
  346.             bmd.draw(e.target as DisplayObject);
  347.             var bm:Bitmap = new Bitmap(bmd);
  348.             config_mc.image_mc.addChild(bm);
  349.             resize(bm, 75, 46); //resize
  350.            
  351.             //! Tecnically still just adding aditional bitmaps each time the user clicks on an object
  352.            
  353.             //Properties
  354.             trace("e.target = " + e.target);
  355.             config_mc.x_txt.text = e.target.x.toString();
  356.             config_mc.y_txt.text = e.target.y.toString();
  357.             config_mc.width_txt.text = e.target.width.toString();
  358.             config_mc.height_txt.text = e.target.height.toString();
  359.             config_mc.nativePath_txt.text = e.target.source;
  360.             config_mc.actions_txt.addEventListener(KeyboardEvent.KEY_DOWN, handleCurrentSpaceObjectKeyDown);
  361.            
  362.             //Auto-Update properties
  363.             addEventListener(Event.ENTER_FRAME, enterFrameHandler);
  364.         }
  365.        
  366.         private function handleCurrentSpaceObjectKeyDown(e:KeyboardEvent):void
  367.         {
  368.             //Just a constant save of each key typed. Saves to the space object
  369.             selectedSpaceObject.actions = config_mc.actions_txt.text;
  370.         }
  371.        
  372.         private function enterFrameHandler(e:Event):void
  373.         {
  374.             config_mc.x_txt.text = editTool.target.x.toString();
  375.             config_mc.y_txt.text = editTool.target.y.toString();
  376.             config_mc.width_txt.text = editTool.target.width.toString();
  377.             config_mc.height_txt.text = editTool.target.height.toString();
  378.         }
  379.        
  380.         private function resize(mc:DisplayObject, maxW:Number, maxH:Number = 0, constrainProportions:Boolean = true):void
  381.         {
  382.             maxH = maxH == 0 ? maxW : maxH;
  383.             mc.width = maxW;
  384.             mc.height = maxH;
  385.             if (constrainProportions)
  386.             {
  387.                 mc.scaleX < mc.scaleY ? mc.scaleY = mc.scaleX : mc.scaleX = mc.scaleY;
  388.             }
  389.         }
  390.        
  391.         public function get access():String
  392.         {
  393.             return _access;
  394.         }
  395.     }
  396.  
  397. }
Advertisement
Add Comment
Please, Sign In to add comment