Exemple #1
0
        private void RunHalfHourlyTestLoop(ExerciseSchedule schedule)
        {
            for (var testTime = _startTime; testTime <= _startTime.AddDays(1).AddMinutes(-1); testTime = testTime.AddMinutes(1))
            {
                var nextRunTime = TickUtility.MockNow_GetNextRunTime(schedule, testTime);

                Assert.IsTrue(nextRunTime.Minute == 0 || nextRunTime.Minute == 30,
                              $"Minutes generated for {testTime} must equal 0 or 30. Current value is {nextRunTime.Minute}");

                if (testTime.TimeOfDay < schedule.StartTime.TimeOfDay)
                {
                    Assert.AreEqual(GetTodaysStartTime(schedule), nextRunTime);
                }
                else if (testTime.TimeOfDay >= schedule.EndTime.TimeOfDay)
                {
                    Assert.AreEqual(GetTomorrowsStartTime(schedule), nextRunTime);
                }
                else
                {
                    if (testTime.Minute < 30)
                    {
                        Assert.IsTrue(nextRunTime.Minute == 30,
                                      $"Minutes must be set to 30 for {testTime}. Current value is {nextRunTime.Minute}");
                    }
                    else
                    {
                        Assert.IsTrue(nextRunTime.Minute == 0,
                                      $"Minutes must be set to 0 for {testTime}. Current value is {nextRunTime.Minute}");
                    }
                }
            }
        }
 public static void Postfix(ResourceCounter __instance)
 {
     if (TickUtility.NoOverlapTickMod(204))
     {
         __instance.UpdateResourceCounts();
     }
 }
Exemple #3
0
        private void RunBiHourlyTestLoop(ExerciseSchedule schedule)
        {
            DateTime?previousRunTime = null;

            for (var testTime = _startTime; testTime <= _startTime.AddDays(1).AddMinutes(-1); testTime = testTime.AddMinutes(1))
            {
                var nextRunTime = TickUtility.MockNow_GetNextRunTime(schedule, testTime);

                Assert.IsTrue(nextRunTime.Minute == 0,
                              $"Minutes generated for {testTime} must equal 0. Current value is {nextRunTime.Minute}");

                if (testTime.TimeOfDay < schedule.StartTime.TimeOfDay)
                {
                    Assert.AreEqual(GetTodaysStartTime(schedule), nextRunTime);
                }
                else if (testTime.TimeOfDay >= schedule.EndTime.TimeOfDay)
                {
                    Assert.AreEqual(GetTomorrowsStartTime(schedule), nextRunTime);
                }
                else if (previousRunTime.HasValue)
                {
                    Assert.IsTrue(previousRunTime.Value == nextRunTime ||
                                  previousRunTime.Value.AddHours(2) == nextRunTime ||
                                  nextRunTime == GetTomorrowsStartTime(schedule),
                                  $"Previous Run Time: {previousRunTime.Value}, Next Run Time {nextRunTime}");
                }

                previousRunTime = nextRunTime;
                testTime        = nextRunTime;
            }
        }
Exemple #4
0
 public static void Postfix(Pawn_MindState __instance)
 {
     if (__instance.pawn.NoOverlapAdjustedIsHashIntervalTick(100))
     {
         if (__instance.pawn.Spawned)
         {
             int regionsToScan = __instance.anyCloseHostilesRecently ? 24 : 18;
             __instance.anyCloseHostilesRecently = PawnUtility.EnemiesAreNearby(__instance.pawn, regionsToScan, true);
         }
         else
         {
             __instance.anyCloseHostilesRecently = false;
         }
     }
     if (TickUtility.NoOverlapTickMod(123) && __instance.pawn.Spawned && __instance.pawn.RaceProps.IsFlesh && __instance.pawn.needs.mood != null)
     {
         TerrainDef terrain = __instance.pawn.Position.GetTerrain(__instance.pawn.Map);
         if (terrain.traversedThought != null)
         {
             __instance.pawn.needs.mood.thoughts.memories.TryGainMemoryFast(terrain.traversedThought);
         }
         WeatherDef curWeatherLerped = __instance.pawn.Map.weatherManager.CurWeatherLerped;
         if (curWeatherLerped.exposedThought != null && !__instance.pawn.Position.Roofed(__instance.pawn.Map))
         {
             __instance.pawn.needs.mood.thoughts.memories.TryGainMemoryFast(curWeatherLerped.exposedThought);
         }
     }
 }
Exemple #5
0
        void ScheduleNotifications()
        {
            var schedule = _data.GetExerciseSchedule();

            var now      = DateTime.Now;
            var tomorrow = now.AddDays(1);
            var random   = new Random();

            for (var testDate = TickUtility.GetNextRunTime(schedule); testDate < tomorrow; testDate = TickUtility.GetNextRunTime(schedule, testDate))
            {
                //TODO: figure out how to make this more random. Right now it makes a random schedule, but it's the same every day
                var exercise = _data.GetNextEnabledExercise(random);
                LocalNotifications.CreateNotification(testDate, exercise, true);
            }
        }
Exemple #6
0
        public void UnknownDate_TestWeekdayOnlySchedule_LastOnSunday_AdvanceToSaturday()
        {
            var schedule = new ExerciseSchedule
            {
                Type          = ScheduleType.WeekendsOnly,
                ScheduledDays = new List <DayOfWeek> {
                    DayOfWeek.Saturday, DayOfWeek.Sunday
                },
                StartTime = new DateTime(1, 1, 1, 8, 30, 0),
                EndTime   = new DateTime(1, 1, 1, 22, 30, 0),
                Period    = SchedulePeriod.EveryFifteenMinutes
            };
            var thisRunTime = new DateTime(1, 1, 7, 22, 30, 0);
            var nextRunTime = TickUtility.MockNow_GetNextRunTime(schedule, thisRunTime);

            Assert.AreEqual(schedule.StartTime.AddDays(12), nextRunTime);
        }
Exemple #7
0
        public void UnknownDate_TestWeekdayOnlySchedule_LastOnFriday_AdvanceToMonday()
        {
            var schedule = new ExerciseSchedule
            {
                Type          = ScheduleType.WeekdaysOnly,
                ScheduledDays = Enum.GetValues(typeof(DayOfWeek)).Cast <DayOfWeek>().Except(new List <DayOfWeek> {
                    DayOfWeek.Saturday, DayOfWeek.Sunday
                }).ToList(),
                StartTime = new DateTime(1, 1, 1, 8, 30, 0),
                EndTime   = new DateTime(1, 1, 1, 22, 30, 0),
                Period    = SchedulePeriod.EveryFifteenMinutes
            };
            var thisRunTime = new DateTime(1, 1, 5, 22, 30, 0);
            var nextRunTime = TickUtility.MockNow_GetNextRunTime(schedule, thisRunTime);

            Assert.AreEqual(schedule.StartTime.AddDays(7), nextRunTime);
        }
Exemple #8
0
        public void UnknownDate_TestFifteenMinuteSchedule_AdvanceToStart()
        {
            var schedule = new ExerciseSchedule
            {
                Type          = ScheduleType.EveryDay,
                ScheduledDays = Enum.GetValues(typeof(DayOfWeek)).Cast <DayOfWeek>().ToList(),
                StartTime     = new DateTime(1, 1, 1, 8, 30, 0),
                EndTime       = new DateTime(1, 1, 1, 22, 30, 0),
                Period        = SchedulePeriod.EveryFifteenMinutes
            };

            var thisRunTime = new DateTime(_startTime.Year, _startTime.Month, _startTime.Day, 7, 30, 0);
            var nextRunTime = TickUtility.MockNow_GetNextRunTime(schedule, thisRunTime);

            Assert.AreEqual(8, nextRunTime.Hour);
            Assert.AreEqual(30, nextRunTime.Minute);
        }
        public void FromDate_TestWeekdayOnlySchedule_RunOnSunday()
        {
            var schedule = new ExerciseSchedule
            {
                Type          = ScheduleType.WeekendsOnly,
                ScheduledDays = new List <DayOfWeek> {
                    DayOfWeek.Saturday, DayOfWeek.Sunday
                },
                StartTime = new DateTime(1, 1, 1, 8, 30, 0),
                EndTime   = new DateTime(1, 1, 1, 22, 30, 0),
                Period    = SchedulePeriod.EveryFifteenMinutes
            };
            var thisRunTime = new DateTime(1, 1, 7, 9, 30, 0);
            var nextRunTime = TickUtility.GetNextRunTime(schedule, thisRunTime);

            Assert.AreEqual(thisRunTime.AddMinutes(15), nextRunTime);
        }
        public void FromDate_TestWeekdayOnlySchedule_RunOnMonday()
        {
            var schedule = new ExerciseSchedule
            {
                Type          = ScheduleType.WeekdaysOnly,
                ScheduledDays = Enum.GetValues(typeof(DayOfWeek)).Cast <DayOfWeek>().Except(new List <DayOfWeek> {
                    DayOfWeek.Saturday, DayOfWeek.Sunday
                }).ToList(),
                StartTime = new DateTime(1, 1, 1, 8, 30, 0),
                EndTime   = new DateTime(1, 1, 1, 22, 30, 0),
                Period    = SchedulePeriod.EveryFifteenMinutes
            };
            var thisRunTime = new DateTime(_startTime.Year, _startTime.Month, _startTime.Day, 9, 30, 0);
            var nextRunTime = TickUtility.GetNextRunTime(schedule, thisRunTime);

            Assert.AreEqual(thisRunTime.AddMinutes(15), nextRunTime);
        }
        public void FromDate_TestFifteenMinuteSchedule_Start45End0()
        {
            var schedule = new ExerciseSchedule
            {
                Type          = ScheduleType.EveryDay,
                ScheduledDays = Enum.GetValues(typeof(DayOfWeek)).Cast <DayOfWeek>().ToList(),
                StartTime     = new DateTime(1, 1, 1, 0, 0, 0),
                EndTime       = new DateTime(1, 1, 1, 22, 0, 0),
                Period        = SchedulePeriod.EveryFifteenMinutes
            };

            var thisRunTime = new DateTime(_startTime.Year, _startTime.Month, _startTime.Day, 15, 45, 0);
            var nextRunTime = TickUtility.GetNextRunTime(schedule, thisRunTime);

            Assert.AreEqual(16, nextRunTime.Hour);
            Assert.AreEqual(0, nextRunTime.Minute);
        }
        public static DateTime SetNextAlarm(Context context, ExerciseSchedule exerciseSchedule)
        {
            var reminder = new Intent(context, typeof(ExerciseTickBroadcastReceiver));

            var recurringReminders = PendingIntent.GetBroadcast(context, 0, reminder, PendingIntentFlags.CancelCurrent);
            var alarms             = (AlarmManager)context.GetSystemService(Context.AlarmService);

            var nextRunTime = TickUtility.GetNextRunTime(exerciseSchedule);

            var dtBasis = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

            if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
            {
                var documentsPath     = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
                var filePath          = Path.Combine(documentsPath, Constants.NotificationPreferences);
                var allowWakeFromIdle = JsonConvert.DeserializeObject <bool>(File.ReadAllText(filePath));

                if (allowWakeFromIdle)
                {
                    alarms.SetExactAndAllowWhileIdle(AlarmType.RtcWakeup,
                                                     (long)nextRunTime.ToUniversalTime().Subtract(dtBasis).TotalMilliseconds,
                                                     recurringReminders);
                }
                else
                {
                    alarms.SetExact(AlarmType.RtcWakeup,
                                    (long)nextRunTime.ToUniversalTime().Subtract(dtBasis).TotalMilliseconds,
                                    recurringReminders);
                }
            }
            else
            {
                alarms.SetExact(AlarmType.RtcWakeup,
                                (long)nextRunTime.ToUniversalTime().Subtract(dtBasis).TotalMilliseconds,
                                recurringReminders);
            }

            return(nextRunTime);
        }
Exemple #13
0
        public static bool Prefix(Pawn_JobTracker __instance)
        {
            FieldInfo p    = AccessTools.Field(typeof(Pawn_JobTracker), "pawn");
            Pawn      pawn = p.GetValue(__instance) as Pawn;

            if (TickUtility.NoOverlapAdjustedIsHashIntervalTick(pawn, 30))
            {
                ThinkResult thinkResult = (ThinkResult)JobTrackerUtility.DetermineNextConstantThinkTreeJob.Invoke(__instance, null);
                if (thinkResult.IsValid)
                {
                    bool start = (bool)JobTrackerUtility.ShouldStartJobFromThinkTree.Invoke(__instance, new object[] { thinkResult });
                    if (start)
                    {
                        JobTrackerUtility.CheckLeaveJoinableLordBecauseJobIssued.Invoke(__instance, new object[] { thinkResult });
                        __instance.StartJob(thinkResult.Job, JobCondition.InterruptForced, thinkResult.SourceNode, false, false, pawn.thinker.ConstantThinkTree, thinkResult.Tag, false, false);
                    }
                    else if (thinkResult.Job != __instance.curJob && !__instance.jobQueue.Contains(thinkResult.Job))
                    {
                        JobMaker.ReturnToPool(thinkResult.Job);
                    }
                }
            }
            return(true);
        }