List<SurfaceCameraState> LoadCameraStatesFromFile(string fileName)
{
if (!File.Exists(fileName)) return null;
var states = new List<SurfaceCameraState>();
var lines = File.ReadAllLines(fileName);
for (int i = 0; i < lines.Length; i++) {
var line = lines[i];
var s = line.Split(new char[] {'\t'}, StringSplitOptions.RemoveEmptyEntries);
var curState = new SurfaceCameraState();
curState.Id = s[0];
curState.FreeSurfacePosition = new DVector3(double.Parse(s[1]), double.Parse(s[2]), double.Parse(s[3]));
curState.FreeSurfaceYaw = double.Parse(s[4]);
curState.FreeSurfacePitch = double.Parse(s[5]);
curState.WaitTime = float.Parse(s[6]);
curState.TransitionTime = float.Parse(s[7]);
curState.FreeRotation = DQuaternion.RotationAxis(DVector3.UnitY, curState.FreeSurfaceYaw) * DQuaternion.RotationAxis(DVector3.UnitX, curState.FreeSurfacePitch);
states.Add(curState);
}
return states;
}