예제 #1
0
 public void Set(SimulateDllModel dllmodel, int time)
 {
     Move(time);
     if (CurrentSegment != null &&
         CurrentSegment.TimeStart <= time &&
         CurrentSegment.TimeEnd >= time)
     {
         SVUnit.Value = CurrentSegment.Value;
         SVUnit.Set(dllmodel);
     }
 }
예제 #2
0
        public void Update(SimulateDllModel dllmodel, int time)
        {
            SVUnit.Update(dllmodel);
            Move(time);
            ValueSegment nseg = null;

            if (CurrentSegment != null)
            {
                nseg = CurrentSegment;
                if (time > nseg.TimeEnd)
                {
                    if (!SVUnit.Value.Equals(nseg.Value))
                    {
                        nseg           = nseg.Clone();
                        nseg.Value     = SVUnit.Value;
                        nseg.TimeStart = nseg.TimeEnd + 1;
                        nseg.TimeEnd   = time;
                        values.Insert(CurrentIndex + 1, nseg);
                    }
                    else
                    {
                        nseg.TimeEnd = time;
                    }
                }
                else if (time >= nseg.TimeStart && time <= nseg.TimeEnd)
                {
                    if (!SVUnit.Value.Equals(nseg.Value))
                    {
                        values.Remove(nseg);
                        ValueSegment lseg = nseg.Clone();
                        ValueSegment rseg = nseg.Clone();
                        nseg           = nseg.Clone();
                        lseg.TimeEnd   = time - 1;
                        rseg.TimeStart = time + 1;
                        nseg.TimeStart = nseg.TimeEnd = time;
                        nseg.Value     = SVUnit.Value;
                        if (rseg.TimeEnd >= rseg.TimeStart)
                        {
                            values.Insert(CurrentIndex, rseg);
                        }
                        values.Insert(CurrentIndex, nseg);
                        if (lseg.TimeEnd >= lseg.TimeStart)
                        {
                            values.Insert(CurrentIndex, lseg);
                        }
                    }
                }
                else
                {
                    throw new ArgumentException(String.Format("Cannot get value segment related to time {0:d}", time));
                }
            }
            else if (values.Count() == 0)
            {
                Init(time);
                CurrentIndex         = 0;
                CurrentSegment.Value = SVUnit.Value;
            }
            else if (CurrentIndex < 0)
            {
                nseg           = values.First().Clone();
                nseg.Value     = SVUnit.Value;
                nseg.TimeStart = nseg.TimeEnd = time;
                values.Insert(0, nseg);
            }
            else
            {
                throw new ArgumentException(String.Format("Cannot get value segment related to time {0:d}", time));
            }
        }