/
FlareLogo.as
executable file
·153 lines (135 loc) · 4.7 KB
/
FlareLogo.as
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package
{
import flare.animate.Easing;
import flare.animate.Parallel;
import flare.animate.Pause;
import flare.animate.Sequence;
import flare.animate.Transition;
import flare.animate.TransitionEvent;
import flare.animate.Transitioner;
import flare.animate.Tween;
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.events.Event;
import flash.filters.GlowFilter;
public class FlareLogo extends Sprite
{
private var points:Array = [
/*f*/ 0,2, 1,1, 1,2, 1,3, 1,4, 1,5, 1,6, 1,7, 2,0, 2,2, 3,0, 3,2,
/*l*/ 5,0, 5,7, 6,0, 6,1, 6,2, 6,3, 6,4, 6,5, 6,6, 6,7, 7,7,
/*a*/ 9,5, 9,6, 10,2, 10,4, 10,7, 11,2, 11,4, 11,7, 12,2, 12,4, 12,6, 13,3, 13,4, 13,5, 13,6, 13,7,
/*r*/ 15,2, 15,3, 15,4, 15,5, 15,6, 15,7, 16,3, 17,2, 18,2, 19,3,
/*e*/ 21,3, 21,4, 21,5, 21,6, 22,2, 22,4, 22,7, 23,2, 23,4, 23,7, 24,2, 24,4, 24,7, 25,3, 25,4, 25,7
];
private var w:Number = 10;
private var h:Number = 10;
private var xb:Number = 0;//-25/2;
private var yb:Number = 0;//-7/2;
private var _dance:Transition;
private var _glow:Transition;
public function get glow():Transition { return _glow; }
public function get dance():Transition { return _dance; }
public function FlareLogo(size:Number=10, center:Boolean=true)
{
w = size;
h = size;
xb = center ? size * -5/4 : 0;
yb = center ? size * -7/20 : 0;
var inc:Number = 2, linc:Number = 4;
var con:Sprite = new Sprite();
for (var i:int=0; i<points.length; i+=2) {
var s:Sprite = new Sprite();
s.graphics.beginFill(0, 1);
s.graphics.drawRect(-(w+inc)/2,-(h+inc)/2,w+inc,h+inc);
s.graphics.endFill();
con.addChild(s);
}
addChild(con);
layoutT(con, Transitioner.DEFAULT, 0);
var seq:Sequence = new Sequence(
new Pause(6),
layoutT(con, new Transitioner(3), linc),
layoutY(con, new Transitioner(2,Easing.easeOutBounce), linc),
new Pause(1),
layoutC(con, new Transitioner(3,Easing.easeInPoly(3)), linc),
new Tween(con, 6, {rotation:180}, false, Easing.easeInPoly(3)),
new Parallel(
new Tween(con, 6, {rotation:360}, false, Easing.easeOutPoly(3)),
layoutX(con, new Transitioner(6), linc)
),
new Tween(con, 0, {rotation:0}),
layoutT(con, new Transitioner(3), linc),
layoutT(con, new Transitioner(3), 0),
new Pause(21)
);
seq.addEventListener(TransitionEvent.END,
function(evt:Event):void { seq.play(); });
_dance = seq;
// do the glow...
con.filters = [new GlowFilter(0xff0000, 0.5, 0, 0)];
var g1:Tween = new Tween(con,3,{"filters[0].blurX":15,"filters[0].blurY":15});
var g2:Tween = new Tween(con,3,{"filters[0].blurX":0,"filters[0].blurY":0});
g1.easing = g2.easing = Easing.none;
var glow:Sequence = new Sequence(g1,g2);
glow.easing = Easing.easeInOutPoly(2);
glow.addEventListener(TransitionEvent.END,
function(evt:Event):void { glow.play(); });
_glow = glow;
}
public function play():void {
_dance.play();
_glow.play();
}
public function pause():void {
_dance.pause();
_glow.pause();
}
private function layoutT(s:Sprite, t:Transitioner, a:Number):Transitioner
{
for (var i:int=0; i<s.numChildren; ++i) {
var b:DisplayObject = s.getChildAt(i);
t.$(b).x = (w+a) * (xb + points[2*i]);
t.$(b).y = (h+a) * (yb + points[2*i+1]);
}
return t;
}
private function layoutX(s:Sprite, t:Transitioner, a:Number):Transitioner
{
var xc:Object = {}; for (var i:int=0; i<8; ++i) xc[i] = 0;
for (i=0; i<s.numChildren; ++i) {
var b:DisplayObject = s.getChildAt(i);
t.$(b).x = 100 + (w+a) * (xb + xc[points[2*i+1]]);
t.$(b).y = (h+a) * (yb + points[2*i+1]);
xc[points[2*i+1]]++;
}
return t;
}
private function layoutY(s:Sprite, t:Transitioner, a:Number):Transitioner
{
var yc:Object = {}; for (var i:int=0; i<26; ++i) yc[i] = 7;
for (i=s.numChildren; --i>=0;) {
var b:DisplayObject = s.getChildAt(i);
t.$(b).x = (w+a) * (xb + points[2*i]);
t.$(b).y = (h+a) * (yb + yc[points[2*i]]);
yc[points[2*i]]--;
}
return t;
}
private function layoutC(s:Sprite, t:Transitioner, a:Number):Transitioner
{
var sort:Array = new Array(s.numChildren);
for (var i:int=0; i<s.numChildren; ++i) {
var b:DisplayObject = s.getChildAt(i);
sort[i] = Math.atan2(b.y, b.x);
}
sort = sort.sort(Array.NUMERIC | Array.RETURNINDEXEDARRAY);
for (i=0; i<sort.length; ++i) {
var f:Number = 1.0 - i / s.numChildren;
b = s.getChildAt(sort[i]);
t.$(b).x = -200 * Math.cos(2*Math.PI*f);
t.$(b).y = 200 * Math.sin(2*Math.PI*f);
}
return t;
}
}
}