engine.as
ActionScript 2 source for the CubeLogix 3D website, 1950 lines: the 3D engine, the breaking pattern, the falling pieces, the shadows, the cubes and the timeline of the intro. Raw file
// 16: sprite 101 frame 1
function clearFaces() {
faces = new Array();
}
function addFace() {
faces[faces.length] = new Array();
return faces.length - 1;
}
function numFaces() {
return faces.length;
}
function addPointToFace(i, x, y) {
faces[i][faces[i].length] = [x, y];
}
function createInitialFaces() {
clearFaces();
var r7 = number_of_radial_lines;
var r13 = new Array();
var r2;
for (r2 = 0; r2 < r7; r2++) {
r13[r2] = r2 * 3.14159 * 2 / r7 + (0.1 + 0.8 * Math.random() * 3.14159 * 2 / r7);
}
var r6;
var r5;
var r4;
var r3;
var r18;
var r1 = 89;
for (r2 = 0; r2 < r7; r2++) {
var r12 = r13[r2];
var r11 = r13[(r2 + 1) % r7];
var r15 = Math.sin(r12);
var r17 = Math.cos(r12);
var r14 = Math.sin(r11);
var r16 = Math.cos(r11);
var r10 = Math.random() * 0.5 + 0.75;
var r9 = Math.random() * 0.5 + 0.75;
var r8 = addFace();
addPointToFace(r8, 0, 0);
r6 = r15 * shatter_w * r10;
r5 = r14 * shatter_w * r9;
r4 = -r17 * shatter_h * r10;
r3 = -r16 * shatter_h * r9;
if (r4 < -r1) {
r6 = r6 * -r1 / r4;
r4 = -r1;
}
if (r3 < -r1) {
r5 = r5 * -r1 / r3;
r3 = -r1;
}
if (r4 > r1) {
r6 = r6 * r1 / r4;
r4 = r1;
}
if (r3 > r1) {
r5 = r5 * r1 / r3;
r3 = r1;
}
addPointToFace(r8, r6, r4);
addPointToFace(r8, r5, r3);
}
}
function pointDistance(x1, y1, x2, y2) {
var r2 = x2 - x1;
var r1 = y2 - y1;
return Math.sqrt(r2 * r2 + r1 * r1);
}
function pointInterp(p1, p2, r) {
return [p1[0] * (1 - r) + p2[0] * r, p1[1] * (1 - r) + p2[1] * r];
}
function findLongestEdge() {
var r7 = -1;
var r8 = -1;
var r6 = 0;
var r9;
var r1;
var r2;
for (r1 = 0; r1 < numFaces(); r1++) {
for (r2 = 0; r2 < faces[r1].length; r2++) {
var r5 = faces[r1][r2];
var r4 = faces[r1][(r2 + 1) % faces[r1].length];
var r3 = pointDistance(r5[0], r5[1], r4[0], r4[1]);
if (r3 > r6) {
r7 = r1;
r8 = r2;
r6 = r3;
}
}
}
return [r7, r8];
}
function getRandomPointOnLine(f, e) {
var r2 = faces[f][e];
var r1 = faces[f][(e + 1) % faces[f].length];
return pointInterp(r2, r1, Math.random() * 0.5 + 0.25);
}
function getLineDirection(f, e) {
var r2 = faces[f][e];
var r1 = faces[f][(e + 1) % faces[f].length];
var r3 = pointDistance(r2[0], r2[1], r1[0], r1[1]);
return [(r1[0] - r2[0]) / r3, (r1[1] - r2[1]) / r3, r3];
}
function rotateDirection(d, a) {
var r4 = [-d[1], d[0]];
var r3 = Math.sin(a);
var r2 = Math.cos(a);
return [d[0] * r2 + r4[0] * r3, d[1] * r2 + r4[1] * r3];
}
function findIntersectingEdge(f, e, p, n) {
var r1;
var r15 = -1;
var r10 = 9999;
for (r1 = 0; r1 < faces[f].length; r1++) {
if (r1 != e) {
var r3 = getLineDirection(f, r1);
var r5 = faces[f][r1];
var r14 = faces[f][(r1 + 1) % faces[f].length];
var r13 = r3[2];
var r6 = -r3[1];
var r7 = r3[0];
var r9 = (p[0] - r5[0]) * r6 + (p[1] - r5[1]) * r7;
var r8 = n[0] * r6 + n[1] * r7;
var r2 = -r9 / r8;
if (r2 >= 0 && r2 < r10) {
r15 = r1;
r10 = r2;
}
}
}
if (r15 == -1) {
return false;
}
var r18 = p[0] + n[0] * r10;
var r17 = p[1] + n[1] * r10;
return [r15, [r18, r17]];
}
function findWhereLineIntersectsAnEdge(x, y, dx, dy, except_edge) {
var r8;
var r7;
var r22;
var r19 = -1;
var r15 = 99999;
for (var r1 = 0; r1 < num_edges; r1++) {
if (r1 != except_edge) {
var r4 = getEdgeDirectionAndLength(r1);
var r3 = points[edges[r1].p];
var r6 = points[edges[r1].q];
var r5 = r4.len;
var r9 = -r4.dir.y;
var r10 = r4.dir.x;
var r12 = (x - r3.x) * r9 + (y - r3.y) * r10;
var r11 = dx * r9 + dy * r10;
var r2 = -r12 / r11;
r8 = x + dx * r2;
r7 = y + dy * r2;
if (r2 > 0 && r2 < r15) {
var r14 = pointDistance(r3.x, r3.y, r8, r7);
var r13 = pointDistance(r6.x, r6.y, r8, r7);
if (r14 < r5 && r13 < r5) {
r19 = r1;
r15 = r2;
}
}
}
}
return {edge: r19, x: x + dx * r15, y: y + dy * r15};
}
function drawEdge(f, e, thickness, col, alpha) {
lineStyle(thickness, col, alpha);
var r2 = faces[f][e];
var r1 = faces[f][(e + 1) % faces[f].length];
moveTo(r2[0], r2[1]);
lineTo(r1[0], r1[1]);
}
function drawPoint(p, col) {
lineStyle(10, 0, 100);
moveTo(p[0], p[1]);
lineTo(p[0] + 1, p[1] + 1);
lineStyle(8, col, 100);
moveTo(p[0], p[1]);
lineTo(p[0] + 1, p[1] + 1);
}
function breakApartRandomFace() {
var r9 = findLongestEdge();
var r2 = r9[0];
var r5 = r9[1];
var r7 = getRandomPointOnLine(r2, r5);
var r11 = getLineDirection(r2, r5);
var r12 = rotateDirection(r11, Math.random() * 3.141592653589793);
var r8 = findIntersectingEdge(r2, r5, r7, r12);
var r6 = r8[0];
var r10 = r8[1];
var r4 = new Array();
var r3 = new Array();
var r1;
r4[0] = r7;
r1 = (r5 + 1) % faces[r2].length;
while (true) {
r4[r4.length] = faces[r2][r1];
if (r1 == r6) {
break;
}
r1 = (r1 + 1) % faces[r2].length;
}
r4[r4.length] = r10;
r3[0] = r10;
r1 = (r6 + 1) % faces[r2].length;
while (true) {
r3[r3.length] = faces[r2][r1];
if (r1 == r5) {
break;
}
r1 = (r1 + 1) % faces[r2].length;
}
r3[r3.length] = r7;
faces[r2] = r4;
faces[faces.length] = r3;
}
function isFaceWithin(f, x1, y1, x2, y2) {
var r1;
for (r1 = 0; r1 < faces[f].length; r1++) {
if (faces[f][r1][0] >= x1 && faces[f][r1][0] <= x2) {
if (faces[f][r1][1] >= y1 && faces[f][r1][1] <= y2) {
return true;
}
}
}
return false;
}
function createMeshFromFace(f, sbuf, type) {
f = faces[f];
var r1;
var r4 = 0;
var r3 = 0;
for (r1 = 0; r1 < f.length; r1++) {
r4 += f[r1][0];
r3 += f[r1][1];
}
r4 /= f.length;
r3 /= f.length;
var r5 = new Array();
var r9 = new Array();
var r8 = new Array();
for (r1 = 0; r1 < f.length; r1++) {
r5[r1] = [f[r1][0] - r4, f[r1][1] - r3, 0, tex_scale * (f[r1][0] + 250), tex_scale * (f[r1][1] + 90)];
}
r4 *= -1;
r3 *= -1;
var r7 = new type(r5, sbuf, logo_tex);
r7.t.setPosition(r4, r3, 0);
var r6 = 0.015 * Math.sqrt(r4 * r4 + r3 * r3);
r6 = 1 - r6;
if (r6 < 0) {
r6 = 0;
}
r7.dr = [-r3, r4, 0, 4 * (r6 * (Math.random() * 1.8121 + 0.212)) + Math.random() * 1.6772];
r7.dp = [r4 * 0.13, r3 * 0.13, -40 - r6 * 140];
return r7;
}
function addTheFacesAsMeshes(sbuf) {
var r1;
for (r1 = 0; r1 < faces.length; r1++) {
if (isFaceWithin(r1, -hole_w / 2, -hole_h / 2, hole_w / 2, hole_h / 2)) {
scene.addObject(createMeshFromFace(r1, sbuf, Polygon));
hscene.addObject(createMeshFromFace(r1, sbuf, HolePolygon));
}
}
}
function Transform() {
this.p = [0, 0, 0];
this.q = [0, 0, 1, 0];
this.qi = true;
this.pi = true;
}
function Mesh(points, faces) {
this.t = new Transform();
this.name = "Mesh " + Mesh.prototype.count++;
this.p = points ? points : new Array();
this.f = faces ? faces : new Array();
this.sp = [];
this.calcRadius();
this.lineAlpha = 100;
this.lineCol = 0;
this.fillAlpha = 0;
this.fillCol = 16777215;
}
function Scene() {
this.t = new Transform();
this.name = "Scene " + Scene.prototype.count++;
this.never_clip = true;
this.objects = 0;
this.numObjects = 0;
}
function Box(x1, y1, z1, x2, y2, z2) {
this.t = new Transform();
this.p = new Array();
this.f = new Array();
this.name += " | Box " + Box.prototype.count++;
this.t.p[0] = (x1 + x2) * 0.5;
this.t.p[1] = (y1 + y2) * 0.5;
this.t.p[2] = (z1 + z2) * 0.5;
var r2;
var r5 = (x2 - x1) * 0.5;
var r4 = (y2 - y1) * 0.5;
var r3 = (z2 - z1) * 0.5;
for (r2 = 0; r2 < this.points.length; r2++) {
this.p[r2] = [this.points[r2][0] * r5, this.points[r2][1] * r4, this.points[r2][2] * r3];
}
this.f = this.faces;
}
function Line(p1, p2, col, thi, alp) {
this.t = new Transform();
this.name = "Line " + Line.prototype.count++;
this.p = [p1, p2];
this.col = col;
this.thi = thi;
this.alp = alp;
}
function drawTri(g, w_vert, texture) {
var r5 = w_vert[0];
var r4 = w_vert[1];
var r3 = w_vert[2];
if (r5.sx == null || r4.sx == null || r3.sx == null) {
return;
}
var r7 = texture.width;
var r6 = texture.height;
var r10 = r5.u;
var r9 = r5.v;
tMat.tx = r10;
tMat.ty = r9;
tMat.a = (r4.u - r10) / r7;
tMat.b = (r4.v - r9) / r7;
tMat.c = (r3.u - r10) / r6;
tMat.d = (r3.v - r9) / r6;
var r2 = r5.sx;
var r1 = r5.sy;
var r11 = r4.sx;
var r13 = r4.sy;
var r14 = r3.sx;
var r12 = r3.sy;
sMat.a = (r11 - r2) / r7;
sMat.b = (r13 - r1) / r7;
sMat.c = (r14 - r2) / r6;
sMat.d = (r12 - r1) / r6;
sMat.tx = r2;
sMat.ty = r1;
tMat.invert();
tMat.concat(sMat);
g.beginBitmapFill(texture, tMat, false, false);
g.moveTo(r2, r1);
g.lineTo(r11, r13);
g.lineTo(r14, r12);
g.lineTo(r2, r1);
g.endFill();
}
function vector_distance(a, b) {
var r3 = b[0] - a[0];
var r2 = b[1] - a[1];
var r1 = b[2] - a[2];
return Math.sqrt(r3 * r3 + r2 * r2 + r1 * r1);
}
function vector_direction(from, to) {
var r4 = to[0] - from[0];
var r3 = to[1] - from[1];
var r2 = to[2] - from[2];
var r1 = Math.sqrt(r4 * r4 + r3 * r3 + r2 * r2);
return [r4 / r1, r3 / r1, r2 / r1];
}
function vector_dot(a, b) {
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
}
function vector_subtract(a, b) {
return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
}
function vector_projectToPlane(light, point, planePoint, planeNormal, result) {
var r3;
r3 = vector_subtract(point, light);
var r2 = vector_dot(planeNormal, vector_subtract(planePoint, light)) / vector_dot(planeNormal, r3);
result[0] = light[0] + r2 * r3[0];
result[1] = light[1] + r2 * r3[1];
result[2] = light[2] + r2 * r3[2];
if (result[0] + "" == "NaN") {
if (aaaaa < 20) {
aaaaa++;
}
}
}
function Polygon(points, sbuf, tex) {
this.t = new Transform();
this.name = "Polygon " + Polygon.prototype.count++;
this.tex = tex;
this.p = points ? points : new Array();
this.sp = [];
this.calcRadius();
this.sbuf = sbuf;
this.lineAlpha = 100;
this.lineCol = 0;
this.fillAlpha = 0;
this.fillCol = 16777215;
this.bounced = false;
}
function HolePolygon(points, sbuf) {
this.t = new Transform();
this.name = "HolePolygon " + HolePolygon.prototype.count++;
this.p = points ? points : new Array();
this.sp = [];
this.calcRadius();
this.sbuf = sbuf;
this.lineAlpha = 100;
this.lineCol = 0;
this.fillAlpha = 0;
this.fillCol = 16777215;
this.bounced = false;
}
function NavCube(sb, rad, col) {
this.t = new Transform();
this.sp = [];
this.sb = sb;
this.lineAlpha = 100;
this.lineCol = 0;
this.fillAlpha = 0;
this.fillCol = 16777215;
this.t.p[0] = 0;
this.t.p[1] = 0;
this.t.p[2] = 100;
this.rad = this.trad = rad;
this.rv = 0;
this.tpv = [0, 0, 0];
this.col = col;
var r2;
this.fc = [0, 0, 0, 0, 0, 0];
this.v = [0, 0, 0, 0, 0, 0];
for (r2 = 0; r2 < 6; r2++) {
var r3 = this.f[r2][4];
var r5 = r3 * (col >> 16 & 255);
var r6 = r3 * (col >> 8 & 255);
var r4 = r3 * (col & 255);
if (r5 > 255) {
r5 = 255;
}
if (r6 > 255) {
r6 = 255;
}
if (r4 > 255) {
r4 = 255;
}
this.fc[r2] = Math.floor(r5) * 65536 + Math.floor(r6) * 256 + Math.floor(r4);
}
this.p = [];
this.trp = [];
this.scp = [];
for (r2 = 0; r2 < this.points.length; r2++) {
this.trp[r2] = [0, 0, 0];
this.scp[r2] = [0, 0, 0];
this.p[r2] = [this.points[r2][0], this.points[r2][1], this.points[r2][2]];
}
this.over = false;
this.press = false;
}
function CubeScene(cbuf1, cbuf2, cbuf3, sbuf) {
this.t = new Transform();
this.name = "CubeScene " + CubeScene.prototype.count++;
this.never_clip = true;
this.bufs = [cbuf1, cbuf2, cbuf3];
this.objects = 0;
this.numObjects = 0;
this.cu = [];
this.addObject(this.cu[0] = this.cube1 = new NavCube(sbuf, 30, 16759790));
this.addObject(this.cu[1] = this.cube2 = new NavCube(sbuf, 30, 12312063));
this.addObject(this.cu[2] = this.cube3 = new NavCube(sbuf, 30, 13417437));
this.cube1.cs = [this.cube2, this.cube3];
this.cube2.cs = [this.cube1, this.cube3];
this.cube3.cs = [this.cube1, this.cube2];
this.time = 0;
this.allow_mouseover = false;
this.first = true;
}
function Plane(tex, w, h, dw, dh, a, b) {
this.t = new Transform();
this.name = "Plane " + Plane.prototype.count++;
this.tex = tex;
this.p = new Array();
this.f = new Array();
var r2;
var r3;
for (r3 = 0; r3 <= b; r3++) {
for (r2 = 0; r2 <= a; r2++) {
this.p.push([dw * r2 / a - 0.5 * dw, dh * r3 / b - 0.5 * dh, 0, w * r2 / a, h * r3 / b]);
}
}
for (r3 = 0; r3 < b; r3++) {
for (r2 = 0; r2 < a; r2++) {
this.f.push([r2 + r3 * (a + 1), r2 + 1 + r3 * (a + 1), r2 + 1 + (r3 + 1) * (a + 1)]);
this.f.push([r2 + 1 + (r3 + 1) * (a + 1), r2 + (r3 + 1) * (a + 1), r2 + r3 * (a + 1)]);
}
}
}
function reset() {
frame = 0;
time_start = getTimer() * 0.001;
overlay._visible = false;
ori.setPosition(0, 0, cam_dist);
ori.setRotation(0, 0, 1, 0);
clear();
createInitialFaces();
buf.clear();
sbuf.clear();
cbuf1.clear();
cbuf2.clear();
cbuf3.clear();
hbuf.clear();
hbuf._visible = true;
cbuf1._visible = true;
cbuf2._visible = true;
cbuf3._visible = true;
for (var r2 = 0; r2 < shatter_times; r2++) {
breakApartRandomFace();
}
scene = new Scene();
hscene = new Scene();
cube_scene = new CubeScene(cbuf1, cbuf2, cbuf3, sbuf);
bgscene = new Scene();
cube_scene.cube1.onRelease = function() {
show_window = 1;
};
cube_scene.cube2.onRelease = function() {
show_window = 2;
};
cube_scene.cube3.onRelease = function() {
show_window = 3;
};
addTheFacesAsMeshes(sbuf);
hole_tex = new flash.display.BitmapData(500 * tex_scale, 180 * tex_scale);
t = new flash.geom.Matrix();
t.scale(tex_scale, tex_scale);
t.tx = tex_scale * 500 / 2;
t.ty = tex_scale * 180 / 2;
hole_tex.draw(_parent.logo_bg.logo, t);
lscene = new Scene();
lscene.addObject(new Line([-4000, -90, 0], [4000, -90, 0], 0, 1, 100));
lscene.addObject(new Line([-4000, 90, 0], [4000, 90, 0], 0, 1, 100));
plane1 = new Plane(hole_tex, 500 * tex_scale, 180 * tex_scale, 500, 180, 6, 6);
bgscene.addObject(plane1);
hbuf.clear();
bgscene.draw(hbuf, ori);
lscene.draw(hbuf, ori);
bitmappedversion._visible = false;
cube_scene.allow_mouseover = false;
overlay_make_visible = true;
}
function showWindow(win) {
if (current_win) {
hideWindow();
}
current_win = win;
}
function hideWindow() {
if (!current_win) {
return;
}
}
function showingWindow() {
return !!current_win;
}
function drawWindowShadow() {
var r2 = getWindowPoints();
var r3;
var r4 = [0, 0, -1];
ori.transformNormal(r4, r4);
var r1 = [[0, 0], [0, 0], [0, 0], [0, 0]];
r3 = [r2[1], r2[2], r2[0]];
vector_projectToPlane(buf.tl, r3, [0, 0, cam_dist], r4, r1[0]);
r3 = [r2[3], r2[2], r2[0]];
vector_projectToPlane(buf.tl, r3, [0, 0, cam_dist], r4, r1[1]);
r3 = [r2[3], r2[4], r2[0]];
vector_projectToPlane(buf.tl, r3, [0, 0, cam_dist], r4, r1[2]);
r3 = [r2[1], r2[4], r2[0]];
vector_projectToPlane(buf.tl, r3, [0, 0, cam_dist], r4, r1[3]);
buf.screenPoint(r1[0], r1[0]);
buf.screenPoint(r1[1], r1[1]);
buf.screenPoint(r1[2], r1[2]);
buf.screenPoint(r1[3], r1[3]);
sbuf.moveTo(r1[0][0], r1[0][1]);
sbuf.beginFill(6750156, 100);
sbuf.lineStyle(0, 0, 0);
sbuf.lineTo(r1[1][0], r1[1][1]);
sbuf.lineTo(r1[2][0], r1[2][1]);
sbuf.lineTo(r1[3][0], r1[3][1]);
sbuf.endFill();
}
function getWindowPoints() {
var r4 = win._x;
var r3 = win._y;
var r6 = win.getWidth();
var r5 = win.getHeight();
var r2 = [0, 0, 0];
var r1 = [0, 0, 0];
buf.unScreenPoint([r4, -r3, window_z], r2);
buf.unScreenPoint([r4 + r6, -r3 - r5, window_z], r1);
return [window_z, r2[0], r2[1], r1[0], r1[1]];
}
function drawWindowTransparent() {
var r2 = new flash.display.BitmapData(win.getWidth() - 4, win.getHeight() - 4, false, 16777215);
r2.draw(this, new flash.geom.Matrix(1, 0, 0, 1, -win._x + 4, -win._y + 4));
r2.applyFilter(r2, r2.rectangle, new flash.geom.Point(0, 0), new flash.filters.BlurFilter(8, 8, 1));
win.blur.attachBitmap(r2, 500);
win.blur._x = 2;
win.blur._y = 2;
}
function bump(time, bump, bump_w) {
var r1 = bump_w / 2;
var r2 = 0;
if (time > bump - r1 && time < bump + r1) {
r2 = 1 - 0.5 * Math.sin(3.14159 * (time - bump + r1) / r1);
}
return r2;
}
win = _parent.testwindow;
myListener = new Object();
myListener.onResize = function() {
var r5 = Stage.width;
var r3 = Stage.height;
var r4 = 400 - r5 * 0.5;
var r2 = 200 - r3 * 0.5;
_parent.overlay.bl._x = _parent.overlay.overlay_top._x = Math.round(r4 + 15);
_parent.overlay.overlay_top._y = Math.round(r2);
_parent.overlay.bl._y = Math.round(r2 + r3) - 15 - 19;
_parent.overlay.overlay_bottom._x = Math.round(r4 + r5) - 101 - 15;
_parent.overlay.overlay_bottom._y = Math.round(r2 + r3) - 57 - 15;
_parent._parent.testwindow.windowFrame();
};
myListener.onResize();
Stage.addListener(myListener);
Stage.scaleMode = "noScale";
overlay = _parent.overlay;
_parent.logo_bg._visible = false;
number_of_radial_lines = int(7 + Math.random() * 3);
shatter_times = 8 + Math.random() * 8;
shatter_w = 120;
shatter_h = 120;
hole_w = 100;
hole_h = 100;
tex_scale = 1;
cam_dist = 350;
logo_tex = new flash.display.BitmapData(500 * tex_scale, 180 * tex_scale);
t = new flash.geom.Matrix();
t.scale(tex_scale, tex_scale);
t.tx = tex_scale * 500 / 2;
t.ty = tex_scale * 180 / 2;
logo_tex.draw(_parent.logo_bg.logo, t);
var faces = new Array();
Transform.prototype.setPosition = function(x, y, z) {
this.p = [x, y, z];
this.pi = false;
};
Transform.prototype.addPosition = function(x, y, z) {
this.p[0] += x;
this.p[1] += y;
this.p[2] += z;
this.pi = false;
};
Transform.prototype.setRotation = function(x, y, z, r) {
var r3 = Math.sin(r / 2);
var r2 = r3 / Math.sqrt(x * x + y * y + z * z);
this.q = [x * r2, y * r2, z * r2, Math.cos(r / 2)];
this.qi = false;
};
Transform.prototype.addRotation = function(x, y, z, r) {
var r2 = this.copy();
this.setRotation(x, y, z, r);
r2.setPosition(0, 0, 0);
this.combine(r2);
};
Transform.prototype.combine = function(z) {
var r3 = this.q;
var r2 = z.q;
var r6 = r3[0] * r2[0] + r3[1] * r2[1] + r3[2] * r2[2];
var r4 = [r3[1] * r2[2] - r3[2] * r2[1], r3[2] * r2[0] - r3[0] * r2[2], r3[0] * r2[1] - r3[1] * r2[0]];
var r5 = [0, 0, 0];
this.transformPoint(z.p, r5);
this.p = r5;
this.q = [r2[0] * r3[3] + r3[0] * r2[3] + r4[0], r2[1] * r3[3] + r3[1] * r2[3] + r4[1], r2[2] * r3[3] + r3[2] * r2[3] + r4[2], r3[3] * r2[3] - r6];
this.pi = false;
this.qi = false;
};
Transform.prototype.copy = function() {
var r2 = new Transform();
r2.p[0] = this.p[0];
r2.p[1] = this.p[1];
r2.p[2] = this.p[2];
r2.q = [this.q[0], this.q[1], this.q[2], this.q[3]];
r2.pi = this.pi;
r2.qi = this.qi;
return r2;
};
Transform.prototype.transformPoint = function(s, d) {
var r8 = s[0];
var r7 = s[1];
var r6 = s[2];
var r4 = this.q[0];
var r3 = this.q[1];
var r2 = this.q[2];
var r5 = this.q[3];
d[0] = this.p[0] + r8 * (1 - 2 * (r3 * r3 + r2 * r2)) + r7 * (2 * r4 * r3 - 2 * r5 * r2) + r6 * (2 * r5 * r3 + 2 * r4 * r2);
d[1] = this.p[1] + r8 * (2 * r4 * r3 + 2 * r5 * r2) + r7 * (1 - 2 * (r4 * r4 + r2 * r2)) + r6 * (-2 * r5 * r4 + 2 * r3 * r2);
d[2] = this.p[2] + r8 * (-2 * r5 * r3 + 2 * r4 * r2) + r7 * (2 * r5 * r4 + 2 * r3 * r2) + r6 * (1 - 2 * (r4 * r4 + r3 * r3));
};
Transform.prototype.transformNormal = function(s, d) {
var r8 = s[0];
var r7 = s[1];
var r6 = s[2];
var r4 = this.q[0];
var r3 = this.q[1];
var r2 = this.q[2];
var r5 = this.q[3];
d[0] = r8 * (1 - 2 * (r3 * r3 + r2 * r2)) + r7 * (2 * r4 * r3 - 2 * r5 * r2) + r6 * (2 * r5 * r3 + 2 * r4 * r2);
d[1] = r8 * (2 * r4 * r3 + 2 * r5 * r2) + r7 * (1 - 2 * (r4 * r4 + r2 * r2)) + r6 * (-2 * r5 * r4 + 2 * r3 * r2);
d[2] = r8 * (-2 * r5 * r3 + 2 * r4 * r2) + r7 * (2 * r5 * r4 + 2 * r3 * r2) + r6 * (1 - 2 * (r4 * r4 + r3 * r3));
};
Transform.prototype.transformNormalInv = function(s, d) {
var r8 = s[0];
var r7 = s[1];
var r6 = s[2];
var r4 = -this.q[0];
var r3 = -this.q[1];
var r2 = -this.q[2];
var r5 = this.q[3];
d[0] = r8 * (1 - 2 * (r3 * r3 + r2 * r2)) + r7 * (2 * r4 * r3 - 2 * r5 * r2) + r6 * (2 * r5 * r3 + 2 * r4 * r2);
d[1] = r8 * (2 * r4 * r3 + 2 * r5 * r2) + r7 * (1 - 2 * (r4 * r4 + r2 * r2)) + r6 * (-2 * r5 * r4 + 2 * r3 * r2);
d[2] = r8 * (-2 * r5 * r3 + 2 * r4 * r2) + r7 * (2 * r5 * r4 + 2 * r3 * r2) + r6 * (1 - 2 * (r4 * r4 + r3 * r3));
};
Transform.prototype.pointZAxis = function(x, y, z) {
var r2 = 1 / Math.sqrt(x * x + y * y + z * z);
this.setRotation(y * r2, -x * r2, 0, -Math.acos(z * r2));
};
Transform.prototype.move = function(f, dt) {
if (this.doing == 1) {
this.mp += this.ms * dt;
if (this.mp > this.md) {
this.p[0] = this.mx2;
this.p[1] = this.my2;
this.p[2] = this.mz2;
this.doing = 0;
} else {
this.p[0] = this.mx1 + this.mdx * this.mp;
this.p[1] = this.my1 + this.mdy * this.mp;
this.p[2] = this.mz1 + this.mdz * this.mp;
}
}
};
Transform.prototype.moveTo = function(x, y, z, s) {
this.doing = 1;
this.mx2 = x;
this.my2 = y;
this.mz2 = z;
x -= this.mx1 = this.p[0];
y -= this.my1 = this.p[1];
z -= this.mz1 = this.p[2];
var r2 = Math.sqrt(x * x + y * y + z * z);
this.mdx = x / r2;
this.mdy = y / r2;
this.mdz = z / r2;
this.md = r2;
this.mp = 0;
this.ms = s;
};
Mesh.prototype.count = 0;
Mesh.prototype.addPoint = function(p) {
this.p[this.p.length] = p;
return this.p.length;
};
Mesh.prototype.addFace = function(f) {
this.f[this.f.length] = f;
return this.f.length;
};
Mesh.prototype.setPoints = function(p) {
this.p = p;
};
Mesh.prototype.setFaces = function(f) {
this.f = f;
};
Mesh.prototype.calcRadius = function() {
var r7 = 0;
var r8 = this.p.length;
var r3;
var p;
var r6;
var r5;
var r4;
for (var r2 = 0; r2 < r8; r2++) {
p = this.p[r2];
r6 = p[0];
r5 = p[1];
r4 = p[2];
r3 = Math.sqrt(r6 * r6 + r5 * r5 + r4 * r4);
if (r3 > r7) {
r7 = r3;
}
}
this.r = r7;
};
Mesh.prototype.plotScreenPoint = function(p, col) {
var r2 = [0, 0];
this.screenPoint(p, r2);
this.plotPoint(r2, col);
};
Mesh.prototype.plotPoint = function(b, d, col) {
b.lineStyle(20, col);
b.moveTo(d[0] - 1, d[1] - 1);
b.lineTo(d[0] + 1, d[1] + 1);
};
Mesh.prototype.drawFaces = function(b, g) {
if (this.lineAlpha == 100) {
b.lineStyle(1, this.lineCol);
} else if (this.lineAlpha > 0) {
b.lineStyle(1, this.lineCol, this.lineAlpha);
} else {
b.lineStyle(0, 0, 0);
}
var r7;
var r5;
var r3;
var r9;
var r6;
var r8;
var r13;
var r11;
var r12;
var r10;
var r14 = new Array();
for (r5 = 0; r5 < this.f.length; r5++) {
r9 = this.f[r5][0];
r6 = this.f[r5][1];
r8 = this.f[r5][2];
r13 = g[r6][0] - g[r9][0];
r11 = g[r6][1] - g[r9][1];
r12 = g[r6][0] - g[r8][0];
r10 = g[r6][1] - g[r8][1];
if (r13 * r10 >= r11 * r12) {
a = this.f[r5];
r7 = a[a.length - 1];
b.moveTo(g[r7][0], g[r7][1]);
switch (this.fillAlpha) {
case 0:
break;
case 100:
b.beginFill(this.fillCol);
break;
default:
b.beginFill(this.fillCol, this.fillAlpha);
}
for (r3 = 0; r3 < a.length; r3++) {
b.lineTo(g[a[r3]][0], g[a[r3]][1]);
}
if (this.fillAlpha > 0) {
b.endFill();
}
if (this.lineAlpha > 0) {
b.lineTo(g[a[0]][0], g[a[0]][1]);
}
}
}
};
Mesh.prototype.draw = function(b, tt) {
if (this.r == 0) {
this.calcRadius();
}
var r7;
if (tt === 0) {
r7 = this.t;
} else {
r7 = tt.copy();
r7.combine(this.t);
}
var r3 = [0, 0];
var r8 = [this.r, 0, r7.p[2]];
b.screenPoint(r8, r3);
r8 = r3[0];
this.sr = r8;
this.sp = [0, 0, 0];
b.screenPoint(r7.p, this.sp);
if (r8 < 2.5) {
r8 *= 2;
r3 = this.sp;
b.lineStyle(r8, 0);
b.moveTo(r3[0] - 1, r3[1]);
b.lineTo(r3[0] + 1, r3[1]);
b.lineStyle(r8 + 1, 0, 100 * (r8 - Math.floor(r8)));
b.moveTo(r3[0] - 1, r3[1]);
b.lineTo(r3[0] + 1, r3[1]);
return;
}
var r6;
var r5 = new Array();
var r2;
r3 = [0, 0, 0];
if (this.closer) {
for (r2 = 0; r2 < this.p.length; r2++) {
r6 = this.p[r2];
r7.transformPoint(r6, r3);
if (r3[2] < 0) {
return this.closer.draw(b, r7);
}
r5[r2] = [0, 0];
b.screenPoint(r3, r5[r2]);
}
} else {
for (r2 = 0; r2 < this.p.length; r2++) {
r6 = this.p[r2];
r7.transformPoint(r6, r3);
if (r3[2] < 0) {
return;
}
r5[r2] = [0, 0];
b.screenPoint(r3, r5[r2]);
}
}
this.drawFaces(b, r5);
};
MovieClip.prototype.set3DScreen = function(x, y, w, h, p) {
this.w = w;
this.h = h;
this.w2 = w / 2;
this.h2 = h / 2;
this._x = x - this.w2;
this._y = y - this.h2;
if (p == null) {
p = (w + h) / 4;
}
this.p = p;
};
MovieClip.prototype.screenPoint = function(s, d) {
var r3 = this.p;
d[0] = r3 * s[0] / s[2];
d[1] = -r3 * s[1] / s[2];
};
MovieClip.prototype.unScreenPoint = function(s, d) {
var r3 = this.p;
d[0] = s[0] * s[2] / r3;
d[1] = -s[1] * s[2] / r3;
d[2] = s[2];
};
MovieClip.prototype.onScreen = function(x, y) {
var r3 = this.w2;
var r2 = this.h2;
return !(x < -r3) && x < r3 && !(y < -r2) && y < r2;
};
MovieClip.prototype.showInfo = function(col) {
var r3 = this.w2;
var r2 = this.h2;
this.lineStyle(1, col);
this.moveTo(-r3, -r2);
this.lineTo(r3, -r2);
this.lineTo(r3, r2);
this.lineTo(-r3, r2);
this.lineTo(-r3, -r2);
};
Scene.prototype.count = 0;
Scene.prototype.addObject = function(obj, name) {
if (this.objects === 0) {
this.objects = new Array();
}
for (var r2 = 0; r2 < this.numObjects; r2++) {
if (this.objects[r2] === 0) {
this.objects[r2] = obj;
if (name !== undefined) {
this[name] = obj;
}
return obj;
}
}
this.objects[this.numObjects++] = obj;
if (name !== undefined) {
this[name] = obj;
}
return obj;
};
Scene.prototype.move = function(f, dt) {
var r3 = this.objects;
for (var r2 = 0; r2 < this.numObjects; r2++) {
if (r3[r2] !== 0) {
if (!r3[r2].trash && r3[r2].move) {
r3[r2].move(f, dt);
}
if (r3[r2].trash) {
r3[r2] = 0;
}
}
}
};
Scene.prototype.draw = function(b, tt) {
var r8;
var r2;
var r3;
var r7;
if (tt == 0) {
r7 = this.t;
} else {
r7 = tt.copy();
r7.combine(this.t);
}
var r6;
var r4 = new Array();
for (r3 = 0; r3 < this.numObjects; r3++) {
r6 = this.objects[r3];
if (r6 !== 0) {
r8 = [0, 0, 0];
r7.transformPoint(r6.t.p, r8);
if (r6.never_clip || r8[2] > 0.1) {
r2 = [0, 0];
b.ScreenPoint(r8, r2);
r6.sp = r2;
if (r6.never_clip || b.onScreen(r2[0], r2[1])) {
r8 = r8[0] * r8[0] + r8[1] * r8[1] + r8[2] * r8[2];
r6.sd = r8;
r6.di = 10000000 - r8;
r6.os = true;
r4.push({d: r6.di, s: sd, o: r6});
} else {
r6.os = false;
}
}
}
}
r4.sortOn("d");
for (r3 = 0; r3 < r4.length; r3++) {
r4[r3].o.draw(b, r7);
}
this.c = r4;
};
Box.prototype = new Mesh();
Box.prototype.count = 0;
Box.prototype.points = [[-1, -1, 1], [-1, -1, -1], [-1, 1, 1], [-1, 1, -1], [1, -1, 1], [1, -1, -1], [1, 1, 1], [1, 1, -1]];
Box.prototype.faces = [[2, 3, 7, 6], [6, 7, 5, 4], [2, 6, 4, 0], [1, 0, 4, 5], [3, 2, 0, 1], [3, 1, 5, 7]];
Line.prototype.count = 0;
Line.prototype.draw = function(b, tt) {
var r10;
if (tt === 0) {
r10 = this.t;
} else {
r10 = tt.copy();
r10.combine(this.t);
}
var r12;
var r3 = new Array();
var r2;
var r7 = [0, 0, 0];
var r13;
var r14;
var r9 = this.p[0];
var r8 = this.p[1];
var p;
for (r2 = 0; r2 <= 20; r2++) {
p = [r9[0] * (20 - r2) * 0.05 + r8[0] * r2 * 0.05, r9[1] * (20 - r2) * 0.05 + r8[1] * r2 * 0.05, r9[2] * (20 - r2) * 0.05 + r8[2] * r2 * 0.05];
r10.transformPoint(p, r7);
r3[r2] = [0, 0, 0, Math.round(1000 / r7[2])];
b.screenPoint(r7, r3[r2]);
r3[r2][2] = r7[2] > 20;
}
var r5;
var r4;
for (r2 = 0; r2 < 20; r2++) {
if (r3[r2][2] && r3[r2 + 1][2]) {
r5 = this.thi * r3[r2][3];
if (r5 < 1) {
r5 = 1;
}
if (r5 > 10) {
r5 = 10;
}
r4 = this.thi * r3[r2 + 1][3];
if (r4 < 1) {
r4 = 1;
}
if (r4 > 10) {
r4 = 10;
}
if (r5 > r4) {
b.lineStyle(r4, this.col, this.alp);
b.moveTo(r3[r2][0], r3[r2][1] + (r5 - r4) * 0.5);
b.lineTo(r3[r2 + 1][0], r3[r2 + 1][1]);
b.lineStyle(r4, this.col, this.alp);
b.lineTo(r3[r2][0], r3[r2][1] - (r5 - r4) * 0.5);
if (r4 >= 3 || r5 >= 3) {
b.moveTo(r3[r2][0], r3[r2][1]);
b.moveTo(r3[r2 + 1][0], r3[r2 + 1][1]);
}
} else {
b.lineStyle(r5, this.col, this.alp);
b.moveTo(r3[r2 + 1][0], r3[r2 + 1][1] - (r5 - r4) * 0.5);
b.lineTo(r3[r2][0], r3[r2][1]);
b.lineTo(r3[r2 + 1][0], r3[r2 + 1][1] + (r5 - r4) * 0.5);
}
}
}
};
var sMat = new flash.geom.Matrix();
var tMat = new flash.geom.Matrix();
aaaaa = 0;
Polygon.prototype.count = 0;
Polygon.prototype.addPoint = function(p) {
this.p[this.p.length] = p;
return this.p.length;
};
Polygon.prototype.setPoints = function(p) {
this.p = p;
};
Polygon.prototype.calcRadius = function() {
var r7 = 0;
var r8 = this.p.length;
var r3;
var p;
var r6;
var r5;
var r4;
for (var r2 = 0; r2 < r8; r2++) {
p = this.p[r2];
r6 = p[0];
r5 = p[1];
r4 = p[2];
r3 = Math.sqrt(r6 * r6 + r5 * r5 + r4 * r4);
if (r3 > r7) {
r7 = r3;
}
}
this.r = r7;
};
Polygon.prototype.plotScreenPoint = function(p, col) {
var r2 = [0, 0];
this.screenPoint(p, r2);
this.plotPoint(r2, col);
};
Polygon.prototype.plotPoint = function(b, d, col) {
b.lineStyle(20, col);
b.moveTo(d[0] - 1, d[1] - 1);
b.lineTo(d[0] + 1, d[1] + 1);
};
Polygon.prototype.move = function(f, dt) {
var r3 = new Transform();
r3.setRotation(this.dr[0], this.dr[1], this.dr[2], this.dr[3] * dt);
this.t.combine(r3);
this.t.p[0] += this.dp[0] * dt;
this.t.p[1] += this.dp[1] * dt;
this.t.p[2] += this.dp[2] * dt;
this.dp[0] *= 0.99;
this.dp[1] -= dt * 29.8;
this.dp[2] *= 0.99;
};
Polygon.prototype.draw = function(b, tt) {
if (this.r == 0) {
this.calcRadius();
}
var r17;
if (tt === 0) {
r17 = this.t;
} else {
r17 = tt.copy();
r17.combine(this.t);
}
var r5;
var r3 = new Array();
var r4 = new Array();
var r2;
var r7 = this.sbuf.light;
c = [0, 0, 0];
var r19;
var r8;
for (r2 = 0; r2 < this.p.length; r2++) {
r5 = this.p[r2];
r17.transformPoint(r5, c);
if (c[2] < 0) {
return;
}
r3[r2] = [0, 0];
b.screenPoint(c, r3[r2]);
this.t.transformPoint(r5, c);
r8 = -c[2] / (r7[2] - c[2]);
r5 = [c[0] + r8 * (r7[0] - c[0]), c[1] + r8 * (r7[1] - c[1]), 0];
tt.transformPoint(r5, c);
r4[r2] = [0, 0];
b.screenPoint(c, r4[r2]);
}
ax = r3[1][0] - r3[0][0];
ay = r3[1][1] - r3[0][1];
bx = r3[1][0] - r3[2][0];
by = r3[1][1] - r3[2][1];
b.lineStyle();
var r12 = r3.length - 1;
for (r2 = 2; r2 < r3.length; r2++) {
var r11 = {sx: r3[0][0], sy: r3[0][1], u: this.p[0][3], v: this.p[0][4]};
var r10 = {sx: r3[r2 - 1][0], sy: r3[r2 - 1][1], u: this.p[r2 - 1][3], v: this.p[r2 - 1][4]};
var r9 = {sx: r3[r2][0], sy: r3[r2][1], u: this.p[r2][3], v: this.p[r2][4]};
drawTri(b, [r11, r10, r9], this.tex);
}
if (ax * by >= ay * bx) {
} else {
b.moveTo(r3[r12][0], r3[r12][1]);
b.beginFill(14540253, 90);
r2 = 0;
while (I < r3.length) {
b.lineTo(r3[r2][0], r3[r2][1]);
r2++;
}
b.lineTo(r3[o][0], r3[o][1]);
b.endFill();
}
ax = r4[1][0] - r4[0][0];
ay = r4[1][1] - r4[0][1];
bx = r4[1][0] - r4[2][0];
by = r4[1][1] - r4[2][1];
if (ax * by >= ay * bx) {
this.sbuf.moveTo(r4[r12][0], r4[r12][1]);
this.sbuf.beginFill(0, 10);
for (r2 = 0; r2 < r4.length - 1; r2++) {
this.sbuf.lineTo(r4[r2][0], r4[r2][1]);
}
this.sbuf.endFill();
} else {
this.sbuf.moveTo(r4[r12][0], r4[r12][1]);
this.sbuf.beginFill(0, 10);
for (r2 = r12 - 1; r2 >= 0; r2--) {
this.sbuf.lineTo(r4[r2][0], r4[r2][1]);
}
this.sbuf.endFill();
}
};
HolePolygon.prototype.count = 0;
HolePolygon.prototype.addPoint = function(p) {
this.p[this.p.length] = p;
return this.p.length;
};
HolePolygon.prototype.setPoints = function(p) {
this.p = p;
};
HolePolygon.prototype.calcRadius = function() {
var r7 = 0;
var r8 = this.p.length;
var r3;
var p;
var r6;
var r5;
var r4;
for (var r2 = 0; r2 < r8; r2++) {
p = this.p[r2];
r6 = p[0];
r5 = p[1];
r4 = p[2];
r3 = Math.sqrt(r6 * r6 + r5 * r5 + r4 * r4);
if (r3 > r7) {
r7 = r3;
}
}
this.r = r7;
};
HolePolygon.prototype.plotScreenPoint = function(p, col) {
var r2 = [0, 0];
this.screenPoint(p, r2);
this.plotPoint(r2, col);
};
HolePolygon.prototype.plotPoint = function(b, d, col) {
b.lineStyle(20, col);
b.moveTo(d[0] - 1, d[1] - 1);
b.lineTo(d[0] + 1, d[1] + 1);
};
HolePolygon.prototype.draw = function(b, tt) {
if (this.r == 0) {
this.calcRadius();
}
var r6;
if (tt === 0) {
r6 = this.t;
} else {
r6 = tt.copy();
r6.combine(this.t);
}
var r5;
var r3 = new Array();
var r8 = new Array();
var r2;
var r10 = this.sbuf.light;
c = [0, 0, 0];
var r11;
var r12;
for (r2 = 0; r2 < this.p.length; r2++) {
r5 = this.p[r2];
r6.transformPoint(r5, c);
if (c[2] < 0) {
return;
}
r3[r2] = [0, 0];
b.screenPoint(c, r3[r2]);
}
b.lineStyle(1, 0, 100);
var r7 = r3.length - 1;
b.moveTo(r3[r7][0], r3[r7][1]);
b.beginFill(0, 100);
for (r2 = 0; r2 < r3.length; r2++) {
b.lineTo(r3[r2][0], r3[r2][1]);
}
b.endFill();
};
NavCube.prototype.onRollOver = function() {
this.trad = 35;
this.over = true;
};
NavCube.prototype.onRollOut = function() {
this.trad = 30;
this.over = false;
};
NavCube.prototype.onPress = function() {};
NavCube.prototype.onRelease = function() {};
NavCube.prototype.points = [[-1, -1, 1], [-1, -1, -1], [-1, 1, 1], [-1, 1, -1], [1, -1, 1], [1, -1, -1], [1, 1, 1], [1, 1, -1]];
NavCube.prototype.f = [[2, 3, 7, 6, 0.5], [6, 7, 5, 4, 0.5], [2, 6, 4, 0, 0.5], [1, 0, 4, 5, 0.9], [3, 2, 0, 1, 0.8], [3, 1, 5, 7, 1.1]];
NavCube.prototype.n = [[0, 1, 0], [1, 0, 0], [0, 0, 1], [0, -1, 0], [-1, 0, 0], [0, 0, -1]];
NavCube.prototype.move = function(f, dt) {
var r3 = this.trad - this.rad;
var r4;
this.rv += r3 * 0.1;
this.rv *= 0.85;
this.rad += this.rv;
var r2;
f = [0, 0, 0];
for (r2 = 0; r2 < 2; r2++) {
var r5 = this.cs[r2].t.p;
var r8 = r5[0] - this.t.p[0];
var r7 = r5[1] - this.t.p[1];
var r6 = r5[2] - this.t.p[2];
r3 = Math.sqrt(r8 * r8 + r7 * r7 + r6 * r6);
r4 = this.rad + this.cs[r2].rad * (1 + (this.cs[r2].rad - 30) * 0.04632199) + 40;
if (r3 < r4) {
r4 -= r3;
f[0] += 0.1 * r4 * r8 / r3;
f[1] += 0.1 * r4 * r7 / r3;
f[2] += 0.1 * r4 * r6 / r3;
}
}
for (r2 = 0; r2 < 3; r2++) {
r3 = this.tp[r2] - this.t.p[r2];
if (r2 == 2 && this.over) {
r3 -= 40;
}
this.tpv[r2] += r3 * 0.1;
this.tpv[r2] -= f[r2];
this.tpv[r2] *= 0.75;
this.t.p[r2] += this.tpv[r2];
}
};
NavCube.prototype.drawFaces = function(b, g, sh) {
var r5;
var r9;
var r3;
var r2;
r5 = 10 + (this.rad - 30) * 8.378268;
if (r5 < 10) {
r5 = 10;
}
b.lineStyle(1, 0, r5);
var r12;
var r8;
var r11;
var r16;
var r14;
var r15;
var r13;
for (r3 = 0; r3 < 6; r3++) {
b.m[r3].clear();
b.f[r3].clear();
r12 = this.f[r3][0];
r8 = this.f[r3][1];
r11 = this.f[r3][2];
r16 = g[r8][0] - g[r12][0];
r14 = g[r8][1] - g[r12][1];
r15 = g[r8][0] - g[r11][0];
r13 = g[r8][1] - g[r11][1];
if (this.v[r3] = !(r16 * r13 < r14 * r15)) {
r5 = this.f[r3];
r9 = r5[3];
b.f[r3].moveTo(g[r9][0], g[r9][1]);
b.moveTo(g[r9][0], g[r9][1]);
if (this.t.p[2] > -10) {
var r10 = this.fc[r3];
var f = 90 - this.t.p[2] * 0.5;
if (f < 50) {
f = 50;
}
f *= 0.01;
r10 = 65536 * Math.floor((r10 >> 16) * f) + 256 * Math.floor((r10 >> 8 & 255) * f) + Math.floor((r10 & 255) * f);
b.beginFill(r10);
} else {
b.beginFill(this.fc[r3]);
}
b.f[r3].beginFill(8355711 & this.col >> 1, 100);
for (r2 = 0; r2 < 4; r2++) {
b.f[r3].lineTo(g[r5[r2]][0], g[r5[r2]][1]);
b.lineTo(g[r5[r2]][0], g[r5[r2]][1]);
}
b.f[r3].endFill();
b.endFill();
}
}
if (this.sha) {
for (r3 = 0; r3 < 6; r3++) {
r5 = this.f[r3];
r9 = r5[3];
this.sb.moveTo(sh[r9][0], sh[r9][1]);
this.sb.beginFill(0, 100);
r12 = this.f[r3][0];
r8 = this.f[r3][1];
r11 = this.f[r3][2];
r16 = sh[r8][0] - sh[r12][0];
r14 = sh[r8][1] - sh[r12][1];
r15 = sh[r8][0] - sh[r11][0];
r13 = sh[r8][1] - sh[r11][1];
if (r16 * r13 >= r14 * r15) {
for (r2 = 0; r2 < 3; r2++) {
this.sb.lineTo(sh[r5[r2]][0], sh[r5[r2]][1]);
}
}
this.sb.endFill();
}
}
};
NavCube.prototype.draw = function(b, tt) {
this.b = b;
var r12;
if (tt === 0) {
r12 = this.t;
} else {
r12 = tt.copy();
r12.combine(this.t);
}
this.tt = r12;
var r5;
var r4 = new Array();
var r11 = new Array();
var r2;
var r10 = this.sb.light;
c = [0, 0, 0];
var r8 = this.rad;
for (r2 = 0; r2 < 8; r2++) {
r5 = [this.p[r2][0] * r8, this.p[r2][1] * r8, this.p[r2][2] * r8];
r12.transformPoint(r5, this.trp[r2]);
r4[r2] = [0, 0];
b.screenPoint(this.trp[r2], r4[r2]);
this.scp[r2] = [r4[r2][0], r4[r2][1]];
this.t.transformPoint(r5, c);
f = -c[2] / (r10[2] - c[2]);
r5 = [c[0] + f * (r10[0] - c[0]), c[1] + f * (r10[1] - c[1]), 0];
tt.transformPoint(r5, c);
r11[r2] = [0, 0];
b.screenPoint(c, r11[r2]);
}
r5 = 85 + (r8 - 30) * 1.777;
if (r5 > 90) {
r5 = 90;
}
b._alpha = r5;
if (r8 > 32) {
var r9;
for (r9 = 0; r9 < 2; r9++) {
b.lineStyle((8 - 4 * r9) * (1 + (r8 - 32) * 0.1111), 16777215 * (1 - r9), (r8 - 32) * 25);
var r3;
var r7;
for (r2 = 0; r2 < 6; r2++) {
r5 = this.f[r2];
r7 = r5[3];
b.moveTo(r4[r7][0], r4[r7][1]);
for (r3 = 0; r3 < 4; r3++) {
b.lineTo(r4[r5[r3]][0], r4[r5[r3]][1]);
}
}
}
}
this.drawFaces(b, r4, r11);
};
NavCube.prototype.drawFace = function(i, b, c, g) {
var r2;
var r3 = this.f[i];
b.moveTo(g[r3[3]][0], g[r3[3]][1]);
b.beginFill(c);
for (r2 = 0; r2 < 4; r2++) {
b.lineTo(g[r3[r2]][0], g[r3[r2]][1]);
}
b.endFill();
};
NavCube.prototype.drawFaceIfFacing = function(i, b, c, g) {
var r5 = this.f[i][0];
var r3 = this.f[i][1];
var r4 = this.f[i][2];
var r10 = g[r3][0] - g[r5][0];
var r8 = g[r3][1] - g[r5][1];
var r9 = g[r3][0] - g[r4][0];
var r7 = g[r3][1] - g[r4][1];
if (r10 * r7 >= r8 * r9) {
this.drawFace(i, b, c, g);
}
};
NavCube.prototype.drawShadow = function(b, c, l, p, n) {
var r2 = [];
for (j = 0; j < 8; j++) {
r2[j] = [0, 0, 0];
vector_projectToPlane(l, this.trp[j], p, n, r2[j]);
this.b.screenPoint(r2[j], r2[j]);
}
for (j = 0; j < 6; j++) {
this.drawFaceIfFacing(j, b, c, r2);
}
};
CubeScene.prototype = new Scene();
CubeScene.prototype.move = function(f, dt) {
this.time += dt;
var r6 = this.time;
var r17 = [[0, 100], [0, 0], [0, -100], [-100, -100], [-100, -100], [-100, -100], [-100, -100]];
var r16 = [[0, 200], [0, 100], [0, 0], [0, -100], [100, -100], [100, -100], [100, -100], [100, -100]];
var r15 = [[0, 300], [0, 200], [0, 100], [0, 0], [0, -100], [0, -100], [0, -100], [0, -100]];
var r5 = [r17, r16, r15];
var r3;
var r9;
var r7;
var r8;
var r10;
var r13;
var r12;
var r11;
for (r3 = 0; r3 < 3; r3++) {
r6 = this.time - r3 * 0.25;
var r4 = Math.floor(r6);
var r2 = r6 - r4;
if (r4 > r5[r3].length - 3) {
r4 = r5[r3].length - 3;
}
if (r4 < 0) {
r4 = 0;
}
r9 = r5[r3][r4][0] * -r2 + r5[r3][r4 + 1][0] * (r2 + 1);
r7 = r5[r3][r4][1] * -r2 + r5[r3][r4 + 1][1] * (r2 + 1);
r8 = r5[r3][r4 + 1][0] * (1 - r2) + r5[r3][r4 + 2][0] * r2;
r10 = r5[r3][r4 + 1][1] * (1 - r2) + r5[r3][r4 + 2][1] * r2;
r13 = 0;
r12 = 0;
r11 = 0;
this.objects[r3].tp = [r13 + r9 * (1 - r2) + r8 * r2, r12, r11 + r7 * (1 - r2) + r10 * r2 + 30];
if (this.first) {
this.objects[r3].t.p = [r9 * (1 - r2) + r8 * r2, 0, r7 * (1 - r2) + r10 * r2 + 30];
}
}
this.first = false;
this.cube1.move(f, dt);
this.cube2.move(f, dt);
this.cube3.move(f, dt);
};
CubeScene.prototype.draw = function(b, tt) {
ori.transformPoint([-sbuf.light[0], -sbuf.light[1], sbuf.light[2]], sbuf.tl);
var r22;
var r18;
var r12;
var r19;
if (tt == 0) {
r19 = this.t;
} else {
r19 = tt.copy();
r19.combine(this.t);
}
var r24;
var r17 = new Array();
for (r12 = 0; r12 < this.numObjects; r12++) {
r24 = this.objects[r12];
r22 = [0, 0, 0];
r19.transformPoint(r24.t.p, r22);
r18 = [1, 0];
b.screenPoint(r22, r18);
r24.sp = r18;
r24.sha = r24.t.p[2] < -30;
r22 = r22[0] * r22[0] + r22[1] * r22[1] + r22[2] * r22[2];
r17.push({d: 10000000 - r22, s: sd, o: r24, index: r12});
}
r17.sortOn("d");
for (r12 = 0; r12 < 3; r12++) {
this.bufs[r12].clear();
r17[r12].o.draw(this.bufs[r12], r19);
this.bufs[r12].cube = r17[r12].o;
}
var r5 = [0, 0, 0];
var r7 = buf.tl;
if (this.cube2.v[5]) {
this.cube2.tt.transformNormal(this.cube2.n[5], r5);
this.cube1.drawShadow(this.cube2.b.m[5], this.cube2.col >> 1 & 8355711, r7, this.cube2.trp[this.cube2.f[5][0]], r5);
}
if (this.cube3.v[5]) {
this.cube3.tt.transformNormal(this.cube3.n[5], r5);
this.cube2.drawShadow(this.cube3.b.m[5], this.cube3.col >> 1 & 8355711, r7, this.cube3.trp[this.cube3.f[5][0]], r5);
}
if (this.cube3.v[4]) {
this.cube3.tt.transformNormal(this.cube3.n[4], r5);
this.cube2.drawShadow(this.cube3.b.m[4], this.cube3.col >> 1 & 8355711, r7, this.cube3.trp[this.cube3.f[4][0]], r5);
}
if (this.cube1.v[4]) {
this.cube1.tt.transformNormal(this.cube1.n[4], r5);
this.cube2.drawShadow(this.cube1.b.m[4], this.cube1.col >> 1 & 8355711, r7, this.cube1.trp[this.cube1.f[4][0]], r5);
this.cube3.drawShadow(this.cube1.b.m[4], this.cube1.col >> 1 & 8355711, r7, this.cube1.trp[this.cube1.f[4][0]], r5);
}
if (this.cube1.v[5]) {
this.cube1.tt.transformNormal(this.cube1.n[5], r5);
this.cube3.drawShadow(this.cube1.b.m[5], this.cube1.col >> 1 & 8355711, r7, this.cube1.trp[this.cube1.f[5][0]], r5);
}
if (_parent.testwindow._visible) {
var r14 = getWindowPoints();
var r16 = r14[0];
var r21 = [0, 0, r16];
var r20 = [0, 0, -1];
var r3 = [0, 0, 0];
for (var r15 = 0; r15 < 3; r15++) {
cu = this.cu[r15];
var r11 = 99999;
var r9 = 99999;
var r10 = -99999;
var r8 = -99999;
for (r12 = 0; r12 < 8; r12++) {
vector_projectToPlane(r7, cu.trp[r12], r21, r20, r3);
if (r3[0] < r11) {
r11 = r3[0];
}
if (r3[0] > r10) {
r10 = r3[0];
}
if (r3[1] < r9) {
r9 = r3[1];
}
if (r3[1] > r8) {
r8 = r3[1];
}
}
if (r11 < r14[1]) {
r11 = r14[1];
}
if (r9 < r14[2]) {
r9 = r14[2];
}
if (r10 > r14[3]) {
r10 = r14[3];
}
if (r8 > r14[4]) {
r8 = r14[4];
}
if (r11 < r10 && r9 < r8) {
var r13 = [[r11, r9, r16], [r10, r9, r16], [r10, r8, r16], [r11, r8, r16]];
for (var r4 = 0; r4 < 6; r4++) {
if (cu.v[r4] && cu.f[r4][4] > 0.5) {
var r6 = cu.trp[cu.f[r4][0]];
cu.tt.transformNormal(cu.n[r4], r5);
cu.b.m[r4].setLineStyle(0, 0, 0);
vector_projectToPlane(r7, r13[0], r6, r5, r3);
cu.b.screenPoint(r3, r3);
cu.b.m[r4].moveTo(r3[0], r3[1]);
cu.b.m[r4].beginFill(0, 50);
vector_projectToPlane(r7, r13[1], r6, r5, r3);
cu.b.screenPoint(r3, r3);
cu.b.m[r4].lineTo(r3[0], r3[1]);
vector_projectToPlane(r7, r13[2], r6, r5, r3);
cu.b.screenPoint(r3, r3);
cu.b.m[r4].lineTo(r3[0], r3[1]);
vector_projectToPlane(r7, r13[3], r6, r5, r3);
cu.b.screenPoint(r3, r3);
cu.b.m[r4].lineTo(r3[0], r3[1]);
cu.b.m[r4].endFill();
}
}
}
}
}
};
Plane.prototype.count = 0;
Plane.prototype.draw = function(b, tt) {
if (this.r == 0) {
this.calcRadius();
}
var r13;
if (tt === 0) {
r13 = this.t;
} else {
r13 = tt.copy();
r13.combine(this.t);
}
var r18;
var r4 = new Array();
var r3;
c = [0, 0, 0];
for (r3 = 0; r3 < this.p.length; r3++) {
r13.transformPoint(this.p[r3], c);
r4[r3] = [0, 0];
b.screenPoint(c, r4[r3]);
}
b.lineStyle();
var r14 = this.f;
var p = this.p;
var r15 = r14.length;
var r2;
var r17;
var r8;
var r7;
var r6;
for (r3 = 0; r3 < r15; r3++) {
r2 = r14[r3];
r8 = {sx: r4[r2[0]][0], sy: r4[r2[0]][1], u: p[r2[0]][3], v: p[r2[0]][4]};
r7 = {sx: r4[r2[1]][0], sy: r4[r2[1]][1], u: p[r2[1]][3], v: p[r2[1]][4]};
r6 = {sx: r4[r2[2]][0], sy: r4[r2[2]][1], u: p[r2[2]][3], v: p[r2[2]][4]};
drawTri(b, [r8, r7, r6], this.tex);
}
};
createEmptyMovieClip("debug", 2000);
debug._yscale = -100;
createEmptyMovieClip("hbuf", 150);
hbuf.set3DScreen(0, 0, 480, 360, cam_dist);
hbuf._yscale = -100;
hbuf._x = 0;
hbuf._y = 0;
createEmptyMovieClip("buf", 1000);
buf.set3DScreen(0, 0, 480, 360, cam_dist);
buf._yscale = -100;
buf._x = 0;
buf._y = 0;
createEmptyMovieClip("sbuf", 100);
sbuf._yscale = -100;
sbuf._x = 0;
sbuf._y = 0;
sbuf.light = [400, 300, -500];
sbuf.tl = [0, 0, 0];
buf.light = sbuf.light;
buf.tl = sbuf.tl;
createEmptyMovieClip("shad", 200);
shad.moveTo(-1000, -1000);
shad.beginFill(0, 100);
shad.lineTo(1000, -1000);
shad.lineTo(1000, 1000);
shad.lineTo(-1000, 1000);
shad.endFill();
shad.setMask(sbuf);
shad._alpha = 30;
ori = new Transform();
ori.setPosition(0, 0, cam_dist);
buf.clear();
scene.draw(buf, ori);
hscene.draw(hbuf, ori);
createEmptyMovieClip("cbuf1", 501);
createEmptyMovieClip("cbuf2", 502);
createEmptyMovieClip("cbuf3", 503);
cbuf1.set3DScreen(0, 0, 480, 360, cam_dist);
cbuf2.set3DScreen(0, 0, 480, 360, cam_dist);
cbuf3.set3DScreen(0, 0, 480, 360, cam_dist);
cbuf1._yscale = -100;
cbuf1._x = cbuf1._y = 0;
cbuf2._yscale = -100;
cbuf2._x = cbuf2._y = 0;
cbuf3._yscale = -100;
cbuf3._x = cbuf3._y = 0;
cbuf1.f = new Array();
cbuf2.f = new Array();
cbuf3.f = new Array();
cbuf1.m = new Array();
cbuf2.m = new Array();
cbuf3.m = new Array();
for (var j = 1; j <= 3; j++) {
var cn = "cbuf" + j;
var cb = eval(cn);
for (i = 0; i < 6; i++) {
cb.createEmptyMovieClip("sm" + i, 2000 + i);
cb.createEmptyMovieClip("sf" + i, 1000 + i);
cb.m[i] = eval(cn + ".sm" + i);
cb.f[i] = eval(cn + ".sf" + i);
cb.f[i].setMask(cb.m[i]);
}
cb.onRollOver = function() {
this.cube.onRollOver();
};
cb.onRollOut = function() {
this.cube.onRollOut();
};
cb.onPress = function() {
this.cube.onPress();
};
cb.onRelease = cbuf3.onReleaseOutside = function() {
this.cube.onRelease();
};
}
reset();
clicked = false;
current_win = 0;
window_z = 160;
frame = 0;
onEnterFrame = function() {
if (clicked) {
clicked = false;
reset();
}
var r9 = time;
time = getTimer() * 0.001 - time_start;
var r4 = time - r9;
var r7 = _xmouse;
var r6 = _ymouse;
var r10 = Math.sqrt(r7 * r7 + r6 * r6);
buf.clear();
sbuf.clear();
redraw_hole = false;
var r3 = 1.753462 * (overlay.overlay_bottom.mini.eye._x - 50.5) / 101;
var r2 = 1.2891191822 * (overlay.overlay_bottom.mini.eye._y - 28.5) / 57;
var r5 = Math.sqrt(r3 * r3 + r2 * r2) * 0.371268761982;
if (time > 1.5 && time < 9) {
var r8 = (time - 1.5) / 7.5;
ori.setRotation(-r2, r3, 0, (0.5 - 0.5 * Math.cos(r8 * 3.14159)) * r5);
redraw_hole = true;
} else if (time >= 9 && (lex != r3 || ley != r2)) {
if (r5 == 0) {
ori.setRotation(1.1786218762, 7.172619, 0, 0);
} else {
ori.setRotation(-r2, r3, 0, r5);
}
last_redraw_hole = true;
}
lex = r3;
ley = r2;
if (time < 1) {
last_redraw_hole = true;
cracked = false;
bump1flag = false;
bump2flag = false;
} else if (!cracked) {
ori.setPosition(0, 0, cam_dist);
hbuf.clear();
t = new flash.geom.Matrix();
t.scale(tex_scale, tex_scale);
t.tx = tex_scale * 500 / 2;
t.ty = tex_scale * 180 / 2;
t.b = -t.b;
t.d = -t.d;
hscene.draw(hbuf, ori);
hole_tex.draw(hbuf, t);
ori.setPosition(0, 0, cam_dist - 8 * bump(time, 1.05, 0.1));
scene.move(f, 0.025);
hbuf.clear();
hbuf._visible = true;
bgscene.draw(hbuf, ori);
lscene.draw(hbuf, ori);
scene.draw(buf, ori);
cracked = true;
} else if (time < 2) {
if (time > 1.05 && !bump1flag) {
ori.setPosition(0, 0, cam_dist - 8);
bump1flag = true;
} else {
ori.setPosition(0, 0, cam_dist - 8 * bump(time, 1.05, 0.1) - 15 * bump(time, 2.05, 0.1));
}
hbuf.clear();
bgscene.draw(hbuf, ori);
lscene.draw(hbuf, ori);
scene.draw(buf, ori);
} else if (time < 6) {
if (time > 2.05 && !bump2flag) {
ori.setPosition(0, 0, cam_dist - 15);
bump2flag = true;
} else if (time < 2.05) {
ori.setPosition(0, 0, cam_dist - 15 * bump(time, 2.05, 0.1));
} else {
ori.setPosition(0, 0, cam_dist - 15 * bump(time, 2.05, 0.1));
}
hbuf.clear();
bgscene.draw(hbuf, ori);
lscene.draw(hbuf, ori);
scene.move(frame, r4);
scene.draw(buf, ori);
cube_scene.move(frame, r4);
cube_scene.draw(buf, ori);
window_test = 0;
} else if (time < 100000) {
if (overlay_make_visible) {
overlay._visible = true;
overlay_make_visible = false;
}
if (time < 7.333) {
overlay._alpha = 100 * (time - 6) / 1.333;
overlay_final_visible = true;
} else if (overlay_final_visible) {
overlay._alpha = 100;
overlay_final_visible = false;
}
cube_scene.allow_mouseover = true;
if (redraw_hole || last_redraw_hole) {
hbuf.clear();
bgscene.draw(hbuf, ori);
lscene.draw(hbuf, ori);
last_redraw_hole = redraw_hole;
}
cube_scene.move(frame, r4);
cube_scene.draw(buf, ori);
frozen = false;
} else {
t = new flash.geom.Matrix();
t.scale(1, -1);
t.translate(400, 200);
if (!frozen) {
bscen.draw(hbuf, t);
bscen.draw(cbuf1, t);
bscen.draw(cbuf2, t);
bscen.draw(cbuf3, t);
hbuf._visible = false;
cbuf1._visible = false;
cbuf2._visible = false;
cbuf3._visible = false;
frozen = true;
bitmappedversion.attachBitmap(bscrn, 1);
bitmappedversion._visible = true;
}
hbuf.clear();
hbuf.moveTo(Math.random() * 800 - 400, Math.random() * 400 - 200);
hbuf.beginFill(0, 100);
hbuf.lineTo(Math.random() * 800 - 400, Math.random() * 400 - 200);
hbuf.lineTo(Math.random() * 800 - 400, Math.random() * 400 - 200);
hbuf.endFill();
hbuf.moveTo(Math.random() * 800 - 400, Math.random() * 400 - 200);
hbuf.beginFill(13421772, 100);
hbuf.lineTo(Math.random() * 800 - 400, Math.random() * 400 - 200);
hbuf.lineTo(Math.random() * 800 - 400, Math.random() * 400 - 200);
hbuf.endFill();
bshad.fillRect(bshad.rectangle, 4294967295);
bshad.draw(hbuf, t);
bscrn.draw(bscen);
bscrn.draw(bshad, new flash.geom.Matrix(), new flash.geom.ColorTransform(), "multiply");
}
_parent.logo_bg._xscale = _parent.logo_bg._yscale = 100 * cam_dist / ori.p[2];
frame++;
if (show_window) {
if (show_window == 1) {
win.showWindow(400, 360, "window_contact", "Contact CubeLogix", _xmouse, _ymouse);
} else if (show_window == 2) {
win.showWindow(427, 249, "window_services", "IT Project Outsourcing Services", _xmouse, _ymouse);
} else if (show_window == 3) {
win.showWindow(555, 275, "window_case", "Client case studies", _xmouse, _ymouse);
}
show_window = 0;
}
if (win._visible) {
drawWindowShadow();
}
if (win.onEnterFrameCallback) {
win.onEnterFrameCallback();
drawWindowTransparent();
}
};