CalendarTimelapse
package {
import flash.geom.Rectangle;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.display.Sprite;
import caurina.transitions.Tweener;
import flash.events.Event;
/**
* @author Ramiro Espada
* @author http://www.molamil.com
*/
public class CalendarTimelapse extends Sprite {
public var timeTransitionSpeed:Number = 5;
public var years:Number = 5;
public var transitionTime:Number;
private var transitionDate:Date;
private var today:Date;
private var tomorrow:Date;
private var calendar:Array;
private var calendarContainer:Sprite;
private var day:TextHolder;
private var month:TextHolder;
private var year:TextHolder;
private var div1:TextHolder;
private var div2:TextHolder;
private var textHolder:TextHolder;
private var calendarArea:Rectangle;
private var background:Sprite;
public function CalendarTimelapse() {
init();
}
public function init():void {
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
background = new Sprite();
addChild(background);
stage.addEventListener(Event.RESIZE, stageResizeHandler);
today = new Date();
transitionTime = today.time;
transitionDate = new Date(today.getFullYear(), today.getMonth(), today.getDate(), today.getHours(), today.getMinutes(), today.getSeconds(), today.getMilliseconds());
tomorrow = new Date(today.getFullYear() + years, today.getMonth(), today.getDate(), today.getHours(), today.getMinutes(), today.getSeconds(), today.getMilliseconds());
trace('today: ' + (today.time));
trace('tomorrow: ' + (tomorrow.time));
calendarContainer = new Sprite();
addChild(calendarContainer);
div1 = new TextHolder();
div1.content = " / ";
div1.init();
calendarContainer.addChild(div1);
div2 = new TextHolder();
div2.content = " / ";
div2.init();
calendarContainer.addChild(div2);
day = new TextHolder();
day.name = "day";
day.content = formatDate(""+Number(transitionDate.getDate()));
day.init();
calendarContainer.addChild(day);
month = new TextHolder();
month.name = "month";
month.content = formatDate(""+Number(transitionDate.getMonth()+1));
month.init();
calendarContainer.addChild(month);
year = new TextHolder();
year.name = "year";
year.content = ""+transitionDate.getFullYear();
year.init();
calendarContainer.addChild(year);
calendar = new Array(day, div1, month, div2, year);
var i:int = 0;
for each(textHolder in calendar){
if(i != 0)
textHolder.x = TextHolder(calendar[i-1]).x + TextHolder(calendar[i-1]).width+1;
i++;
}
calendarArea = new Rectangle(0,0, calendarContainer.width, calendarContainer.height);
draw();
Tweener.addTween(this, {transitionTime:tomorrow.time, time:timeTransitionSpeed, onUpdate:update, onComplete:update, transition:"linear"});
}
public function update():void {
transitionDate.time = transitionTime;
if(formatDate(""+Number(transitionDate.getDate())) != day.content){
day.content = formatDate(""+Number(transitionDate.getDate()));
day.draw();
}
if(formatDate(""+Number(transitionDate.getMonth()+1)) != month.content){
month.content = formatDate(""+Number(transitionDate.getMonth()+1));
month.draw();
}
if ("" + transitionDate.getFullYear() != year.content){
year.content = ""+transitionDate.getFullYear();
year.draw();
}
}
public function destroy():void {
}
private function draw():void {
calendarContainer.x = stage.stageWidth/2 - calendarArea.width/2;
calendarContainer.y = stage.stageHeight/2 - calendarArea.height/2;
background.graphics.beginFill(0x222222,1);
background.graphics.drawRect(0,0,stage.stageWidth, stage.stageHeight);
}
private function formatDate(date:String):String {
var n:String = date;
if(date.length <= 1)
n = "0"+date;
return n;s
}
private function stageResizeHandler(event:Event):void {
draw();
}
}
}
import caurina.transitions.Tweener;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.Shape;
import flash.text.TextFormatAlign;
import flash.text.TextFormat;
import flash.text.TextFieldAutoSize;
import flash.text.TextField;
class TextHolder extends Sprite {
public var content:String;
private var textField:TextField;
private var background:Shape;
private var container:Sprite;
private var isfirstDraw:Boolean;
public function init():void {
container = new Sprite();
addChild(container);
background = new Shape();
container.addChild(background);
var format:TextFormat = new TextFormat();
format.size = 40;
format.align = TextFormatAlign.LEFT;
format.font = "Helvetica";
textField = new TextField();
textField.autoSize = TextFieldAutoSize.LEFT;
textField.defaultTextFormat = format;
container.addChild(textField);
isfirstDraw = true;
draw();
}
public function draw():void {
textField.text = content;
textField.x = 5;
textField.y = 3;
background.graphics.clear();
background.graphics.beginFill(0x999999,1);
background.graphics.drawRect(0, 0, textField.width+10, textField.height);
if(!isfirstDraw){
var piece:Piece = new Piece();
piece.bmd = new BitmapData(Math.floor(background.width), Math.floor(background.height), false, 0xFFFFFF);
piece.bmd.draw(container);
piece.init();
addChild(piece);
}
isfirstDraw = false;
}
}
class Piece extends Sprite {
public var bmd:BitmapData;
private var bmp:Bitmap;
public function init():void {
bmp = new Bitmap(bmd);
addChild(bmp);
x = bmp.width/2;
y = bmp.height/2;
bmp.x = -bmp.width/2;
bmp.y = -bmp.height/2;
scaleX = scaleY = .9;
var rY:Number = 90;
var rX:Number = Math.random()*90 - Math.random()*180;
var rZ:Number = Math.random()*90 - Math.random()*180;
var Y:Number = (height*2) + Math.random()*(height*3);
var X:Number = Math.random()*200 - Math.random()*200;
Tweener.addTween(this,{time:.4, rotationX:rX, rotationZ:rZ, rotationY:rY, alpha:0, y:Y, x:X, onComplete:destroy, scaleX:1.5, scaleY:1.5});
}
public function destroy():void {
parent.removeChild(this);
}
}