topical media & game development

talk show tell print

actionscript-distort-view-distortion-DistortionLab.mx

actionscript-distort-view-distortion-DistortionLab.mx [swf] flex


  <?xml version="1.0" encoding="utf-8"?>
  <mx:VBox 
          xmlns:mx="http://www.adobe.com/2006/mxml"
          xmlns:sides="view.sides.*" 
          horizontalAlign="center">
                          
          <mx:Script>
                  <![CDATA[
                          import com.adobe.ac.mxeffects.DistortionConstants;
                          import com.adobe.ac.util.DisplayObjectBounds;
                          import com.adobe.ac.mxeffects.Distortion;
                          import mx.core.UIComponent;
                          
                          private var distort : Distortion;
                          private var leftDistort : Distortion;
                          private var rightDistort : Distortion;
                          private var lastDirection : String;
                                                  
                          private function create() : void
                          {
                                  var container : UIComponent = new UIComponent();
                                  
                                  var mode : String;
                                  if( popupModeRadioButton.selected )
                                  {
                                          mode = DistortionConstants.POPUP;
                                  }
                                  else if( replaceModeRadioButton.selected )
                                  {
                                          mode = DistortionConstants.REPLACE;
                                  }
                                  else if( addModeRadioButton.selected )
                                  {
                                          mode = DistortionConstants.ADD;
                                  }
                                  else if( overwriteModeRadioButton.selected )
                                  {
                                          mode = DistortionConstants.OVERWRITE;
                                  }
                                  distort = new Distortion( target );                
                                  distort.buildMode = mode;
                                  distort.smooth = speedModeRadioButton.selected;
  
                                  if( renderModeGroup.selectedValue == "Sides" )
                                  {
                                          if( percentageModeRadioButton.selected )
                                          {
                                                  distort.renderSides( 100, 100, 100, 100 );
                                          }
                                          else
                                          {
                                                  distort.renderSidesInPixels( 100, 100, 100, 100 );
                                          }
                                  }
                                  else
                                  {
                                          if( percentageModeRadioButton.selected )
                                          {
                                                  distort.renderCorners( new Point( 100, 100 ), 
                                                                                          new Point( 100, 100 ), 
                                                                                          new Point( 100, 100 ), 
                                                                                          new Point( 100, 100 ) );
                                          }
                                          else
                                          {
                                                  distort.renderCornersInPixels( new Point( 100, 100 ), 
                                                                                          new Point( 100, 100 ), 
                                                                                          new Point( 100, 100 ), 
                                                                                          new Point( 100, 100 ) );
                                          }                                        
                                  }
                          }
                          
                          private function destroy() : void
                          {
                                  destroyDefaultDistortion();
                                  destroyGateDistortion();
                          }
  
                          private function destroyDefaultDistortion() : void
                          {
                                  if( distort != null )
                                  {
                                          distort.destroy();
                                          distort = null;                                        
                                  }                                
                          }                
                          
                          private function destroyGateDistortion() : void
                          {
                                  if( leftDistort != null )
                                  {
                                          leftDistort.destroy();
                                          leftDistort = null;
                                          rightDistort.destroy();
                                          rightDistort = null;
                                  }                                
                          }                
                          
                          private function getDefaultDistortion() : void
                          {
                                  if( distort == null ) create();
                                  destroyGateDistortion();
                          }
                          
                          private function getGateDistortion() : void
                          {
                                  if( leftDistort == null ) initGateDistortion();
                                  destroyDefaultDistortion();
                          }
                          
                          private function initGateDistortion() : void
                          {
                                  var direction : String = String( directionGroup.selectedValue );
                                  
                                  var leftRect : Rectangle;
                                  var rightRect : Rectangle;
                                  if( direction == DistortionConstants.LEFT || direction == DistortionConstants.RIGHT )
                                  {
                                          leftRect = new Rectangle( 0, 0 );
                                          leftRect.width = target.width / 2;
                                          leftRect.height = target.height;
                                          rightRect = new Rectangle( leftRect.width, 0 );
                                          rightRect.width = leftRect.width;
                                          rightRect.height = leftRect.height;                                                        
                                  }
                                  else if( direction == DistortionConstants.TOP || direction == DistortionConstants.BOTTOM )
                                  {
                                          leftRect = new Rectangle( 0, 0 );
                                          leftRect.width = target.width;
                                          leftRect.height = target.height / 2;
                                          rightRect = new Rectangle( 0, leftRect.height );
                                          rightRect.width = leftRect.width;
                                          rightRect.height = leftRect.height;                                                                
                                  }
                                  leftDistort = new Distortion( target, leftRect );
                                  leftDistort.buildMode = DistortionConstants.POPUP;
                                  leftDistort.smooth = speedModeRadioButton.selected;
                                  rightDistort = new Distortion( target, rightRect );
                                  rightDistort.buildMode = DistortionConstants.POPUP;
                                  rightDistort.smooth = speedModeRadioButton.selected;
                          }
                          
                          private function renderSide() : void
                          {
                                  getDefaultDistortion();
                                  if( percentageModeRadioButton.selected )
                                  {
                                          distort.renderSides( left.value, top.value, right.value, bottom.value );
                                  }
                                  else
                                  {
                                          distort.renderSidesInPixels( left.value, top.value, right.value, bottom.value );
                                  }
                          }
                          
                          private function renderCorner() : void
                          {
                                  getDefaultDistortion();
                                  if( percentageModeRadioButton.selected )
                                  {
                                          distort.renderCorners( new Point( topLeftX.value, topLeftY.value ), 
                                                                                          new Point( topRightX.value, topRightY.value ), 
                                                                                          new Point( bottomRightX.value, bottomRightY.value ), 
                                                                                          new Point( bottomLeftX.value, bottomLeftY.value ) );
                                  }
                                  else
                                  {
                                          distort.renderCornersInPixels( new Point( topLeftX.value, topLeftY.value ), 
                                                                                          new Point( topRightX.value, topRightY.value ), 
                                                                                          new Point( bottomRightX.value, bottomRightY.value ),
                                                                                          new Point( bottomLeftX.value, bottomLeftY.value ) );
                                  }
                          }
                          
                          private function flipFront() : void
                          {
                                  getDefaultDistortion();
                                  var percentage : Number = flipFrontSlider.value;
                                  var direction : String = String( directionGroup.selectedValue );
                                  distort.flipFront( percentage, direction, Number( distortionValue.text ) );
                          }
                          
                          private function flipBack() : void
                          {
                                  getDefaultDistortion();
                                  var percentage : Number = flipBackSlider.value;
                                  var direction : String = String( directionGroup.selectedValue );                        
                                  distort.flipBack( percentage, direction, Number( distortionValue.text ) );
                          }
                          
                          private function push() : void
                          {
                                  getDefaultDistortion();
                                  var percentage : Number = pushSlider.value;
                                  var direction : String = String( directionGroup.selectedValue );                        
                                  distort.push( percentage, direction, Number( distortionValue.text ) );
                          }
                          
                          private function pop() : void
                          {
                                  getDefaultDistortion();
                                  var percentage : Number = popSlider.value;
                                  var direction : String = String( directionGroup.selectedValue );                        
                                  distort.pop( percentage, direction, Number( distortionValue.text ) );
                          }
                          
                          private function openDoor() : void
                          {
                                  getDefaultDistortion();
                                  var percentage : Number = openDoorSlider.value;
                                  var direction : String = String( directionGroup.selectedValue );                        
                                  distort.openDoor( percentage, direction, Number( distortionValue.text ) );
                          }
                          
                          private function closeDoor() : void
                          {
                                  getDefaultDistortion();
                                  var percentage : Number = closeDoorSlider.value;
                                  var direction : String = String( directionGroup.selectedValue );                        
                                  distort.closeDoor( percentage, direction, Number( distortionValue.text ) );
                          }
                          
                          private function openGate() : void
                          {                                
                                  var direction : String = String( directionGroup.selectedValue );
                                  
                                  if( lastDirection != direction )
                                  {
                                          destroyGateDistortion();
                                          getGateDistortion();        
                                          lastDirection = direction;                
                                  }
                                  
                                  var percentage : Number = openGateSlider.value;
                                  
                                  leftDistort.openDoor( percentage, direction, Number( distortionValue.text ) );
                                  rightDistort.openDoor( percentage, 
                                                                                          rightDistort.reverseDirection( direction ), 
                                                                                          Number( distortionValue.text ) );
                          }
                                                                          
                          private function closeGate() : void
                          {
                                  var direction : String = String( directionGroup.selectedValue );
                                  
                                  if( lastDirection != direction )
                                  {
                                          destroyGateDistortion();
                                          getGateDistortion();        
                                          lastDirection = direction;                
                                  }
                                  
                                  var percentage : Number = closeGateSlider.value;
                                  
                                  leftDistort.closeDoor( percentage, direction, Number( distortionValue.text ) );
                                  rightDistort.closeDoor( percentage, 
                                                                                          rightDistort.reverseDirection( direction ), 
                                                                                          Number( distortionValue.text ) );                                                                
                          }
                                                  
                          private function changeSliderDefaultValues() : void
                          {
                                  if( renderParamModeGroup.selectedValue == "Percentage" )
                                  {
                                          if( renderModeGroup.selectedValue == "Sides" )
                                          {
                                                  left.value = 100;
                                                  top.value = 100;
                                                  right.value = 100;
                                                  bottom.value = 100;
                                          }
                                          else
                                          {
                                                  topLeftX.value = 100;
                                                  topLeftY.value = 100;
                                                  topRightX.value = 100;
                                                  topRightY.value = 100;
                                                  bottomRightX.value = 100;
                                                  bottomRightY.value = 100;
                                                  bottomLeftX.value = 100;
                                                  bottomLeftY.value = 100;                                                                        
                                          }
                                  }
                                  else
                                  {
                                          var bounds : DisplayObjectBounds = new DisplayObjectBounds();
                                          bounds.getBounds( target );
                                          if( renderModeGroup.selectedValue == "Sides" )
                                          {
                                                  left.value = bounds.height;
                                                  top.value = bounds.width;
                                                  right.value = bounds.height;
                                                  bottom.value = bounds.width;
                                          }
                                          else
                                          {
                                                  topLeftX.value = bounds.topLeft.x;
                                                  topLeftY.value = bounds.topLeft.y;
                                                  topRightX.value = bounds.topRight.x;
                                                  topRightY.value = bounds.topRight.y;
                                                  bottomRightX.value = bounds.bottomRight.x;
                                                  bottomRightY.value = bounds.bottomRight.y;
                                                  bottomLeftX.value = bounds.bottomLeft.x;
                                                  bottomLeftY.value = bounds.bottomLeft.y;
                                          }                                
                                  }
                          }
                  ]]>
          </mx:Script>
          <mx:HBox>
                  <mx:Button label="create" click="create()"/>
                  <mx:Button label="destroy" click="destroy()"/>
          </mx:HBox>
          <mx:Form>
                  <mx:FormItem label="Distortion Mode" direction="horizontal">                        
                          <mx:RadioButtonGroup id="renderModeGroup"/>
                          <mx:RadioButton id="effectsModeRadioButton" groupName="renderModeGroup" label="Effects" selected="true"/>
                          <mx:RadioButton id="sideModeRadioButton" groupName="renderModeGroup" label="Sides" />
                          <mx:RadioButton id="cornerModeRadioButton" groupName="renderModeGroup" label="Corners"/>                        
                  </mx:FormItem>
                  <mx:FormItem label="Container Mode" direction="horizontal">                        
                          <mx:RadioButtonGroup id="buildModeGroup"/>
                          <mx:RadioButton id="replaceModeRadioButton" groupName="buildModeGroup" label="REPLACE" selected="true"/>
                          <mx:RadioButton id="popupModeRadioButton" groupName="buildModeGroup" label="POPUP"/>
                          <mx:RadioButton id="addModeRadioButton" groupName="buildModeGroup" label="ADD"/>
                          <mx:RadioButton id="overwriteModeRadioButton" groupName="buildModeGroup" label="OVERWRITE"/>
                  </mx:FormItem>
                  <mx:FormItem label="Render API Mode" direction="horizontal">                        
                          <mx:RadioButtonGroup id="renderParamModeGroup" change="changeSliderDefaultValues();"/>
                          <mx:RadioButton id="percentageModeRadioButton" groupName="renderParamModeGroup" label="Percentage" selected="true"/>
                          <mx:RadioButton id="valueModeRadioButton" groupName="renderParamModeGroup" label="Value"/>                                
                  </mx:FormItem>
                  <mx:FormItem label="Smoothing" direction="horizontal">                        
                          <mx:RadioButtonGroup id="smoothModeGroup"/>
                          <mx:RadioButton id="speedModeRadioButton" groupName="smoothModeGroup" label="true" selected="true"/>
                          <mx:RadioButton id="qualityModeRadioButton" groupName="smoothModeGroup" label="false"/>                        
                  </mx:FormItem>
          </mx:Form>        
          <mx:HBox>
                  <mx:Form enabled="{ effectsModeRadioButton.selected }" fontWeight="bold">
                          <mx:FormItem label="Direction" direction="horizontal">
                                  <mx:RadioButtonGroup id="directionGroup"/>
                                  <mx:RadioButton id="leftDirectionRadioButton" groupName="directionGroup" label="LEFT" selected="true"/>
                                  <mx:RadioButton id="topDirectionRadioButton" groupName="directionGroup" label="TOP"/>                        
                                  <mx:RadioButton id="rightDirectionRadioButton" groupName="directionGroup" label="RIGHT"/>
                                  <mx:RadioButton id="bottomDirectionRadioButton" groupName="directionGroup" label="BOTTOM"/>                        
                          </mx:FormItem>
                          <mx:FormItem label="Distortion">
                                  <mx:TextInput id="distortionValue" width="30" text="20" restrict="0-9"/>
                          </mx:FormItem>                        
                          <mx:FormItem label="Flip" direction="horizontal">
                                  <mx:HSlider id="flipFrontSlider" minimum="0" maximum="100" value="0" liveDragging="true" change="flipFront();"/>                
                                  <mx:HSlider id="flipBackSlider" minimum="0" maximum="100" value="0" liveDragging="true" change="flipBack();"/>                
                          </mx:FormItem>
                          <mx:FormItem label="Push" direction="horizontal">
                                  <mx:HSlider id="pushSlider" minimum="0" maximum="100" value="0" liveDragging="true" change="push();"/>                
                          </mx:FormItem>                        
                          <mx:FormItem label="Pop" direction="horizontal">
                                  <mx:HSlider id="popSlider" minimum="0" maximum="100" value="0" liveDragging="true" change="pop();"/>                
                          </mx:FormItem>
                          <mx:FormItem label="Door" direction="horizontal">
                                  <mx:Label text="open" fontWeight="normal"/>
                                  <mx:HSlider id="openDoorSlider" minimum="0" maximum="100" value="0" liveDragging="true" change="openDoor();"/>                
                                  <mx:Label text="close" fontWeight="normal"/>
                                  <mx:HSlider id="closeDoorSlider" minimum="0" maximum="100" value="0" liveDragging="true" change="closeDoor();"/>                
                          </mx:FormItem>
                          <mx:FormItem label="Gate" direction="horizontal">
                                  <mx:Label text="open" fontWeight="normal"/>
                                  <mx:HSlider id="openGateSlider" minimum="0" maximum="100" value="0" liveDragging="true" change="openGate();"/>                
                                  <mx:Label text="close" fontWeight="normal"/>
                                  <mx:HSlider id="closeGateSlider" minimum="0" maximum="100" value="0" liveDragging="true" change="closeGate();"/>                
                          </mx:FormItem>                
                  </mx:Form>
                  
                  <mx:VBox enabled="{ sideModeRadioButton.selected }">        
                          <mx:HSlider id="left" minimum="0" maximum="200" value="100" liveDragging="true" change="renderSide();"/>
                          <mx:HSlider id="top" minimum="0" maximum="200" value="100" liveDragging="true" change="renderSide();"/>
                          <mx:HSlider id="right" minimum="0" maximum="200" value="100" liveDragging="true" change="renderSide();"/>
                          <mx:HSlider id="bottom" minimum="0" maximum="200" value="100" liveDragging="true" change="renderSide();"/>                
                  </mx:VBox>
                  <mx:VBox enabled="{ cornerModeRadioButton.selected }">
                          <mx:HSlider id="topLeftX" minimum="0" maximum="200" value="100" liveDragging="true" change="renderCorner();"/>
                          <mx:HSlider id="topLeftY" minimum="0" maximum="200" value="100" liveDragging="true" change="renderCorner();"/>
                          <mx:HSlider id="topRightX" minimum="0" maximum="200" value="100" liveDragging="true" change="renderCorner();"/>
                          <mx:HSlider id="topRightY" minimum="0" maximum="200" value="100" liveDragging="true" change="renderCorner();"/>                
                          <mx:HSlider id="bottomRightX" minimum="0" maximum="200" value="100" liveDragging="true" change="renderCorner();"/>
                          <mx:HSlider id="bottomRightY" minimum="0" maximum="200" value="100" liveDragging="true" change="renderCorner();"/>
                          <mx:HSlider id="bottomLeftX" minimum="0" maximum="200" value="100" liveDragging="true" change="renderCorner();"/>
                          <mx:HSlider id="bottomLeftY" minimum="0" maximum="200" value="100" liveDragging="true" change="renderCorner();"/>
                  </mx:VBox>
          </mx:HBox>
          <mx:Canvas clipContent="false">
                  <sides:Login 
                          id="target" />
          </mx:Canvas>
  </mx:VBox>


(C) Æliens 27/08/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.