So I have this bit of code you'll see below all media free for you to run. There's a function in it that either creates 2 - 4 - or 6 lane roads (no model yet for the roads) but I've come into a bit of a road block (HA HA! A PUN rofrofrof *smack desk* HA HA poo)
Say you click on any location on that map... because I haven't figured out how to rotate the start point, the roads can only be correctly drawn at a 45 degree angle.
Think of it like this... you have a piece of yarn wrapped around a tack board. That yarn can be pulled and stretched to any other tack. Now say you have three base tacks and three end tacks, each with yarn going straight to the correct tack at each end. You can't rotate the yarn anymore around a single point, but rather, now you have to rotate both the end tacks and start tacks... what in the code below are lane start and end points.
How do I rotate the points I am drawing from.... in.... this.... code (click and drag to draw roads... you will see the lanes - if you want to change the amount of lanes, there is a function called "dragtransport" - change the number or lanes to either 1, 2, 3... meaning 2, 4, 6:
Rem Project: Metropolis Engine Debug
Rem Created: Thursday, January 03, 2013
Rem ***** Main Source File *****
SET DISPLAY MODE DESKTOP WIDTH(), DESKTOP HEIGHT(), 32, 1
ink RGB(255,0,0), RGB(0,0,0)
line 1,1,64,1
line 1,64,64,64
line 1,1,1,64
line 64, 1, 64, 64
GET IMAGE 1, 1,1,64,64,1
`make the variable for peeps
type residents
restype as integer
health as integer
education as integer
count as integer
x as float
y as float
z as float
endtype
type roads
startX# as float
startZ# as float
endX# as float
endZ# as float
number as integer
`four times for four lanes - until a better method is produced
numberoflanes as integer
`farthest right
obstartRRR as integer
obendRRR as integer
`second farthest right
obstartRR as integer
obendRR as integer
`right
obstartR as integer
obendR as integer
`farthest left
obstartLLL as integer
obendLLL as integer
`second farthest left
obstartLL as integer
obendLL as integer
`left
obstartL as integer
obendL as integer
endtype
type transportprereq
lanes as integer
centerwidth# as float
curbRLwidth# as float
endtype
`make the peeps like/hate variables
type environment
crime as integer
apollution as integer
wpollution as integer
endtype
`make the like/hate variables foundation
type area
traffic as integer
desire as integer
value as integer
endtype
type business
industry as integer
commerce as integer
population as integer
endtype
global dim people(-1) as residents
global dim depend(-1) as environment
global dim city(-1) as area
global dim houses(-1)
global dim factories(-1)
global dim businesses(-1)
global dim trans(-1) as roads
global dim rdetails(-1) as transportprereq
global placearray = 0
`for the debugging, create the terrain. Make the plane one mile by one mile - divide the segments into 64 x 64 = 82.5 ft. x 82.5 ft. sections.
MAKE OBJECT PLAIN 1, 5280, 5280, 64, 64
ROTATE OBJECT 1, 0,0,0
TEXTURE OBJECT 1, 1
SCALE OBJECT TEXTURE 1, 64, 64
SET OBJECT WIREFRAME 1, 1
sync on : SYNC rate 0
AUTOCAM OFF
POSITION CAMERA 0, 200,0
POINT CAMERA 0,0,0
SET CAMERA RANGE 1, 5280*3
ink rgb(255,255,255), RGB(0,0,0)
SET TEXT FONT "Arial"
SET TEXT SIZE 18
do
sync
box screen width()-300, screen height()-200, screen width(), Screen height(), rgb(0,0,0), RGB(40,40,40), RGB(0,0,0), RGB(40,40,40)
box 0, 0, 300, 60, rgb(0,0,0), RGB(40,40,40), RGB(0,0,0), RGB(40,40,40)
BOX OUTLINE 0, 0, 300, 60, rgb(90,90,90)
BOX OUTLINE screen width()-300, screen height()-200, screen width(), Screen height(), rgb(90,90,90)
ink rgb(255,255,255), RGB(0,0,0)
text 10, 10, "Position: X= "+str$(int(px#))+", Y= "+Str$(int(py#))+", Z= "+Str$(int(pz#))
if canplace=0 then text 10, 25, "You cannot place a building there"
if canplace>0 then text 10,25, "You can place a building there"
canplace=placement(1)
if canplace>0
px#=GET PICK VECTOR X()+CAMERA POSITION X()
py#=GET PICK VECTOR Y()+CAMERA POSITION Y()
pz#=GET PICK VECTOR Z()+CAMERA POSITION Z()
endif
mouse_control(1.0)
if mouseclick()=1 then dragtransport(ARRAY COUNT(trans())+1, 1, 1)
showpaths()
LOOP
FUNCTION mouse_control(speed AS FLOAT)
if mouseclick()=2
XROTATE CAMERA CAMERA ANGLE X()+MOUSEMOVEY()
YROTATE CAMERA CAMERA ANGLE Y()+MOUSEMOVEX()
endif
IF upkey()=1 THEN MOVE CAMERA speed*2
IF downkey()=1 THEN MOVE CAMERA (0-speed*2)
if mouseclick()=4
XROTATE CAMERA CAMERA ANGLE X()+MOUSEMOVEY()
ENDIF
if rightkey()=1
YROTATE CAMERA CAMERA ANGLE Y()+1
ENDIF
if leftkey()=1
YROTATE CAMERA CAMERA ANGLE Y()-1
ENDIF
If Mouseclick()=3
MOVE CAMERA speed*2
XROTATE CAMERA CAMERA ANGLE X()+MOUSEMOVEY()
YROTATE CAMERA CAMERA ANGLE Y()+MOUSEMOVEX()
ENDIF
dummy=MOUSEMOVEX()
dummy=MOUSEMOVEY()
Newmousez = MousemoveZ()
If oldmousez <> newmousez
If oldmousez < newmousez
mousezz=speed^3
endif
If oldmousez > newmousez
mousezz=-speed^3
endif
MOVE CAMERA mousezz
Oldmousez=Mousemovez()
Mousezz=0
endif
ENDFUNCTION
function makehouse(restype, landvalue, desireablity)
if desireablity=0 then desireablity=1
`light residential
if restype=1
if landvalue>0
housesize=(rnd(desireablity)/landvalue)
else
housesize=rnd(desireablity)
endif
ENDIF
`medium residential
if restype=2
if landvalue>0
housesize=landvalue+(rnd(desireablity)/landvalue)
else
housesize=landvalue+rnd(desireablity)
endif
ENDIF
`hi density
if restype=3
if landvalue>0
housesize=landvalue*rnd(desireablity)
else
housesize=Landvalue+rnd(desireablity)
endif
ENDIF
ENDFUNCTION
function placement(object)
distance#=GET PICK DISTANCE()
pob=PICK OBJECT(mouseX(), MouseY(), object, object)
if pob>0 then result=pob
if pob=0 then result=0
ENDFUNCTION result
function barchartitem(color as dword, lowestamount, highestamount, currentamount, posx as integer, posy as integer, width as integer)
msize=clamp(currentamount, lowestamount, highestamount)
box posx-(width/2), posy, posx+(width/2), posy+msize, color, color, color, color
BOX OUTLINE posx-(width/2), posy, posx+(width/2), posy+msize, RGB(90,90,90)
ENDFUNCTION
function building(zon_type, posy# as float, color as dword)
`the base size of a single square
baselotsize#=82.5
`the zone types
if zon_type=1
name$="Residential"
ARRAY INSERT AT BOTTOM people(0)
endif
ENDFUNCTION
function dragtransport(roadnumber as integer, number_of_lanes_LR as integer, toolopen)
local startpoint
local endpoint
if toolopen>0
hasspoint=VECTOR EXIST(1)
hasepoint=VECTOR EXIST(2)
if hasspoint=1 then r=DELETE VECTOR3(1)
if hasepoint=1 then r=DELETE VECTOR3(2)
if placearray=0
ARRAY INSERT AT BOTTOM trans(roadnumber)
trans(roadnumber).number=roadnumber
trans(roadnumber).numberoflanes = number_of_lanes_LR
placearray=1
endif
If mouseclick()=1 and startpoint=0
`call the correction of placement first
canplace=placement(1)
if canplace>0
px#=GET PICK VECTOR X()+CAMERA POSITION X()
py#=GET PICK VECTOR Y()+CAMERA POSITION Y()
pz#=GET PICK VECTOR Z()+CAMERA POSITION Z()
`===========================================
`for the lanes
`===========================================
select number_of_lanes_lr
case 3:
`===================center==================
pickx#=(floor(px#/82.5) * 82.5)+41.25
pickz#=(floor(pz#/82.5) * 82.5)+41.25
`=========================far left======================
LLLx#=(floor(px#/82.5) * 82.5)+13.0
LLLz#=(floor(pz#/82.5) * 82.5)+13.0
`=========================left==========================
LLx#=(floor(px#/82.5) * 82.5)+26
LLz#=(floor(pz#/82.5) * 82.5)+26
`=========================far left======================
Lx#=(floor(px#/82.5) * 82.5)+39
Lz#=(floor(pz#/82.5) * 82.5)+39
`========================================================
`=========================far right======================
RRRx#=(floor(px#/82.5) * 82.5)+82.5-13.0
RRRz#=(floor(pz#/82.5) * 82.5)+82.5-13.0
`=========================left==========================
RRx#=(floor(px#/82.5) * 82.5)+82.5-26
RRz#=(floor(pz#/82.5) * 82.5)+82.5-26
`=========================far left======================
Rx#=(floor(px#/82.5) * 82.5)+82.5-39
Rz#=(floor(pz#/82.5) * 82.5)+82.5-39
`RIGHT-------------------------------------
RRRstart=FIND FREE OBJECT()
MAKE OBJECT SPHERE RRRstart, 5
trans(roadnumber).obstartRRR=RRRstart
RRRend=FIND FREE OBJECT()
MAKE OBJECT sphere RRRend, 5
trans(roadnumber).obendRRR=RRRend
`second farthest right
RRstart=FIND FREE OBJECT()
MAKE OBJECT SPHERE rrstart, 5
trans(roadnumber).obstartRR=RRstart
RRend=FIND FREE OBJECT()
MAKE OBJECT SPHERE rrend, 5
trans(roadnumber).obendRR=RRend
`right
Rstart=FIND FREE OBJECT()
MAKE OBJECT SPHERE rstart, 5
trans(roadnumber).obstartR=Rstart
Rend=FIND FREE OBJECT()
MAKE OBJECT SPHERE rend, 5
trans(roadnumber).obendR=Rend
`LEFT-------------------------------------
LLLstart=FIND FREE OBJECT()
MAKE OBJECT SPHERE LLLstart, 5
trans(roadnumber).obstartLLL=LLLstart
LLLend=FIND FREE OBJECT()
MAKE OBJECT sphere LLLend, 5
trans(roadnumber).obendLLL=LLLend
`second farthest right
LLstart=FIND FREE OBJECT()
MAKE OBJECT SPHERE LLstart, 5
trans(roadnumber).obstartLL=LLstart
LLend=FIND FREE OBJECT()
MAKE OBJECT SPHERE LLend, 5
trans(roadnumber).obendLL=LLend
`right
Lstart=FIND FREE OBJECT()
MAKE OBJECT SPHERE Lstart, 5
trans(roadnumber).obstartL=Lstart
Lend=FIND FREE OBJECT()
MAKE OBJECT SPHERE Lend, 5
trans(roadnumber).ObendL=Lend
`POSITIONING Start Points-------------------------------
POSITION OBJECT trans(roadnumber).obstartRRR, RRRx#, py#, RRRZ#
POSITION OBJECT trans(roadnumber).obstartRR, RRx#, py#, RRz#
POSITION OBJECT trans(roadnumber).obstartR, Rx#, py#, Rz#
POSITION OBJECT trans(roadnumber).obstartLLL, LLLx#, py#, LLLZ#
POSITION OBJECT trans(roadnumber).obstartLL, LLx#, py#, LLz#
POSITION OBJECT trans(roadnumber).obstartL, Lx#, py#, Lz#
endcase
case 2:
`===================center==================
pickx#=(floor(px#/82.5) * 82.5)+41.25
pickz#=(floor(pz#/82.5) * 82.5)+41.25
`=========================far left======================
LLx#=(floor(px#/82.5) * 82.5)+15
LLz#=(floor(pz#/82.5) * 82.5)+15.0
`=========================left==========================
Lx#=(floor(px#/82.5) * 82.5)+30
Lz#=(floor(pz#/82.5) * 82.5)+30
`========================================================
`=========================far right======================
RRx#=(floor(px#/82.5) * 82.5)+82.5-15
RRz#=(floor(pz#/82.5) * 82.5)+82.5-15
`=========================left==========================
Rx#=(floor(px#/82.5) * 82.5)+82.5-30
Rz#=(floor(pz#/82.5) * 82.5)+82.5-30
`RIGHT-------------------------------------
`second farthest right
RRstart=FIND FREE OBJECT()
MAKE OBJECT SPHERE rrstart, 5
trans(roadnumber).obstartRR=RRstart
RRend=FIND FREE OBJECT()
MAKE OBJECT SPHERE rrend, 5
trans(roadnumber).obendRR=RRend
`right
Rstart=FIND FREE OBJECT()
MAKE OBJECT SPHERE rstart, 5
trans(roadnumber).obstartR=Rstart
Rend=FIND FREE OBJECT()
MAKE OBJECT SPHERE rend, 5
trans(roadnumber).obendR=Rend
`LEFT-------------------------------------
`second farthest right
LLstart=FIND FREE OBJECT()
MAKE OBJECT SPHERE LLstart, 5
trans(roadnumber).obstartLL=LLstart
LLend=FIND FREE OBJECT()
MAKE OBJECT SPHERE LLend, 5
trans(roadnumber).obendLL=LLend
`right
Lstart=FIND FREE OBJECT()
MAKE OBJECT SPHERE Lstart, 5
trans(roadnumber).obstartL=Lstart
Lend=FIND FREE OBJECT()
MAKE OBJECT SPHERE Lend, 5
trans(roadnumber).ObendL=Lend
`POSITIONING Start Points-------------------------------
POSITION OBJECT trans(roadnumber).obstartRR, RRx#, py#, RRz#
POSITION OBJECT trans(roadnumber).obstartR, Rx#, py#, Rz#
POSITION OBJECT trans(roadnumber).obstartLL, LLx#, py#, LLz#
POSITION OBJECT trans(roadnumber).obstartL, Lx#, py#, Lz#
endcase
case 1:
`===================center==================
pickx#=(floor(px#/82.5) * 82.5)+41.25
pickz#=(floor(pz#/82.5) * 82.5)+41.25
`=========================far left======================
Lx#=(floor(px#/82.5) * 82.5)+20.625
Lz#=(floor(pz#/82.5) * 82.5)+20.625
`=========================far right======================
Rx#=(floor(px#/82.5) * 82.5)+82.5-20.625
Rz#=(floor(pz#/82.5) * 82.5)+82.5-20.625
`POSITIONING Start Points-------------------------------
`RIGHT-------------------------------------
Rstart=FIND FREE OBJECT()
MAKE OBJECT SPHERE rstart, 5
trans(roadnumber).obstartR=Rstart
Rend=FIND FREE OBJECT()
MAKE OBJECT SPHERE rend, 5
trans(roadnumber).obendR=Rend
`LEFT-------------------------------------
Lstart=FIND FREE OBJECT()
MAKE OBJECT SPHERE Lstart, 5
trans(roadnumber).obstartL=Lstart
Lend=FIND FREE OBJECT()
MAKE OBJECT SPHERE Lend, 5
trans(roadnumber).ObendL=Lend
POSITION OBJECT trans(roadnumber).obstartR, Rx#, py#, Rz#
POSITION OBJECT trans(roadnumber).obstartL, Lx#, py#, Lz#
endcase
endselect
tmpstart=MAKE VECTOR3(1)
SET VECTOR3 1, pickx#, py#, pickz#
trans(roadnumber).startx#=pickx#
trans(roadnumber).startz#=pickz#
startpoint=1
tmpend=MAKE VECTOR3(2)
endif
endif
repeat
sync
if startpoint>0 and mouseclick()=1
canplace=placement(1)
if canplace>0
pxx#=GET PICK VECTOR X()+CAMERA POSITION X()
pyy#=GET PICK VECTOR Y()+CAMERA POSITION Y()
pzz#=GET PICK VECTOR Z()+CAMERA POSITION Z()
pxx#=(floor(pxx#/82.5) * 82.5)+41.25
pzz#=(floor(pzz#/82.5) * 82.5)+41.25
`POSITIONING End Points-------------------------------
select number_of_lanes_lr
case 3:
`===================center==================
pickx#=(floor(pxx#/82.5) * 82.5)+41.25
pickz#=(floor(pzz#/82.5) * 82.5)+41.25
`=========================far left======================
LLLx#=(floor(pxx#/82.5) * 82.5)+13.0
LLLz#=(floor(pzz#/82.5) * 82.5)+13.0
`=========================left==========================
LLx#=(floor(pxx#/82.5) * 82.5)+26
LLz#=(floor(pzz#/82.5) * 82.5)+26
`=========================far left======================
Lx#=(floor(pxx#/82.5) * 82.5)+39
Lz#=(floor(pzz#/82.5) * 82.5)+39
`========================================================
`=========================far right======================
RRRx#=(floor(pxx#/82.5) * 82.5)+82.5-13.0
RRRz#=(floor(pzz#/82.5) * 82.5)+82.5-13.0
`=========================left==========================
RRx#=(floor(pxx#/82.5) * 82.5)+82.5-26
RRz#=(floor(pzz#/82.5) * 82.5)+82.5-26
`=========================far left======================
Rx#=(floor(pxx#/82.5) * 82.5)+82.5-39
Rz#=(floor(pzz#/82.5) * 82.5)+82.5-39
POSITION OBJECT trans(roadnumber).obendRRR, RRRx#, py#, RRRZ#
POSITION OBJECT trans(roadnumber).obendRR, RRx#, py#, RRz#
POSITION OBJECT trans(roadnumber).obendR, Rx#, py#, Rz#
POSITION OBJECT trans(roadnumber).obendLLL, LLLx#, py#, LLLZ#
POSITION OBJECT trans(roadnumber).obendLL, LLx#, py#, LLz#
POSITION OBJECT trans(roadnumber).obendL, Lx#, py#, Lz#
endcase
case 2:
`===================center==================
pickx#=(floor(pxx#/82.5) * 82.5)+41.25
pickz#=(floor(pzz#/82.5) * 82.5)+41.25
`=========================left==========================
LLx#=(floor(pxx#/82.5) * 82.5)+26
LLz#=(floor(pzz#/82.5) * 82.5)+26
`=========================far left======================
Lx#=(floor(pxx#/82.5) * 82.5)+39
Lz#=(floor(pzz#/82.5) * 82.5)+39
`========================================================
`=========================left==========================
RRx#=(floor(pxx#/82.5) * 82.5)+82.5-26
RRz#=(floor(pzz#/82.5) * 82.5)+82.5-26
`=========================far left======================
Rx#=(floor(pxx#/82.5) * 82.5)+82.5-39
Rz#=(floor(pzz#/82.5) * 82.5)+82.5-39
POSITION OBJECT trans(roadnumber).obendRR, RRx#, py#, RRz#
POSITION OBJECT trans(roadnumber).obendR, Rx#, py#, Rz#
POSITION OBJECT trans(roadnumber).obendLL, LLx#, py#, LLz#
POSITION OBJECT trans(roadnumber).obendL, Lx#, py#, Lz#
endcase
case 1:
`===================center==================
pickx#=(floor(pxx#/82.5) * 82.5)+41.25
pickz#=(floor(pzz#/82.5) * 82.5)+41.25
`=========================far left======================
Lx#=(floor(pxx#/82.5) * 82.5)+20.625
Lz#=(floor(pzz#/82.5) * 82.5)+20.625
`========================================================
`=========================far left======================
Rx#=(floor(pxx#/82.5) * 82.5)+82.5-20.625
Rz#=(floor(pzz#/82.5) * 82.5)+82.5-20.625
POSITION OBJECT trans(roadnumber).obendR, Rx#, py#, Rz#
POSITION OBJECT trans(roadnumber).obendL, Lx#, py#, Lz#
endcase
endselect
endif
trans(roadnumber).endx#=px#
trans(roadnumber).endz#=pz#
endif
`to display lines for 1 lane
if number_of_lanes_LR=1
linexR1#=OBJECT SCREEN X(trans(roadnumber).obstartr)
lineyR1#=OBJECT SCREEN Y(trans(roadnumber).obstartr)
linexR2#=OBJECT SCREEN X(trans(roadnumber).obendr)
lineyR2#=object screen y(trans(roadnumber).obendr)
`left
linex1#=OBJECT SCREEN X(trans(roadnumber).obstartl)
liney1#=OBJECT SCREEN Y(trans(roadnumber).obstartl)
linex2#=OBJECT SCREEN X(trans(roadnumber).obendl)
liney2#=object screen y(trans(roadnumber).obendl)
line linexR1#, lineyR1#, linexR2#, lineyR2#
line linexl1#, lineyl1#, linexl2#, lineyl2#
endif
`for two lanes
if number_of_lanes_LR=2
linexR1#=OBJECT SCREEN X(trans(roadnumber).obstartr)
lineyR1#=OBJECT SCREEN Y(trans(roadnumber).obstartr)
linexR2#=OBJECT SCREEN X(trans(roadnumber).obendr)
lineyR2#=object screen y(trans(roadnumber).obendr)
`left
linexL1#=OBJECT SCREEN X(trans(roadnumber).obstartr)
lineyL1#=OBJECT SCREEN Y(trans(roadnumber).obstartr)
linexL2#=OBJECT SCREEN X(trans(roadnumber).obendr)
lineyL2#=object screen y(trans(roadnumber).obendr)
`second right
linexRR1#=OBJECT SCREEN X(trans(roadnumber).obstartrr)
lineyRR1#=OBJECT SCREEN Y(trans(roadnumber).obstartrr)
linexRR2#=OBJECT SCREEN X(trans(roadnumber).obendrr)
lineyRR2#=object screen y(trans(roadnumber).obendrr)
`second left
linexLL1#=OBJECT SCREEN X(trans(roadnumber).obstartll)
lineyLL1#=OBJECT SCREEN Y(trans(roadnumber).obstartll)
linexLL2#=OBJECT SCREEN X(trans(roadnumber).obendll)
lineyLL2#=object screen y(trans(roadnumber).obendll)
line linexR1#, lineyR1#, linexR2#, lineyR2#
line linexl1#, lineyl1#, linexl2#, lineyl2#
line linexRR1#, lineyRR1#, linexRR2#, lineyRR2#
line linexll1#, lineyll1#, linexll2#, lineyll2#
endif
`for three lanes
if number_of_lanes_LR=3
linexR1#=OBJECT SCREEN X(trans(roadnumber).obstartr)
lineyR1#=OBJECT SCREEN Y(trans(roadnumber).obstartr)
linexR2#=OBJECT SCREEN X(trans(roadnumber).obendr)
lineyR2#=object screen y(trans(roadnumber).obendr)
`left
linexL1#=OBJECT SCREEN X(trans(roadnumber).obstartr)
lineyL1#=OBJECT SCREEN Y(trans(roadnumber).obstartr)
linexL2#=OBJECT SCREEN X(trans(roadnumber).obendr)
lineyL2#=object screen y(trans(roadnumber).obendr)
`second right
linexRR1#=OBJECT SCREEN X(trans(roadnumber).obstartrr)
lineyRR1#=OBJECT SCREEN Y(trans(roadnumber).obstartrr)
linexRR2#=OBJECT SCREEN X(trans(roadnumber).obendrr)
lineyRR2#=object screen y(trans(roadnumber).obendrr)
`second left
linexLL1#=OBJECT SCREEN X(trans(roadnumber).obstartll)
lineyLL1#=OBJECT SCREEN Y(trans(roadnumber).obstartll)
linexLL2#=OBJECT SCREEN X(trans(roadnumber).obendll)
lineyLL2#=object screen y(trans(roadnumber).obendll)
`farthest right
linexRRR1#=OBJECT SCREEN X(trans(roadnumber).obstartrrr)
lineyRRR1#=OBJECT SCREEN Y(trans(roadnumber).obstartrrr)
linexRRR2#=OBJECT SCREEN X(trans(roadnumber).obendrrr)
lineyRRR2#=object screen y(trans(roadnumber).obendrrr)
`Farthest left
linexLLL1#=OBJECT SCREEN X(trans(roadnumber).obstartlll)
lineyLLL1#=OBJECT SCREEN Y(trans(roadnumber).obstartlll)
linexLLL2#=OBJECT SCREEN X(trans(roadnumber).obendlll)
lineyLLL2#=object screen y(trans(roadnumber).obendlll)
line linexR1#, lineyR1#, linexR2#, lineyR2#
line linexl1#, lineyl1#, linexl2#, lineyl2#
line linexRR1#, lineyRR1#, linexRR2#, lineyRR2#
line linexll1#, lineyll1#, linexll2#, lineyll2#
line linexRRR1#, lineyRRR1#, linexRRR2#, lineyRRR2#
line linexlll1#, lineylll1#, linexlll2#, lineylll2#
endif
until mouseclick()=0
SET VECTOR3 2, pxx#, pyy#, pzz#
endpoint=1
ENDIF
endpoint=0
startpoint=0
placearray=0
ENDFUNCTION
function ShowPaths()
for showing=1 to ARRAY COUNT(trans())+1
select trans(showing-1).numberoflanes
case 1:
`right
roadRX=OBJECT SCREEN X(trans(showing-1).obstartr)
roadRy=OBJECT SCREEN y(trans(showing-1).obstartr)
roadRendX=OBJECT SCREEN X(trans(showing-1).obendr)
roadRendy=OBJECT SCREEN y(trans(showing-1).obendr)
`left
roadLX=OBJECT SCREEN X(trans(showing-1).obstartl)
roadLy=OBJECT SCREEN y(trans(showing-1).obstartl)
roadLendX=OBJECT SCREEN X(trans(showing-1).obendl)
roadLendy=OBJECT SCREEN y(trans(showing-1).obendl)
line roadRx, roadRy, roadRendx, roadRendy
line roadlx, roadly, roadlendx, roadlendy
endcase
case 2:
`right
roadRX=OBJECT SCREEN X(trans(showing-1).obstartr)
roadRy=OBJECT SCREEN y(trans(showing-1).obstartr)
roadRendX=OBJECT SCREEN X(trans(showing-1).obendr)
roadRendy=OBJECT SCREEN y(trans(showing-1).obendr)
`left
roadLX=OBJECT SCREEN X(trans(showing-1).obstartl)
roadLy=OBJECT SCREEN y(trans(showing-1).obstartl)
roadLendX=OBJECT SCREEN X(trans(showing-1).obendl)
roadLendy=OBJECT SCREEN y(trans(showing-1).obendl)
`second right
roadRrX=OBJECT SCREEN X(trans(showing-1).obstartrr)
roadRry=OBJECT SCREEN y(trans(showing-1).obstartrr)
roadRrendX=OBJECT SCREEN X(trans(showing-1).obendrr)
roadRrendy=OBJECT SCREEN y(trans(showing-1).obendrr)
`second left
roadLlX=OBJECT SCREEN X(trans(showing-1).obstartll)
roadLly=OBJECT SCREEN y(trans(showing-1).obstartll)
roadLlendX=OBJECT SCREEN X(trans(showing-1).obendll)
roadLlendy=OBJECT SCREEN y(trans(showing-1).obendll)
line roadRx, roadRy, roadRendx, roadRendy
line roadlx, roadly, roadlendx, roadlendy
line roadRrx, roadRry, roadRrendx, roadRrendy
line roadllx, roadlly, roadllendx, roadllendy
endcase
case 3:
`right
roadRX=OBJECT SCREEN X(trans(showing-1).obstartr)
roadRy=OBJECT SCREEN y(trans(showing-1).obstartr)
roadRendX=OBJECT SCREEN X(trans(showing-1).obendr)
roadRendy=OBJECT SCREEN y(trans(showing-1).obendr)
`left
roadLX=OBJECT SCREEN X(trans(showing-1).obstartl)
roadLy=OBJECT SCREEN y(trans(showing-1).obstartl)
roadLendX=OBJECT SCREEN X(trans(showing-1).obendl)
roadLendy=OBJECT SCREEN y(trans(showing-1).obendl)
`second right
roadRrX=OBJECT SCREEN X(trans(showing-1).obstartrr)
roadRry=OBJECT SCREEN y(trans(showing-1).obstartrr)
roadRrendX=OBJECT SCREEN X(trans(showing-1).obendrr)
roadRrendy=OBJECT SCREEN y(trans(showing-1).obendrr)
`second left
roadLlX=OBJECT SCREEN X(trans(showing-1).obstartll)
roadLly=OBJECT SCREEN y(trans(showing-1).obstartll)
roadLlendX=OBJECT SCREEN X(trans(showing-1).obendll)
roadLlendy=OBJECT SCREEN y(trans(showing-1).obendll)
`farthest right
roadRrrX=OBJECT SCREEN X(trans(showing-1).obstartrrr)
roadRrry=OBJECT SCREEN y(trans(showing-1).obstartrrr)
roadRrrendX=OBJECT SCREEN X(trans(showing-1).obendrrr)
roadRrrendy=OBJECT SCREEN y(trans(showing-1).obendrrr)
`farthest left
roadLllX=OBJECT SCREEN X(trans(showing-1).obstartlll)
roadLlly=OBJECT SCREEN y(trans(showing-1).obstartlll)
roadlLlendX=OBJECT SCREEN X(trans(showing-1).obendlll)
roadLllendy=OBJECT SCREEN y(trans(showing-1).obendlll)
line roadRx, roadRy, roadRendx, roadRendy
line roadlx, roadly, roadlendx, roadlendy
line roadRrx, roadRry, roadRrendx, roadRrendy
line roadllx, roadlly, roadllendx, roadllendy
line roadRrrx, roadRrry, roadRrrendx, roadRrrendy
line roadlllx, roadllly, roadlllendx, roadlllendy
endcase
endselect
NEXT showing
ENDFUNCTION
EDIT - YOU NEED IAN'S MATRIX UTILITIES PLUG INs
Illustration:
I see a lil' byte, its 1/4th a dword, Double float, Double float - but it doesnt beat a Global. Very very frightning, integers dividing me! Look a constant oh a constant. Oh-oh I just want the byte!