-- Animation Script Exporter
-- Version 0.2
-- by Martijn Buijs
-- Copyright TresCom, 2004

global fileobj
global forcedrate
global skiphidden
global skipfrozen
global cancelloop
global currentframe

fn WriteFrame obj =
(
 format "frame %\n" (sliderTime.frame as integer) to: fileobj
 format "pos % % %\n" obj.position.x obj.position.y obj.position.z to: fileobj
 format "rot % % % %\n" obj.rotation.x obj.rotation.y obj.rotation.z obj.rotation.w to: fileobj
 format "scale %\n\n" ((obj.scale.x + obj.scale.y + obj.scale.z) / 3) to: fileobj
)

fn WriteAllFrames obj =
(
 local j
 for j=animationRange.start to animationRange.end do
 (
  sliderTime = j
  WriteFrame obj
  cancelloop = getProgressCancel() --why is it shown twice???
  if cancelloop == true do exit
 )
)

fn WriteKeyFrames obj =
(
 --todo
)

fn ExpObj obj = 
( 
 local b
 b = false
 case superclassof(obj) of
 (
  GeometryClass:
  (
   case classof(obj) of
   (
    TargetObject: b = false
	default: b = true
   )
   if b == true then
   (
    format "object %\n\n" obj.name to: fileobj
   )
  )
  camera:
  (
   if classof(obj) == FreeCamera do
   (
    format "object Camera\n\n" obj.name to: fileobj
	b = true
   )
  )
 )
 if b == true then
 (
  if currentframe == true then
  (
   WriteFrame obj
  ) else (
   if forcedrate == true then
   (
    WriteAllFrames obj
   ) else (
    WriteKeyFrames obj
   )
  )
  format "end_object\n\n" to: fileobj
 ) else (
  format "Skipping %...\n" obj.name
 )
)

fn Export =
(
 local filename
 local i
 local b
 filename = getSaveFileName caption: "Export Animation" types: "Animation Script (*.asa)|*.asa|All Files (*.*)|*.*"
 if filename != undefined then
 (
  fileobj = createfile filename
  format "version 2\n" to: fileobj
  if forcedrate = true then
  (
   format "forced_rate %\n\n" frameRate to: fileobj
  ) else (
   format "forced_rate 0\n\n" to: fileobj
  )
  progressStart "Exporting..."
  cancelloop = false
  for i=1 to objects.count do
  (
   if skiphidden == true then
   (
    b = not objects[i].isHidden
	--if b == false do format "% is hidden!\n" objects[i].name
   ) else (
    b = true
   )
   if b == true do
   (
    if skipfrozen == true then
    (
     b = not objects[i].isFrozen
	 --if b == false do format "% is frozen!\n" objects[i].name
    ) else (
     b = true
    )
   )
   if b == true then
   (
    ExpObj objects[i]
   ) else (
    format "Skipping %...\n" objects[i].name
   )
   progressUpdate (100 * i / objects.count)
   if cancelloop == true do exit
  )
  progressEnd()
  close fileobj
  messageBox "Done."
 )
)

utility AsaExp "AsaExp"
(
 group "About"
 (
  label lab1 "Animation Script Exporter"
  label lab2 "Version 0.2"
  label lab3 "by Martijn Buijs"
  label lab4 "Copyright TresCom, 2004"
 )
 group "Export"
 (
  checkbox chkForcedRate "Forced Framerate" enabled: false checked: true
  checkbox chkSkipHidden "Skip Hidden Objects" checked: true
  checkbox chkSkipFrozen "Skip Frozen Objects" checked: true
  button cmdFrame "Export Current Frame..." width: 140
  button cmdAnimation "Export Animation..." width: 140
 )
 on cmdFrame pressed do
 (
  forcedrate = chkForcedRate.checked
  skiphidden = chkSkipHidden.checked
  skipfrozen = chkSkipFrozen.checked
  currentframe = true
  Export()
 )
 on cmdAnimation pressed do
 (
  forcedrate = chkForcedRate.checked
  skiphidden = chkSkipHidden.checked
  skipfrozen = chkSkipFrozen.checked
  currentframe = false
  Export()
 )
)

