예제 #1
0
        public void RecordEntry(long curtime, Vector3 pos, Vector3 d, float z, long etime, long timetofly, long timetopan, long timetozoom, string msg, long mtime)
        {
            FlightEntry fe = new FlightEntry();

            fe.pos         = pos;
            fe.dir         = d;
            fe.zoom        = z;
            fe.offsettime  = etime;                 // at this time , fly to pos turn to dir in time specified
            fe.timetofly   = timetofly;
            fe.timetopan   = timetopan;
            fe.timetozoom  = timetozoom;
            fe.message     = msg;
            fe.messagetime = mtime;
            entries.Add(fe);
            lasttime = curtime;                     // keep these up to date in case we are doing a normal record, or swap back to it
            lastdir  = d;
            lastpos  = pos;
            lastzoom = z;
        }
예제 #2
0
        public void Record(Vector3 pos, Vector3 d, float z)
        {
            if (playbackpos < 0 && record && !recordstep && !pause)
            {
                if (pos != lastpos || d != lastdir || z != lastzoom)
                {
                    FlightEntry fe      = new FlightEntry();
                    long        curtime = timer.ElapsedMilliseconds;

                    RecordEntry(curtime, (pos != lastpos) ? pos : FlightEntry.NullVector,
                                (d != lastdir) ? d : FlightEntry.NullVector,
                                (z != lastzoom) ? z : FlightEntry.NullZoom,
                                curtime - lasttime, 0, 0, 0, "", 0);


                    //Console.WriteLine("At {0} store {1} {2} {3}", entries[entries.Count - 1].offsettime, lastpos, lastdir, lastzoom);
                }
            }
        }
예제 #3
0
        public bool PlayBack(out FlightEntry fe, bool inslews)
        {
            fe = null;

            if (!pause && playbackpos >= 0)
            {
                if (playbackpos == entries.Count)
                {
                    StopPlayBack();
                }
                else
                {
                    long offsettime = entries[playbackpos].offsettime;
                    long ms         = timer.ElapsedMilliseconds;
                    long targettime = offsettime + lasttime;

                    if (offsettime == FlightEntry.WaitForComplete)                     // <0 means wait for slews
                    {
                        if (!inslews)
                        {
                            lasttime = ms;
                            fe       = entries[playbackpos++];
                            return(true);
                        }
                    }
                    else if (ms >= targettime)
                    {
                        lasttime = targettime;
                        fe       = entries[playbackpos++];
                        return(true);
                    }
                }
            }

            return(false);
        }
예제 #4
0
        public bool ReadFromFile(string filename)
        {
            StopRecord();
            StopPlayBack();

            List <FlightEntry> newentries = new List <FlightEntry>();

            try
            {
                using (StreamReader sr = new StreamReader(filename))
                {
                    using (JsonTextReader jr = new JsonTextReader(sr))
                    {
                        bool first = true;

                        while (jr.Read())
                        {
                            if (jr.TokenType == JsonToken.StartObject)
                            {
                                JObject jo = JObject.Load(jr);

                                if (first)
                                {
                                    string vnum     = (string)jo["FlightType"];
                                    string datetime = (string)jo["Date"];
                                    first = false;
                                }
                                else
                                {
                                    FlightEntry fe = new FlightEntry();
                                    fe.offsettime = (long)jo["T"];
                                    JArray ja = (JArray)jo["Pos"];

                                    if (ja != null)
                                    {
                                        fe.pos       = new Vector3((float)ja[0], (float)ja[1], (float)ja[2]);
                                        fe.timetofly = ReadLong(jo, "FlyTime", 0);
                                    }
                                    else
                                    {
                                        fe.pos = FlightEntry.NullVector;
                                    }

                                    JArray jb = (JArray)jo["Dir"];

                                    if (jb != null)
                                    {
                                        fe.dir       = new Vector3((float)jb[0], (float)jb[1], (float)jb[2]);
                                        fe.timetopan = ReadLong(jo, "PanTime", 0);
                                    }
                                    else
                                    {
                                        fe.dir = FlightEntry.NullVector;
                                    }

                                    JToken jtmt = jo["Z"];

                                    if (jtmt != null)
                                    {
                                        fe.zoom       = (float)jo["Z"];
                                        fe.timetozoom = ReadLong(jo, "ZTime", 0);
                                    }
                                    else
                                    {
                                        fe.zoom = FlightEntry.NullZoom;
                                    }

                                    fe.message     = (string)jo["Msg"];
                                    fe.messagetime = ReadLong(jo, "MsgTime", 0);

                                    newentries.Add(fe);
                                }
                            }
                        }
                    }
                }

                entries = newentries;
                return(true);
            }
            catch   {   }

            return(false);
        }
예제 #5
0
        public bool ReadFromFile(string filename)
        {
            StopRecord();
            StopPlayBack();

            List <FlightEntry> newentries = new List <FlightEntry>();

            try
            {
                string json  = File.ReadAllText(filename);
                JArray outer = JArray.Parse(json);

                if (outer != null)
                {
                    JObject ftype = outer[0].Object();
                    if (ftype != null)
                    {
                        for (int i = 1; i < outer.Count; i++)
                        {
                            JObject entry = outer[i].Object();

                            if (entry == null)
                            {
                                continue;
                            }

                            FlightEntry fe = new FlightEntry();
                            fe.offsettime = entry["T"].Long();

                            JArray ja = entry["Pos"].Array();

                            if (ja != null)
                            {
                                fe.pos       = new Vector3((float)ja[0], (float)ja[1], (float)ja[2]);
                                fe.timetofly = entry["FlyTime"].Long();
                            }
                            else
                            {
                                fe.pos = FlightEntry.NullVector;
                            }

                            JArray jb = entry["Dir"].Array();

                            if (jb != null)
                            {
                                fe.dir       = new Vector3((float)jb[0], (float)jb[1], (float)jb[2]);
                                fe.timetopan = entry["PanTime"].Long();
                            }
                            else
                            {
                                fe.dir = FlightEntry.NullVector;
                            }


                            JToken jtmt = entry["Z"];

                            if (jtmt != null)
                            {
                                fe.zoom       = entry["Z"].Float();
                                fe.timetozoom = entry["ZTime"].Long();
                            }
                            else
                            {
                                fe.zoom = FlightEntry.NullZoom;
                            }

                            fe.message     = entry["Msg"].Str();
                            fe.messagetime = entry["MsgTime"].Long();

                            newentries.Add(fe);
                        }
                    }
                }

                entries = newentries;
                return(true);
            }
            catch   {   }

            return(false);
        }
예제 #6
0
 public void RecordEntry(long curtime, Vector3 pos, Vector3 d, float z, long etime, long timetofly, long timetopan, long timetozoom, string msg , long mtime)
 {
     FlightEntry fe = new FlightEntry();
     fe.pos = pos;
     fe.dir = d;
     fe.zoom = z;
     fe.offsettime = etime;                  // at this time , fly to pos turn to dir in time specified
     fe.timetofly = timetofly;
     fe.timetopan = timetopan;
     fe.timetozoom = timetozoom;
     fe.message = msg;
     fe.messagetime = mtime;
     entries.Add(fe);
     lasttime = curtime;                     // keep these up to date in case we are doing a normal record, or swap back to it
     lastdir = d;
     lastpos = pos;
     lastzoom = z;
 }
예제 #7
0
        public void Record(Vector3 pos, Vector3 d, float z)
        {
            if (playbackpos<0 && record && !recordstep && !pause)
            {
                if (pos != lastpos || d != lastdir || z != lastzoom)
                {
                    FlightEntry fe = new FlightEntry();
                    long curtime = timer.ElapsedMilliseconds;

                    RecordEntry(curtime,(pos != lastpos) ? pos : FlightEntry.NullVector,
                                        (d != lastdir) ? d : FlightEntry.NullVector,
                                        (z != lastzoom) ? z : FlightEntry.NullZoom ,
                                        curtime - lasttime, 0, 0, 0, "",0);

                    //Console.WriteLine("At {0} store {1} {2} {3}", entries[entries.Count - 1].offsettime, lastpos, lastdir, lastzoom);
                }
            }
        }
예제 #8
0
        public bool ReadFromFile(string filename)
        {
            StopRecord();
            StopPlayBack();

            List<FlightEntry> newentries = new List<FlightEntry>();

            try
            {
                using (StreamReader sr = new StreamReader(filename))
                {
                    using (JsonTextReader jr = new JsonTextReader(sr))
                    {
                        bool first = true;

                        while (jr.Read())
                        {
                            if (jr.TokenType == JsonToken.StartObject)
                            {
                                JObject jo = JObject.Load(jr);

                                if (first)
                                {
                                    string vnum = (string)jo["FlightType"];
                                    string datetime = (string)jo["Date"];
                                    first = false;
                                }
                                else
                                {
                                    FlightEntry fe = new FlightEntry();
                                    fe.offsettime = (long)jo["T"];
                                    JArray ja = (JArray)jo["Pos"];

                                    if (ja != null)
                                    {
                                        fe.pos = new Vector3((float)ja[0], (float)ja[1], (float)ja[2]);
                                        fe.timetofly = ReadLong(jo, "FlyTime", 0);
                                    }
                                    else
                                        fe.pos = FlightEntry.NullVector;

                                    JArray jb = (JArray)jo["Dir"];

                                    if (jb != null)
                                    {
                                        fe.dir = new Vector3((float)jb[0], (float)jb[1], (float)jb[2]);
                                        fe.timetopan = ReadLong(jo, "PanTime", 0);
                                    }
                                    else
                                        fe.dir = FlightEntry.NullVector;

                                    JToken jtmt = jo["Z"];

                                    if (jtmt != null)
                                    {
                                        fe.zoom = (float)jo["Z"];
                                        fe.timetozoom = ReadLong(jo, "ZTime", 0);
                                    }
                                    else
                                        fe.zoom = FlightEntry.NullZoom;

                                    fe.message = (string)jo["Msg"];
                                    fe.messagetime = ReadLong(jo, "MsgTime", 0);

                                    newentries.Add(fe);
                                }
                            }
                        }
                    }
                }

                entries = newentries;
                return true;
            }
            catch   {   }

            return false;
        }
예제 #9
0
        public bool PlayBack(out FlightEntry fe , bool inslews )
        {
            fe = null;

            if (!pause && playbackpos >= 0)
            {
                if (playbackpos == entries.Count)
                    StopPlayBack();
                else
                {
                    long offsettime = entries[playbackpos].offsettime;
                    long ms = timer.ElapsedMilliseconds;
                    long targettime = offsettime + lasttime;

                    if (offsettime == FlightEntry.WaitForComplete)                     // <0 means wait for slews
                    {
                        if ( !inslews )
                        {
                            lasttime = ms;
                            fe = entries[playbackpos++];
                            return true;
                        }
                    }
                    else if ( ms >= targettime )
                    {
                        lasttime = targettime;
                        fe = entries[playbackpos++];
                        return true;
                    }
                }
            }

            return false;
        }