Dankness
2006-04-20 18:57:50
This is Entirely written by Pplsuqbawlz i just found it very intersting so check it out.
{.Script Info:
# ScriptName = cube
# Author = pplsuqbawlz
# Description = 3d-spinning cube and/or 3d-engine in scar.
# Version = 1.0
# Date = 4/17/06
# Comments = Fun to play with.
/Script Info}
program cube;
const
// CONFIG
size = 128;
rate = 2;
foreColor = 0;
backColor = 14933725;
degree = 90;
//RECCOMENDED THAT YOU DO NOT EDIT BELOW
width = 3*size+14;
height = 3*size + 14;
pi = 3.14159265;
diameter = size * 2 + 1;
halfsize = size / 2;
diahalf = diameter + halfsize;
circumfrence = (diameter * pi);
increment = degree / circumfrence;
frames = (degree / (increment * rate));
var
coordX, coordY: Array[1..4] of Integer;
fullrender, framesize, count: Integer;
mainCanvas: TCanvas;
i: Extended;
function draw:Integer;
var canvas : TCanvas;
idx, adj, img: integer;
begin
img := BitmapFromString(diameter,diameter,'');
canvas := getBitmapCanvas(img);
canvas.Brush.Style:= bsSolid;
canvas.Brush.Color:= backColor;
canvas.Pen.Color := backColor;
canvas.Rectangle(0, 0, diameter, diameter);
canvas.Pen.Style := psSolid;
canvas.Pen.Color := foreColor;
for idx := 1 to 4 do
begin
adj := (idx mod 4) + 1;
canvas.moveTo(coordX[idx], coordY[idx]); // VERT
canvas.lineTo(coordX[idx], coordY[idx] + size); // VERT
canvas.moveTo(coordX[idx], coordY[idx]); // TOP
canvas.lineTo(coordX[adj], coordY[adj]); // TOP
canvas.moveTo(coordX[idx], coordY[idx] + size); // BOTTOM
canvas.lineTo(coordX[adj], coordY[adj] + size); // BOTTOM
end;
result:=img;
end;
procedure render;
var idx,deg,x,y: Integer;
theta: Extended;
begin
if(i < 360)then
begin
i := i + (increment * rate);
for idx := 1 to 4 do
begin
deg := (round(i + (idx * 90)) mod 360);
theta := ((deg * pi) / 180);
x := round(Cos( theta ) * size) + size;
y := round((Sin( theta ) * size) / 2) + halfsize;
coordX[idx] := x;
coordY[idx] := y;
end;
end else i:= 0;
end;
procedure debug;
var dbg : TCanvas;
begin
DisplayDebugImgWindow(width, height);
dbg := GetDebugCanvas;
dbg.Brush.Style:= bsSolid;
dbg.Brush.Color:= 8421504;
dbg.Rectangle(-1, -1, width+1, height+1);
dbg.Brush.Color:= backColor;
dbg.Pen.Color := 0;
dbg.Rectangle(5, 5, width-5, height-5);
dbg.Pen.Color:= 16777215;
dbg.Rectangle(6, 6, width-6, height-6);
end;
begin
framesize:= round(frames)*diameter;
fullrender := BitmapFromString(framesize,diameter,'');
mainCanvas := getBitmapCanvas(fullrender);
count:=0;
debug;
repeat
render;
CopyCanvas(GetBitmapCanvas(draw), mainCanvas, 0, 0, diameter, diameter, (count*diameter), 0, ((count+1)*diameter), diameter);
count:=count+1;
until(i > degree);
count:= 0;
i:= 0;
repeat
i:= i + (increment * rate);
if(i > degree) then i:= i - degree;
count := round(i/increment) mod round(frames);
CopyCanvas(mainCanvas, GetDebugCanvas, (count*diameter), 0, ((count+1)*diameter), diameter, 7 + halfsize, 7+halfsize,diahalf+7,diameter+7+halfsize);
wait(0);
until(false)
end.