/* CMD: MagTerr
 * Magnet Terrain Generator By Bony
 */


address "LWModelerARexx.port"
call addlib "LWModelerARexx.port", 0
SIGNAL ON ERROR
SIGNAL ON SYNTAX
call addlib "rexxsupport.library", 0, -30, 0
call addlib "rexxmathlib.library", 0, -30, 0
sysnam = ' '
version = ''
call random(,,time('s'))
/* Set up requester */
call REQ_BEGIN ("Bony's Magnet Terrain Generator")

id_TW = REQ_ADDCONTROL("Terrain Width", 'n')
id_TL = REQ_ADDCONTROL("Terrain Length", 'n')
id_WS = REQ_ADDCONTROL("Width Segments", 'n')
id_LS = REQ_ADDCONTROL("Length Segments", 'n')
id_MR = REQ_ADDCONTROL("Max. Peak Radius", 'n')
id_MS = REQ_ADDCONTROL("Peak Height", 'CH', 'Low Medium High')
id_IT = REQ_ADDCONTROL("No. of Peaks", 'n')
id_JIT = REQ_ADDCONTROL("Jitter", 'B')
id_JITSET = REQ_ADDCONTROL("Jitter Strength", 'CH', 'Low Medium High')

call REQ_SETVAL id_TW, 20
call REQ_SETVAL id_TL, 20
call REQ_SETVAL id_WS, 40
call REQ_SETVAL id_LS, 40
call REQ_SETVAL id_MR, 2
call REQ_SETVAL id_MS, 1
call REQ_SETVAL id_IT, 10
call REQ_SETVAL id_JIT, 1
call REQ_SETVAL id_JITSET, 1

/* Post requester, exit on cancel. */
if (~req_post()) then do
    call req_end
    exit
end
req=1

/* Get input from Requester */
Twidth = req_getval(id_TW)
Tlength = req_getval(id_TL)
WidthSeg = req_getval(id_WS)
LengthSeg = req_getval(id_LS)
MagRad = req_getval(id_MR)
MagStrength = req_getval(id_MS)
Jitstate = req_getval(id_JIT)
Jitstren = req_getval(id_JITSET)

itr = req_getval(id_IT)

if Twidth < 1 then do
        Twidth = 1
call REQ_SETVAL id_TW, 1
end
if Tlength < 1 then do
        Tlength = 1
call REQ_SETVAL id_TL, 1
end
if WidthSeg < 1 then do
        WidthSeg = 1
call REQ_SETVAL id_WS, 1
end
if LengthSeg < 1 then do
        LengthSeg = 1
call REQ_SETVAL id_LS, 1
end
if MagRad < 1 then do
        Magrad = 1
end
if MagRad > 999 then do
        Magrad = 999
call REQ_SETVAL id_MR, 1
end
if Itr < 1 then do
        itr = 1
call REQ_SETVAL id_IT, 1
end

say twidth
say tlength
say widthseg
say lengthseg
say magrad

req=0
call REQ_END

/* Done Getting Data! */

/* Make Box */
NX = ((twidth / 2) * -1)
NZ = ((tlength / 2) * -1)
PX = twidth / 2
PZ = Tlength / 2
WS = widthseg
LS = lengthseg
zer = 0


do
          call MAKEBOX( zer, PX zer PZ, WS zer LS)
end

if magstrength = 1 then do
        MS = 1
end
if magstrength = 2 then do
        MS = 2

end
if magstrength = 3 then do
        MS = 3

end

do for itr


kx = random(0,PX)



kz = random(0,PZ)


mrad = random(1,magrad)




os = (randu() * MS)
say tryit



call DEFORMREGION(mrad,kx zer kz, Y )

call MAGNET(zer os zer)
end


call TRIPLE()

if Jitstate = 1 then do


	if Jitstren = 1 then do
		
		j = (PX *.003)
		j2 = (PZ * .003)
	end

	if Jitstren = 2 then do
		j = (PX *.005)
		j2 = (PZ * .005)
	end
	
	if Jitstren = 3 then do
		j = (PX *.007)
		j2 = (PZ * .007)
	end
		
	
	

	call JITTER(j j j2)

end


box=boundingbox()  /* Should check out empty list ...  */
parse var box n x1 x2 y1 y2 z1 z2
say box
cx=-(x2+x1)/2
cy=-(y2+y1)/2
cz=-(z2+z1)/2


  call MOVE(cx 0 cz)


call SURFACE("BonyTerrain")


/* Insert stuff here! */



exit

SYNTAX:
ERROR:
  say 'Sorry, Error #'RC' on line 'SIGL' has been detected.'
  say errortext(rc)
  say sourceline(SIGL)
  t=notify(1,'!Total Bummer Dude!','!An error has been detected.','@'ErrorText(rc),'Line 'SIGL)
  if req then call req_end
  exit
