topical media & game development

talk show tell print

actionscript-book-SpriteArranger-com-example-programmingas3-spritearranger-GeometricSprite.ax

actionscript-book-SpriteArranger-com-example-programmingas3-spritearranger-GeometricSprite.ax [swf] flex


  package // com.example.programmingas3.spritearranger 
  {
          //import com.example.programmingas3.geometricshapes.IGeometricShape;
          
          import flash.display.Shape;
          import flash.display.Sprite;
          import flash.events.MouseEvent;
          import flash.geom.Rectangle;
      
          public class @ax-actionscript-book-SpriteArranger-com-example-programmingas3-spritearranger-GeometricSprite extends Sprite 
          {
              public var size:Number;
                  public var lineColor:Number = 0x000000;
                  public var fillColor:Number = 0xDDDDEE;
                  
                  public var shapeType:String = "GeometricSprite";
                  
                  
An instance of a purely geometric shape, that is, one that defines a shape mathematically but not visually.

  
                  public var geometricShape:actionscript_book_SpriteArranger_com_example_programmingas3_geometricshapes_IGeometricShape;
                  
                  
Keeps track of the currently selected shape. This is a static property, so there can only be one @ax-actionscript-book-SpriteArranger-com-example-programmingas3-spritearranger-GeometricSprite selected at any given time.

  
                  public static var selectedSprite:@ax-actionscript-book-SpriteArranger-com-example-programmingas3-spritearranger-GeometricSprite;
                  
                  
Holds a border rectangle that is shown when this @ax-actionscript-book-SpriteArranger-com-example-programmingas3-spritearranger-GeometricSprite instance is selected.

  
                  public var selectionIndicator:Shape;
                  
                  public function @ax-actionscript-book-SpriteArranger-com-example-programmingas3-spritearranger-GeometricSprite(size:Number = 100, lColor:Number = 0x000000, fColor:Number = 0xDDDDEE)
                  {
                      this.size = size;
                          this.lineColor = lColor;
                          this.fillColor = fColor;
                          this.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
                  }
                  
                  public function drawShape():void
                  {
              // to be overridden in subclasses
                  }
                  
                  private function onMouseDown(evt:MouseEvent):void 
                  {
                          this.showSelected();
                          
                          // limits dragging to the area inside the canvas
                          var boundsRect:Rectangle = this.parent.getRect(this.parent);
                          boundsRect.width -= this.size;
                          boundsRect.height -= this.size;
                          this.startDrag(false, boundsRect);
                  }
                  
                  public function onMouseUp(evt:MouseEvent):void 
                  {
                          this.stopDrag();
                  }
                  
                  private function showSelected():void
                  {
                      if (this.selectionIndicator == null)
                      {
                          // draws a red rectangle around the selected shape
                          this.selectionIndicator = new Shape();
                          this.selectionIndicator.graphics.lineStyle(1.0, 0xFF0000, 1.0);
                              this.selectionIndicator.graphics.drawRect(-1, -1, this.size + 1, this.size + 1);
                              this.addChild(this.selectionIndicator);
                      }
                      else
                      {
                          this.selectionIndicator.visible = true;
                      }
                      
                      if (@ax-actionscript-book-SpriteArranger-com-example-programmingas3-spritearranger-GeometricSprite.selectedSprite != this)
                      {
                          if (@ax-actionscript-book-SpriteArranger-com-example-programmingas3-spritearranger-GeometricSprite.selectedSprite != null)
                          {
                              @ax-actionscript-book-SpriteArranger-com-example-programmingas3-spritearranger-GeometricSprite.selectedSprite.hideSelected();
                          }
                          @ax-actionscript-book-SpriteArranger-com-example-programmingas3-spritearranger-GeometricSprite.selectedSprite = this;
                      }
                  }
                  
                  private function hideSelected():void
                  {
                      if (this.selectionIndicator != null)
                      {                    
                          this.selectionIndicator.visible = false;
                      }
                  }
                  
                  
Returns true if this shape's selection rectangle is currently showing.

  
                  public function isSelected():Boolean
                  {
                      return !(this.selectionIndicator == null || this.selectionIndicator.visible == false);
                  }
                  
                  
                  public override function toString():String
                  {
                      return this.shapeType + " of size " + this.size + " at " + this.x + ", " + this.y;
                  }
          }
  }


(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.