/* CMD: LightSwarm
 *  Make cloud of lights from selected points on an object, save scene file.
 *  Load null object parent and all lights with LW 'LoadFromScene' option.
 * By Arnie Cachelin © 1993 NewTek Inc.
 *  $VER: Fri Oct  1 12:58:17 1993
 */
	mxx="LWModelerARexx.port"
	signal on error
	signal on syntax
	mxx_add = addlib(mxx,0)
	call main
	if (mxx_add) then call remlib(mxx)
	exit

	syntax:
	error:
	t=Notify(1,'!Rexx Script Error','@'ErrorText(rc),'Line 'SIGL)
	if (mxx_add) then call remlib(mxx)
	exit*NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF**NULADF*etval fint, 50.000
  call req_setval fdis, 0.0000
  call req_setval rgb, '255 255 255'
  if (~req_post()) then do
    call req_end
    return
  end
  type.1=req_getval(typ)-1
  name.1=req_getval(name)
  int.1=req_getval(intn)/100
  Fall.1=req_getval(fal)/100
  FlInt.1=req_getval(fint)/100
  FlDis.1=req_getval(fdis)/100
  color.1=req_getval(rgb)
  parse var color.1 r g b
  color.1= r%1 g%1 b%1
  shadow.1=req_getval(shad)
  flare.1=req_getval(flar)
  glow=req_getval(og)
  if glow then do
    call req_setval nam, name.1'_OG'
    if (~req_post()) then glow=0
    end
  if glow then do
    type.2=req_getval(typ)-1
    name.2=req_getval(name)
    int.2=req_getval(intn)/100
    Fall.2=req_getval(fal)/100
    FlInt.2=req_getval(fint)/100
    FlDis.2=req_getval(fdis)/100
    color.2=req_getval(rgb)
    parse var color.2 r g b
    color.2= r%1 g%1 b%1
    shadow.2=req_getval(shad)
    flare.2=req_getval(flar)
    end
  call req_end
  say filename
  if ~open(MotFile,filename,'W') then call Bummer("Can't open file "filename)
  Call WriteStart()

  do i=1 to num
    parse value xfrm_getpos(i) with x y z .
    Call WriteLight(i,1)
    if glow then Call WriteLight(i,2)
    end
  Call WriteEnd()
  call Close(MotFile)
  return

WriteStart:  PROCEDURE  EXPOSE MotFile
  call writeln(MotFile,"LWSC")
  call writeln(MotFile,"1")
  call writeln(MotFile,"")
  call writeln(MotFile,"FirstFrame 1")
  call writeln(MotFile,"LastFrame 1")
  call writeln(MotFile,"FrameStep 1")
  call writeln(MotFile,"")
  call writeln(MotFile,"LoadObject Objects/NullObject")
  call writeln(MotFile,"ObjectMotion (unnamed)")
  call writeln(MotFile,"  9")
  call writeln(MotFile,"  1")
  call writeln(MotFile,"  0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0")
  call writeln(MotFile,"  0 0 0.0 0.0 0.0")
  call writeln(MotFile,"EndBehavior 1")
  call writeln(MotFile,"ShadowOptions 7")
  call writeln(MotFile,"")
  return

WriteEnd:  PROCEDURE  EXPOSE MotFile
  call writeln(MotFile,"CameraMotion (unnamed)")
  call writeln(MotFile,"  9")
  call writeln(MotFile,"  1")
  call writeln(MotFile,"  0.002420 24.997030 -144.084366 0.0 0.0 0.0 1.0 1.0 1.0")
  call writeln(MotFile,"  0 0 0.0 0.0 0.0")
  call writeln(MotFile,"EndBehavior 1")
  call writeln(MotFile,"ZoomFactor 3.200000")
  call writeln(MotFile,"RenderMode 2")
  call writeln(MotFile,"RayTraceEffects 0")
  call writeln(MotFile,"Resolution 1")
  call writeln(MotFile,"Overscan 1")
  call writeln(MotFile,"Antialiasing 0")
  call writeln(MotFile,"AdaptiveSampling 1")
  call writeln(MotFile,"AdaptiveThreshold 8")
  call writeln(MotFile,"FilmSize 2")
  call writeln(MotFile,"FieldRendering 0")
  call writeln(MotFile,"MotionBlur 0")
  call writeln(MotFile,"DepthOfField 0")
  call writeln(MotFile,"")
  call writeln(MotFile,"SolidBackdrop 1")
  call writeln(MotFile,"BackdropColor 0 0 0")
  call writeln(MotFile,"ZenithColor 0 40 80")
  call writeln(MotFile,"SkyColor 120 180 240")
  call writeln(MotFile,"GroundColor 50 40 30")
  call writeln(MotFile,"NadirColor 100 80 60")
  call writeln(MotFile,"FogType 0")
  call writeln(MotFile,"DitherIntensity 1")
  call writeln(MotFile,"AnimatedDither 0")
  call writeln(MotFile,"")
  call writeln(MotFile,"DataOverlayLabel ")
  call writeln(MotFile,"")
  call writeln(MotFile,"ViewMode 5")
  call writeln(MotFile,"ViewAimpoint 0.000000 0.000000 0.000000")
  call writeln(MotFile,"ViewDirection 0.000000 -0.174533 0.000000")
  call writeln(MotFile,"ViewZoomFactor 3.200000")
  call writeln(MotFile,"LayoutGrid 3")
  call writeln(MotFile,"GridSize 50.000000")
  call writeln(MotFile,"ShowObjects 1")
  call writeln(MotFile,"ShowBones 0")
  call writeln(MotFile,"ShowLights 1")
  call writeln(MotFile,"ShowCamera 1")
  call writeln(MotFile,"ShowMotionPath 1")
  call writeln(MotFile,"ShowSafeAreas 0")
  call writeln(MotFile,"ShowBGImage 0")
  call writeln(MotFile,"ShowFogRadius 0")
  call writeln(MotFile,"ShowRedraw 0")
  return

/* Change the text in this routine to change lights produced */
WriteLight: PROCEDURE EXPOSE MotFile x y z color. int. type. shadow. flare. name. Fall. FlInt. FlDis.
  arg n, f
  channels="  "||x y z||" 0.0 0.0 0.0 1.0 1.0 1.0"
  spline="  0 0 0.0 0.0 0.0"
  say channels spline
  call writeln(MotFile,"AddLight")
  call writeln(MotFile,"LightName "name.f)
  call writeln(MotFile,"LightMotion (unnamed)")
  call writeln(MotFile,"  9") /* Channels */
  call writeln(MotFile,"  1")
  call writeln(MotFile,channels)
  call writeln(MotFile,spline)
  call writeln(MotFile,"EndBehavior 1")
  call writeln(MotFile,"ParentObject 1") /* Our NULL Object */
  call writeln(MotFile,"LightColor "color.f)
  call writeln(MotFile,"LgtIntensity "int.f)
  call writeln(MotFile,"LightType "type.f)
  call writeln(MotFile,"Falloff "Fall.f)
  if flare~=0 then do
    call writeln(MotFile,"LensFlare 1")
    call writeln(MotFile,"FlareIntensity "FlInt.f)
    call writeln(MotFile,"FlareDissolve "FlDis.f)
    call writeln(MotFile,"LensFlareFade 28")     /* You'll have to play around  */
    call writeln(MotFile,"LensFlareOptions 33") /* figure these two out... */
    end
  else call writeln(MotFile,"LensFlare 0")
  if shadow.f~=0 then  call writeln(MotFile,"ShadowCasting 1")
  else   call writeln(MotFile,"ShadowCasting 0")

  call writeln(MotFile,"")
  return

Bummer:
 ARG etxt
	t=Notify(1,'!Rexx Script Error','@'ETxt)
 exit

