;#################################################
;# #
;# Budun*Script -> One to rule them all #
;# Gravity is a part of the Budun Script #
;# Copyright (c) 1998-? by Budun #
;# #
;#################################################
alias Gravity {
window -c @3D | window -aCdk0p +tl @3D 0 0 400 400
drawrect -rf @3D 0 1 0 0 400 400 | titlebar @3D gravity by Budun
set %Xa 0 | set %Ya = 0 | buildCoord | initJumper | set %fps.count 0 | .timerfps 1 1 FPS
}
alias -l FPS { set %FPS %fps.count | set %fps.count 0 | if ($window(@3D)) { .timerfps 1 1 FPS } }
alias -l convCoords {
var %w = 400, %h = 400
if ($prop == x) return $round($calc(%w / 2 + $1),0)
if ($prop == y) return $round($calc(%h / 2 + $1),0)
}
alias -l buildCoord {
if ($window(@3D)) {
drawrect -rf @3D 0 1 0 0 400 400
drawtext -r @3D $rgb(255,255,255) Tahoma 11 3 3 %FPS $+ fps
} | Jumper
var %Coord.Length = 7, %Lines.Length = 11, %i = 0
set %Xa $calc(%Xa + ($mouse.y - 200)/4000) | set %Ya $calc(%Ya + ($mouse.x - 200)/1000)
var %Point.x = %jmp.x, %Point.y = %jmp.y, %Point.z = %jmp.z
var %cosXangle = $cos(%Xa), %cosYangle = $cos(%Ya), %sinXangle = $sin(%Xa), %sinYangle = $sin(%Ya)
var %tempz = $calc((%Point.z * %cosYangle)-(%point.x * %sinYangle)), %tmpx = $calc((%Point.z * %sinYangle)+(%point.x * %cosYangle))
var %tmpz = $calc((%Point.y * %sinXangle)+(%tempz * %cosXangle)), %tmpy = $calc((%Point.y * %cosXangle)-(%tempz * %sinXangle))
var %point.mx = %tmpx, %point.my = %tmpy, %point.mz = %tmpz | var %eye = 200, %point.mz = $calc(%point.mz + 125)
var %pers = $calc(%eye / %point.mz) | var %f.X = $calc(%point.mx * %pers), %f.Y = $calc(%point.my * %pers)
var %scale = $round($calc((%pers * 66) /28),0) | if ($window(@3D)) { drawdot -r @3D $rgb(255,0,0) %scale $convCoords(%f.X).x $convCoords(%f.Y).y }
var %jmp.hit = $iif(%jmp.y < -43,true,false) | while (%i <= %Coord.Length) {
var %Point.x = $readini(gravitycube.ini,c $+ %i,x), %Point.y = $readini(gravitycube.ini,c $+ %i,y), %Point.z = $readini(gravitycube.ini,c $+ %i,z)
var %cosXangle = $cos(%Xa), %cosYangle = $cos(%Ya), %sinXangle = $sin(%Xa), %sinYangle = $sin(%Ya)
var %tempz = $calc((%Point.z * %cosYangle)-(%point.x * %sinYangle)), %tmpx = $calc((%Point.z * %sinYangle)+(%point.x * %cosYangle))
var %tmpz = $calc((%Point.y * %sinXangle)+(%tempz * %cosXangle)), %tmpy = $calc((%Point.y * %cosXangle)-(%tempz * %sinXangle))
var %point.mx = %tmpx, %point.my = %tmpy, %point.mz = %tmpz | var %eye = 200, %point.mz = $calc(%point.mz + 125)
var %pers = $calc(%eye / %point.mz) | var %f.X = $calc(%point.mx * %pers), %f.Y = $calc(%point.my * %pers)
var %scale = $round($calc((%pers * 66) /28),0) | var %3D.P $+ %i $+ .x %f.X | var %3D.P $+ %i $+ .y %f.Y
if ($window(@3D)) { drawdot -r @3D $rgb(255,0,255) %scale $convCoords(%f.X).x $convCoords(%f.Y).y | .timerbuild -m 1 40 buildCoord
} | inc %i
} | var %i = 0
while (%i <= %Lines.Length) {
var %Line.From = $readini(gravitylines.ini,l $+ %i,from), %Line.To = $readini(gravitylines.ini,l $+ %i,to)
if (%jmp.hit == true) {
if (%i == 2) || (%i == 3) || (%i == 6) || (%i == 8) { var %color = $rgb(255,0,0), %size = 2 }
else { var %color = $rgb(255,255,255), %size = 1 } | } | else { var %color = $rgb(255,255,255), %size = 1 }
if ($window(@3D)) drawline -rh @3D %color %size $convCoords(%3D.P [ $+ [ %Line.From ] $+ ] .x).x $convCoords(%3D.P [ $+ [ %Line.From ] $+ ] .y).y $convCoords(%3D.P [ $+ [ %Line.To ] $+ ] .x).x $convCoords(%3D.P [ $+ [ %Line.To ] $+ ] .y).y
inc %i
} | inc %fps.count
}
alias -l initJumper { set %jmp.vx 2 | set %jmp.vz 1 | set %jmp.freq 0.1 | set %jmp.amp 75 | set %jmp.cc $calc($pi/2) | set %jmp.x 0 | set %jmp.y 0 | set %jmp.z 0 }
alias -l Jumper {
set %jmp.x $calc(%jmp.x + %jmp.vx) | set %jmp.cc $calc(%jmp.cc + %jmp.freq)
set %jmp.y $calc($abs($calc($sin(%jmp.cc) * %jmp.amp)) - 50) | set %jmp.z $calc(%jmp.z + %jmp.vz)
if (%jmp.x < -45) || (%jmp.x > 45) { set %jmp.vx $calc(%jmp.vx * -1) }
if (%jmp.z < -45) || (%jmp.z > 45) { set %jmp.vz $calc(%jmp.vz * -1) }
}