Exemplo n.º 1
0
            public bool CollidesWith(BaseScheduleItem other)
            {
                var paddedStartTime = StartTime;
                var paddedEndTime   = EndTime;

                if (this.GetType() != other.GetType())
                {
                    paddedStartTime = StartTime.Subtract(TimeSpan.FromMinutes(10));
                    paddedEndTime   = EndTime.Add(TimeSpan.FromMinutes(10));
                }

                // AAAA
                //      BBBB

                // AAAAAAA
                //      BBBB

                // AAAAAAAAAAAAA
                //      BBBB

                //       AA
                //      BBBB

                // Easier to determine if it does NOT collide
                bool doesNotCollide = paddedEndTime <= other.StartTime || paddedStartTime >= other.EndTime;

                return(!doesNotCollide);
            }
Exemplo n.º 2
0
 void OnStep(int stepNumber)
 {
     while (schedule.Count > 0 && stepNumber >= schedule.First.ScheduledStep)
     {
         BaseScheduleItem item = schedule.Dequeue();
         itemDict.Remove(item.ID);
         item.Activate();
     }
 }
Exemplo n.º 3
0
        private static void AccomodateTouchingItemsIfNeeded(BaseScheduleItem first, BaseScheduleItem second)
        {
            const int collisionPadding = 8;

            if (first.StartTime == second.EndTime)
            {
                second.EndTime  = second.EndTime.Subtract(TimeSpan.FromMinutes(collisionPadding / 2));
                first.StartTime = first.StartTime.Add(TimeSpan.FromMinutes(collisionPadding / 2));
            }

            else if (first.EndTime == second.StartTime)
            {
                first.EndTime    = first.EndTime.Subtract(TimeSpan.FromMinutes(collisionPadding / 2));
                second.StartTime = second.StartTime.Add(TimeSpan.FromMinutes(collisionPadding / 2));
            }
        }