`%ProjectTitle% `====================== `©%Author% `====================== `Main Source File sync on sync rate 0 autocam off #constant helpObj = 1000 #constant helpMesh = 10 `#constant dfactor = 100.0 #constant sqrWidth = 5 #constant sqrHeight = 5 #constant sqrWidFact = -10 #constant sqrHeiFact = -15 #constant numSpace = 5 #constant minFade = 30.0 #constant numNumbers = 8 position camera -100,100,400 point camera 0,0,0 color backdrop 0 type Vertex xpos as float ypos as float xto as float yto as float endtype type NumberType curNumber as integer maxSpd as float minSpd as float thresh as float dfactor as float fade as float endtype global timeStart as integer calibrateTimer() global dim NumVertex(numNumbers,sqrWidth*sqrHeight*6) as Vertex global dim Numbers(numNumbers) as NumberType for n = 1 to numNumbers makeNumber(n, n, 0, (n-(numNumbers/2)) * (sqrWidFact*-1*sqrWidth+numSpace)-sqrWidFact/2, 0, 0) if (n-1) mod 3 = 2 setNumber(n, 99) else setNumber(n, (n-1) mod 10) endif ghost object on n set object wireframe n, 1 next n if numNumbers > 8 restore numberData else restore numberDataSeconds endif for n = 1 to numNumbers read Numbers(n).curNumber read Numbers(n).maxSpd read Numbers(n).minSpd read Numbers(n).thresh read Numbers(n).dfactor Numbers(n).fade = 100 next n `-------------------------------------------------- `############# enter main loop ################### `-------------------------------------------------- do updateNumberTime() for n = 1 to numNumbers updateNumber(n, n, 0) setNumber(n, Numbers(n).curNumber) next n text 10,10,"updating numbers... (FPS: " + str$(screen fps()) + ")" text 10,25,"Current Time: " + getTimeStr() set cursor 10,40 sync loop function updateNumberTime() local tmp as string tmp = getTimeStr() for n = 1 to numNumbers if (n-1) mod 3 = 2 setNumber(n, 99) else lastNum = Numbers(n).curNumber Numbers(n).curNumber = val(mid$(tmp, numNumbers-n+1)) endif `do a lil fadin if lastNum <> Numbers(n).curNumber Numbers(n).fade = 100.0 else `if Numbers(n).fade > minFade then dec Numbers(n).fade, ((numNumbers-n)-int((n-1)/3))/600.0 if int((n-1)/3) = 0 if Numbers(n).fade > minFade then dec Numbers(n).fade, 0.02 else if int((n-1)/3) = 1 if Numbers(n).fade > minFade then dec Numbers(n).fade, 0.002 else if Numbers(n).fade > minFade then dec Numbers(n).fade, 0.0002 endif endif endif if Numbers(n).fade < minFade then Numbers(n).fade = minFade fade object n, Numbers(n).fade next n endfunction function getTimeStr() local rtrn as string rtrn = get time$() + ":" + getMilliSecondsStr() endfunction rtrn function getMilliSecondsStr() local rtrn as string rtrn = str$(getMilliTime()/10 mod 100) if len(rtrn) < 2 then rtrn = "0" + rtrn if len(rtrn) < 2 then rtrn = "0" + rtrn endfunction rtrn function getMilliTime() local rtrn as integer rtrn = (timer() - timeStart) endfunction rtrn function calibrateTimer() local time as integer local lastTime as integer repeat lastTime = time time = val(right$(get time$(), 1)) until lastTime <> time timeStart = timer() endfunction function updateNumber(objNum, index, zpos) local dist as float local x as float local y as float lock vertexdata for limb objNum,0,1 for n = 0 to sqrWidth*sqrHeight * 6 if abs(NumVertex(index,n).xpos - NumVertex(index,n).xto) > Numbers(index).thresh or abs(NumVertex(index,n).ypos - NumVertex(index,n).yto) > Numbers(index).thresh dist = sqrt((NumVertex(index,n).xpos - NumVertex(index,n).xto)^2 + (NumVertex(index,n).ypos - NumVertex(index,n).yto)^2) if dist < Numbers(index).minSpd then dist = Numbers(index).minSpd if dist > Numbers(index).maxSpd then dist = Numbers(index).maxSpd x = -1*(NumVertex(index,n).xpos - NumVertex(index,n).xto)/dist/Numbers(index).dfactor y = -1*(NumVertex(index,n).ypos - NumVertex(index,n).yto)/dist/Numbers(index).dfactor NumVertex(index,n).xpos = NumVertex(index,n).xpos + x NumVertex(index,n).ypos = NumVertex(index,n).ypos + y endif if abs(NumVertex(index,n).xpos - NumVertex(index,n).xto) <= Numbers(index).thresh then NumVertex(index,n).xpos = NumVertex(index,n).xto if abs(NumVertex(index,n).ypos - NumVertex(index,n).yto) <= Numbers(index).thresh then NumVertex(index,n).ypos = NumVertex(index,n).yto set vertexdata position n, NumVertex(index,n).xpos, NumVertex(index,n).ypos, zpos next n unlock vertexdata endfunction function makeNumber(objNum, index, image, posx, posy, posz) make object plain helpObj,abs(sqrWidFact),abs(sqrHeiFact) rotate limb helpObj,0,0,0,0 make mesh from object helpMesh,helpObj delete object helpObj make object helpObj, helpMesh, image limbNum = 1 for x = 0 to sqrWidth-1 for y = 0 to sqrHeight-1 if y = 0 and x = 0 : else add limb helpObj,limbNum,helpMesh offset limb helpObj,limbNum,x*sqrWidFact,y*sqrHeiFact,0 inc limbNum sync `wait 10 endif next y next x delete mesh helpMesh make mesh from object helpMesh, helpObj make object objNum, helpMesh, image delete object helpObj set object wireframe objNum, 1 set object cull objNum, 0 position object objNum, posx, posy, posz `loop through the vertexes lock vertexdata for limb objNum,0,1 for n = 0 to sqrWidth*sqrHeight * 6 x#=get vertexdata position x(n) y#=get vertexdata position y(n) NumVertex(index,n).xpos = x#+sqrWidFact/2 NumVertex(index,n).ypos = y#+sqrHeiFact/2 NumVertex(index,n).xto = x# NumVertex(index,n).yto = y# set vertexdata diffuse n, rgb(rnd(255),rnd(255),rnd(255)) set vertexdata position n, NumVertex(index,n).xpos, NumVertex(index,n).ypos, 0 next n `unlock the vertex data now that we are done reading it unlock vertexdata organize(index) endfunction function setNumber(index, number) local tmp as integer local poly as integer select number case 0 restore number0 endcase case 1 restore number1 endcase case 2 restore number2 endcase case 3 restore number3 endcase case 4 restore number4 endcase case 5 restore number5 endcase case 6 restore number6 endcase case 7 restore number7 endcase case 8 restore number8 endcase case 9 restore number9 endcase case 99 restore numberSYM endcase endselect poly = 0 for y = 0 to sqrHeight - 1 for x = 0 to sqrWidth - 1 read tmp select tmp case 7 shapeVRT(index, poly, x*sqrWidFact, y*sqrHeiFact) endcase case 6 shapeVLF(index, poly, x*sqrWidFact, y*sqrHeiFact) endcase case 5 shapeTRI4(index, poly, x*sqrWidFact, y*sqrHeiFact) endcase case 4 shapeTRI3(index, poly, x*sqrWidFact, y*sqrHeiFact) endcase case 3 shapeTRI2(index, poly, x*sqrWidFact, y*sqrHeiFact) endcase case 2 shapeTRI1(index, poly, x*sqrWidFact, y*sqrHeiFact) endcase case 1 shapeSQR(index, poly, x*sqrWidFact, y*sqrHeiFact) endcase case 0 shapeNON(index, poly, x*sqrWidFact, y*sqrHeiFact) endcase endselect inc poly, 6 next x next y endfunction `organize the plains.... function organize(index) local poly as integer poly = 0 for y = 0 to sqrHeight-1 for x = 0 to sqrWidth-1 `triangle 1 NumVertex(index,poly+0).xpos = 0 +x*sqrWidFact NumVertex(index,poly+0).ypos = 0 +y*sqrHeiFact NumVertex(index,poly+1).xpos = sqrWidFact+x*sqrWidFact NumVertex(index,poly+1).ypos = 0 +y*sqrHeiFact NumVertex(index,poly+2).xpos = 0 +x*sqrWidFact NumVertex(index,poly+2).ypos = sqrHeiFact+y*sqrHeiFact `triangle 2 NumVertex(index,poly+3).xpos = sqrWidFact+x*sqrWidFact NumVertex(index,poly+3).ypos = 0 +y*sqrHeiFact NumVertex(index,poly+4).xpos = sqrWidFact+x*sqrWidFact NumVertex(index,poly+4).ypos = sqrHeiFact+y*sqrHeiFact NumVertex(index,poly+5).xpos = 0 +x*sqrWidFact NumVertex(index,poly+5).ypos = sqrHeiFact+y*sqrHeiFact inc poly, 6 next x next y endfunction `a block of substance function shapeSQR(index, poly, xOff, yOff) `triangle 1 NumVertex(index,poly+0).xto = 0 +xOff NumVertex(index,poly+0).yto = 0 +yOff NumVertex(index,poly+1).xto = sqrWidFact+xOff NumVertex(index,poly+1).yto = 0 +yOff NumVertex(index,poly+2).xto = 0 +xOff NumVertex(index,poly+2).yto = sqrHeiFact+yOff `triangle 2 NumVertex(index,poly+3).xto = sqrWidFact+xOff NumVertex(index,poly+3).yto = 0 +yOff NumVertex(index,poly+4).xto = sqrWidFact+xOff NumVertex(index,poly+4).yto = sqrHeiFact+yOff NumVertex(index,poly+5).xto = 0 +xOff NumVertex(index,poly+5).yto = sqrHeiFact+yOff endfunction `no substance here! function shapeNON(index, poly, xOff, yOff) `triangle 1 NumVertex(index,poly+0).xto = 0 +xOff NumVertex(index,poly+0).yto = 0 +yOff NumVertex(index,poly+1).xto = 0 +xOff NumVertex(index,poly+1).yto = 0 +yOff NumVertex(index,poly+2).xto = 0 +xOff NumVertex(index,poly+2).yto = 0 +yOff `triangle 2 NumVertex(index,poly+3).xto = sqrWidFact+xOff NumVertex(index,poly+3).yto = sqrHeiFact+yOff NumVertex(index,poly+4).xto = sqrWidFact+xOff NumVertex(index,poly+4).yto = sqrHeiFact+yOff NumVertex(index,poly+5).xto = sqrWidFact+xOff NumVertex(index,poly+5).yto = sqrHeiFact+yOff endfunction `top left in function shapeTRI1(index, poly, xOff, yOff) `triangle 1 NumVertex(index,poly+0).xto = sqrWidFact/2.0+xOff NumVertex(index,poly+0).yto = sqrHeiFact/2.0+yOff NumVertex(index,poly+1).xto = sqrWidFact +xOff NumVertex(index,poly+1).yto = 0 +yOff NumVertex(index,poly+2).xto = 0 +xOff NumVertex(index,poly+2).yto = sqrHeiFact +yOff `triangle 2 NumVertex(index,poly+3).xto = sqrWidFact +xOff NumVertex(index,poly+3).yto = 0 +yOff NumVertex(index,poly+4).xto = sqrWidFact +xOff NumVertex(index,poly+4).yto = sqrHeiFact +yOff NumVertex(index,poly+5).xto = 0 +xOff NumVertex(index,poly+5).yto = sqrHeiFact +yOff endfunction `top right in function shapeTRI2(index, poly, xOff, yOff) `triangle 1 NumVertex(index,poly+0).xto = 0 +xOff NumVertex(index,poly+0).yto = 0 +yOff NumVertex(index,poly+1).xto = sqrWidFact/2.0+xOff NumVertex(index,poly+1).yto = sqrHeiFact/2.0+yOff NumVertex(index,poly+2).xto = 0 +xOff NumVertex(index,poly+2).yto = sqrHeiFact +yOff `triangle 2 NumVertex(index,poly+3).xto = sqrWidFact/2.0+xOff NumVertex(index,poly+3).yto = sqrHeiFact/2.0+yOff NumVertex(index,poly+4).xto = sqrWidFact +xOff NumVertex(index,poly+4).yto = sqrHeiFact +yOff NumVertex(index,poly+5).xto = 0 +xOff NumVertex(index,poly+5).yto = sqrHeiFact +yOff endfunction `bottom right in function shapeTRI3(index, poly, xOff, yOff) `triangle 1 NumVertex(index,poly+0).xto = 0 +xOff NumVertex(index,poly+0).yto = 0 +yOff NumVertex(index,poly+1).xto = sqrWidFact +xOff NumVertex(index,poly+1).yto = 0 +yOff NumVertex(index,poly+2).xto = 0 +xOff NumVertex(index,poly+2).yto = sqrHeiFact +yOff `triangle 2 NumVertex(index,poly+3).xto = sqrWidFact +xOff NumVertex(index,poly+3).yto = 0 +yOff NumVertex(index,poly+4).xto = sqrWidFact/2.0+xOff NumVertex(index,poly+4).yto = sqrHeiFact/2.0+yOff NumVertex(index,poly+5).xto = 0 +xOff NumVertex(index,poly+5).yto = sqrHeiFact +yOff endfunction `bottom left in function shapeTRI4(index, poly, xOff, yOff) `triangle 1 NumVertex(index,poly+0).xto = 0 +xOff NumVertex(index,poly+0).yto = 0 +yOff NumVertex(index,poly+1).xto = sqrWidFact +xOff NumVertex(index,poly+1).yto = 0 +yOff NumVertex(index,poly+2).xto = sqrWidFact/2.0+xOff NumVertex(index,poly+2).yto = sqrHeiFact/2.0+yOff `triangle 2 NumVertex(index,poly+3).xto = sqrWidFact +xOff NumVertex(index,poly+3).yto = 0 +yOff NumVertex(index,poly+4).xto = sqrWidFact +xOff NumVertex(index,poly+4).yto = sqrHeiFact +yOff NumVertex(index,poly+5).xto = sqrWidFact/2.0+xOff NumVertex(index,poly+5).yto = sqrHeiFact/2.0+yOff endfunction function shapeVLF(index, poly, xOff, yOff) `triangle 1 NumVertex(index,poly+0).xto = 0 +xOff NumVertex(index,poly+0).yto = 0 +yOff NumVertex(index,poly+1).xto = sqrWidFact +xOff NumVertex(index,poly+1).yto = 0 +yOff NumVertex(index,poly+2).xto = sqrWidFact +xOff NumVertex(index,poly+2).yto = sqrHeiFact/2.0+yOff `triangle 2 NumVertex(index,poly+3).xto = sqrWidFact +xOff NumVertex(index,poly+3).yto = sqrHeiFact/2.0+yOff NumVertex(index,poly+4).xto = sqrWidFact +xOff NumVertex(index,poly+4).yto = sqrHeiFact +yOff NumVertex(index,poly+5).xto = 0 +xOff NumVertex(index,poly+5).yto = sqrHeiFact +yOff endfunction function shapeVRT(index, poly, xOff, yOff) `triangle 1 NumVertex(index,poly+0).xto = 0 +xOff NumVertex(index,poly+0).yto = 0 +yOff NumVertex(index,poly+1).xto = sqrWidFact +xOff NumVertex(index,poly+1).yto = 0 +yOff NumVertex(index,poly+2).xto = 0 +xOff NumVertex(index,poly+2).yto = sqrHeiFact/2.0+yOff `triangle 2 NumVertex(index,poly+3).xto = sqrWidFact +xOff NumVertex(index,poly+3).yto = sqrHeiFact +yOff NumVertex(index,poly+4).xto = 0 +xOff NumVertex(index,poly+4).yto = sqrHeiFact +yOff NumVertex(index,poly+5).xto = 0 +xOff NumVertex(index,poly+5).yto = sqrHeiFact/2.0+yOff endfunction number1: data 0,2,1,0,0 data 0,1,1,0,0, data 0,0,1,0,0 data 0,0,1,0,0 data 0,1,1,1,0 number2: data 2,1,1,1,3 data 1,0,0,6,1 data 0,2,1,1,4 data 2,1,7,0,0 data 1,1,1,1,1 number3: data 1,1,1,1,3 data 0,0,0,6,1 data 0,1,1,1,7 data 0,0,0,6,1 data 1,1,1,1,4 number4: data 1,0,0,0,1 data 1,0,0,0,1 data 5,1,1,1,1 data 0,0,0,0,1 data 0,0,0,0,1 number5: data 2,1,1,1,1 data 1,7,0,0,0 data 5,1,1,1,3 data 0,0,0,6,1 data 1,1,1,1,4 number6: data 2,1,1,1,0 data 1,7,0,0,0 data 1,1,1,1,3 data 1,7,0,6,1 data 5,1,1,1,4 number7: data 1,1,1,1,1 data 0,0,0,2,4 data 0,0,2,1,0 data 0,2,1,4,0 data 0,1,4,0,0 number8: data 2,1,1,1,3 data 1,7,0,6,1 data 6,1,1,1,7 data 1,7,0,6,1 data 5,1,1,1,4 number9: data 2,1,1,1,3 data 1,7,0,6,1 data 5,1,1,1,1 data 0,0,0,6,1 data 0,1,1,1,4 number0: data 2,1,1,1,3 data 1,0,2,4,1 data 1,0,1,0,1 data 1,2,4,0,1 data 5,1,1,1,4 numberSYM: data 0,0,0,0,0 data 0,0,1,0,0 data 0,0,0,0,0 data 0,0,1,0,0 data 0,0,0,0,0 `for digit 1 to 11 numberData: `num, max, min, thresh, dfactor data 0,10.0, 5.0, 10.0, 1.0 `data for first digit (hundreths of a second) data 0,10.0, 5.0, 10.0 , 10.0 `data for second digit (tenths of a second) data 99,10.0, 1.0, 1.0 , 10.0 `data for first colon numberDataSeconds: data 0,10.0, 1.0, 1.0 , 10.0 `data for seconds data 0,10.0, 1.0, 1.0 , 10.0 `data for ten Seconds data 99,10.0, 1.0, 1.0 , 10.0`data for second colon data 0,10.0, 1.0, 1.0 , 10.0`data for minutes data 0,10.0, 1.0, 1.0 , 10.0`data for ten minutes data 99,10.0, 1.0, 1.0 , 10.0`data for third colon data 0,10.0, 1.0, 1.0 , 10.0`data for one hour data 0,10.0, 1.0, 1.0 , 10.0`data for ten hours