#Vue 5i Animated EcoSystem figure control script
#by John HJ Whitham March 2005
#Information and updates from: http://www.jwhitham.plus.com/VuePython.html

s = Prompt("Enter the exact name of the terrain to apply the script to (case sensitive).", \
  "",false,"Terrain Name")
T = ObjectByName(s)
if (T==None):
  Message("Unable to find object " + s)
else:
  offset = eval(Prompt("Enter the distance travelled by figure per second in Vue units.", \
    "",true,"Distance per second"))
  offset = float(offset)
set_start = Message("Set this as the startup script?","",5)
if (set_start==2):
  SetPythonStartupScriptPath("Python/Scripts/EcoSystem/FM1Temp.py")

def pyFigureMarchCallback(k):
  T = ObjectByName(s)
  Eco = GetEcosystemOnObject(T)
  for i in range(0,Eco.GetInstanceCount()):
    pos = Eco.GetInstancePosition(i)
    scale = Eco.GetInstanceScale(i)
    newpos = pos[1] - (offset / float(FrameRate()) * scale[2])
    altitude = GetAltitudeOnEcosystemAt(Eco,pos[0],newpos)
    Eco.SetInstancePosition(i,pos[0],newpos,altitude)

if (offset!=0):
  T.SetInitFrameCallback(pyFigureMarchCallback)
if (set_start==2):
  f=open("FM1Temp.py","w")
  f.write("def pyFigureMarchCallback(k):\n")
  f.write("  T = ObjectByName(" + "'" + s + "'" + ")\n")
  f.write("  Eco = GetEcosystemOnObject(T)\n")
  f.write("  for i in range(0,Eco.GetInstanceCount()):\n")
  f.write("    pos = Eco.GetInstancePosition(i)\n")
  f.write("    scale = Eco.GetInstanceScale(i)\n")
  f.write("    newpos = pos[1] - (" + `offset` + " / float(FrameRate()) * scale[2])\n")
  f.write("    altitude = GetAltitudeOnEcosystemAt(Eco,pos[0],newpos)\n")
  f.write("    Eco.SetInstancePosition(i,pos[0],newpos,altitude)\n")
  f.write("\n")
  f.write("T.SetInitFrameCallback(pyFigureMarchCallback)")
  f.close()
