/**
* @date 21/11/2008
* @author borealkiss
* @link http://blog.boreal-kiss.com/
*/packagecom.borealkiss.controls{importflash.display.DisplayObjectContainer;
importflash.errors.IllegalOperationError;
/**
* Abstract class
*/publicclassViewController{protectedvar_target:DisplayObjectContainer;
/**
* Constructor
*/publicfunctionViewController(target:DisplayObjectContainer){_target=target;
if(Object(this)==ViewController){thrownewIllegalOperationError("Abstract class must be inherited in a subclass");
}}publicfunctiondraw():void{//Must be overridden in a subclass.
}}}
/**
* @date 25/11/2008
* @author borealkiss
* @link http://blog.boreal-kiss.com/
*/packagecom.borealkiss.display{importflash.display.Sprite;
importcom.borealkiss.display.shapes.Hexagon;
/**
* Draw a small group of the same colored hexagons.
*/publicclassHexagonCloudextendsSprite{protectedvar_radius:uint;
protectedvar_stroke:uint;
protectedvar_alpha:Number;
//How many hexagons in a cloud.
protectedvar_limit:uint;
protectedvar_filling:Boolean;
protectedvar_fillColor:uint;
protectedvar_hexagons:Array;
//Number of the edge of a hexagon.
privateconstEDGES:int= 6;
/**
* Constructor
*/publicfunctionHexagonCloud(radius:Number,stroke:uint=0x0,alpha:Number=0.1,
limit:uint=5,filling:Boolean=false,fillColor:uint=0x0){_radius=radius;
_stroke=stroke;
_alpha=alpha;
_limit=limit;
_filling=filling;
_fillColor=fillColor;
this.init();
}protectedfunctioninit():void{_hexagons=newArray();
//First hexagon must be set in the center.
varfirstHex:Hexagon=newHexagon(_radius,_stroke,_alpha,_filling,_fillColor);
this.x=this.y=firstHex.x=firstHex.y= 0;
_hexagons.push(firstHex);
varlimit:int=_limit;
while(limit> 0){varparentNum:int=int(Math.random()*(_hexagons.length));
varparentHex:Hexagon=_hexagons[parentNum];
//Direction of the center of a child hex from the parent center.
vartheta:Number=int(Math.random()*EDGES)*(Math.PI/3)+Math.PI/6;
varchildHex:Hexagon=newHexagon(_radius,_stroke,_alpha,_filling,_fillColor);
childHex.x=parentHex.x+Math.sqrt(3)*(_radius)*Math.cos(theta);
childHex.y=parentHex.y+Math.sqrt(3)*(_radius)*Math.sin(theta);
_hexagons.push(childHex);
limit--;
}this.draw();
}protectedfunctiondraw():void{for(vari:int=0; i<_hexagons.length; i++){this.addChild(_hexagons[i]);
}}}}
com.borealkiss.display.shapes.Hexagon.as
Hexagon.as
/**
* @date 25/11/2008
* @author borealkiss
* @link http://blog.boreal-kiss.com/
*/packagecom.borealkiss.display.shapes{importflash.display.Shape;
importflash.display.Graphics;
/**
* Draws a hexagon.
*/publicclassHexagonextendsShape{//Number of the edge of a hexagon.
privateconstEDGES:int= 6;
/**
* Constructor
*/publicfunctionHexagon(radius:Number,stroke:uint=0x0,alpha:Number=0.1,
filling:Boolean=false,fillColor:uint=0x0){varg:Graphics=this.graphics;
g.lineStyle(0,stroke,alpha);
if(filling){g.beginFill(fillColor,alpha);
}for(vari:int=0; i<=EDGES; i++){vartheta:Number= 2*Math.PI*i/EDGES;
varx:Number=radius*Math.cos(theta);
vary:Number=radius*Math.sin(theta);
if(i== 0){g.moveTo(x,y);
}else{g.lineTo(x,y);
}}}}}