# FlyPath.sml # startup script for TNTsim3D to loop through a flight path created by the # SMLrecorder and saved as a text file named path.txt. ##################################################################################### ### For a script to run under TNTsim3D, it must include an instance of ### class TNTSIM3D named "TNTsim3D". The script must also be saved as an RVC ### object in the TNTsim3D Landscape File you want to run it with. ##################################################################################### # declare class instance for TNTsim3D interface class class TNTSIM3D TNTsim3D; # turn on default sky TNTsim3D.SetSky(1); # declare arrays to hold viewer position coordinates and orientation angles in memory numeric maxindices = 10000; array numeric viewerx[maxindices]; array numeric viewery[maxindices]; array numeric viewerz[maxindices]; array numeric orientationx[maxindices]; array numeric orientationy[maxindices]; array numeric orientationz[maxindices]; numeric numindices = 0; # number of indices in array set numeric index = 0; # current index during play # set name of text file containing the saved flight path string filename$ = _context.ScriptDir + "/path.txt"; # exit script if no path text file if (fexists(filename$, "r") == 0) Exit(); # open path text file, convert positions to numbers and read into numeric arrays class FILE file = fopen(filename$, "r"); string string$ = "something"; # variable to hold line of text from file numindices = 0; while (string$ != "") { # while string is not empty string$ = fgetline$(file); # read line of text file to string if (NumberTokens(string$, ",") != 6) continue; viewerx[numindices] = StrToNum(GetToken(string$, ",", 1)); viewery[numindices] = StrToNum(GetToken(string$, ",", 2)); viewerz[numindices] = StrToNum(GetToken(string$, ",", 3)); orientationx[numindices] = StrToNum(GetToken(string$, ",", 4)); orientationy[numindices] = StrToNum(GetToken(string$, ",", 5)); orientationz[numindices] = StrToNum(GetToken(string$, ",", 6)); numindices++; # increment number of indices } # procedure called automatically for each frame proc OnFrame () { if (index >= numindices) then index = 0; # if at end of path, go back to # beginning of path local class POINT3D viewer, orientation; viewer.x = viewerx[index]; # viewer position viewer.y = viewery[index]; viewer.z = viewerz[index]; orientation.x = orientationx[index]; # viewer orientation (x = pitch, orientation.y = orientationy[index]; # y = roll, z = heading azimuth orientation.z = orientationz[index]; TNTsim3D.SetSceneByOrientation(viewer, orientation); # set frame index++; # increment current index }