Star Orbit Demo
Flash 3D demo about objects orbiting stars
Flash 3D demo about objects orbiting stars
/**
* Component.as
* Keith Peters
* version 0.97
*
* Base class for all components
*
* Copyright (c) 2009 Keith Peters
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
*
*
* Components with text make use of the font PF Ronda Seven by Yuusuke Kamiyamane
* This is a free font obtained from http://www.dafont.com/pf-ronda-seven.font
*/
package com.bit101.components
{
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.filters.DropShadowFilter;
public class Component extends Sprite
{
[Embed(source="/assets/pf_ronda_seven.ttf", fontName="PF Ronda Seven", mimeType="application/x-font")]
private var Ronda:Class;
protected var _width:Number = 0;
protected var _height:Number = 0;
public static const DRAW:String = "draw";
/**
* Constructor
* @param parent The parent DisplayObjectContainer on which to add this component.
* @param xpos The x position to place this component.
* @param ypos The y position to place this component.
*/
public function Component(parent:DisplayObjectContainer = null, xpos:Number = 0, ypos:Number = 0):void
{
move(xpos, ypos);
if(parent != null)
{
parent.addChild(this);
}
init();
}
/**
* Initilizes the component.
*/
protected function init():void
{
addChildren();
invalidate();
}
/**
* Overriden in subclasses to create child display objects.
*/
protected function addChildren():void
{
}
/**
* DropShadowFilter factory method, used in many of the components.
* @param dist The distance of the shadow.
* @param knockout Whether or not to create a knocked out shadow.
*/
protected function getShadow(dist:Number, knockout:Boolean = false):DropShadowFilter
{
return new DropShadowFilter(dist, 45, Style.DROPSHADOW, 1, dist, dist, .3, 1, knockout);
}
/**
* Marks the component to be redrawn on the next frame.
*/
protected function invalidate():void
{
// draw();
addEventListener(Event.ENTER_FRAME, onInvalidate);
}
///////////////////////////////////
// public methods
///////////////////////////////////
/**
* Utility method to set up usual stage align and scaling.
*/
public static function initStage(stage:Stage):void
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
}
/**
* Moves the component to the specified position.
* @param xpos the x position to move the component
* @param ypos the y position to move the component
*/
public function move(xpos:Number, ypos:Number):void
{
x = Math.round(xpos);
y = Math.round(ypos);
}
/**
* Sets the size of the component.
* @param w The width of the component.
* @param h The height of the component.
*/
public function setSize(w:Number, h:Number):void
{
_width = w;
_height = h;
invalidate();
}
/**
* Abstract draw function.
*/
public function draw():void
{
dispatchEvent(new Event(Component.DRAW));
}
///////////////////////////////////
// event handlers
///////////////////////////////////
/**
* Called one frame after invalidate is called.
*/
protected function onInvalidate(event:Event):void
{
removeEventListener(Event.ENTER_FRAME, onInvalidate);
draw();
}
///////////////////////////////////
// getter/setters
///////////////////////////////////
/**
* Sets/gets the width of the component.
*/
override public function set width(w:Number):void
{
_width = w;
invalidate();
dispatchEvent(new Event(Event.RESIZE));
}
override public function get width():Number
{
return _width;
}
/**
* Sets/gets the height of the component.
*/
override public function set height(h:Number):void
{
_height = h;
invalidate();
dispatchEvent(new Event(Event.RESIZE));
}
override public function get height():Number
{
return _height;
}
/**
* Overrides the setter for x to always place the component on a whole pixel.
*/
override public function set x(value:Number):void
{
super.x = Math.round(value);
}
/**
* Overrides the setter for y to always place the component on a whole pixel.
*/
override public function set y(value:Number):void
{
super.y = Math.round(value);
}
}
}