public override void OnTimePassed(InteractionInstance interactionInstance, float totalTime, float deltaTime) { try { foreach (MetricRate rate in mMetrics) { float hoursElapsed = SimClock.ElapsedTime(TimeUnit.Hours) - rate.mStartTime; if (hoursElapsed < rate.mHoursUntilChange) { continue; } rate.mStartTime = SimClock.ElapsedTime(TimeUnit.Hours); switch (rate.mMetric) { case MetricRate.MetricType.ConcertsPerformed: Music music = OmniCareer.Career <Music>(Career); if (music != null) { music.ConcertsPerformed += rate.mRate; } break; case MetricRate.MetricType.Journals: OmniCareer journals = Career as OmniCareer; if (journals != null) { journals.FinishedJournal(); } break; case MetricRate.MetricType.Recruitment: OmniCareer recruit = Career as OmniCareer; if (recruit != null) { recruit.AddToRecruits(); } break; case MetricRate.MetricType.Reports: LawEnforcement law = OmniCareer.Career <LawEnforcement>(Career); if (law != null) { law.ReportsCompltetedToday += rate.mRate; } break; case MetricRate.MetricType.StoriesAndReviews: Journalism journalism = OmniCareer.Career <Journalism>(Career); if (journalism != null) { journalism.StoriesWrittenToday += rate.mRate; } break; case MetricRate.MetricType.WinLossRecord: ProSports proSports = OmniCareer.Career <ProSports>(Career); if (proSports != null) { if (rate.mRate > 0) { proSports.mWinRecord += rate.mRate; proSports.mTotalWins += rate.mRate; } else { proSports.mLossRecord -= rate.mRate; proSports.mTotalLoss -= rate.mRate; } } break; case MetricRate.MetricType.MeetingsHeld: Business business = OmniCareer.Career <Business>(Career); if (business != null) { business.MeetingsHeldToday += rate.mRate; } break; } } } catch (Exception e) { Common.Exception(Career.OwnerDescription, e); } }