private static bool ProcessInBuilding(ref ResidentAI residentAI, uint citizenId, ref Citizen citizen)
        {
            if (citizen.ValidBuilding())
            {
                var buildingInstance = citizen.GetBuildingInstance();
                if (buildingInstance?.m_flags.IsFlagSet(Building.Flags.Evacuating) ?? false)
                {
                    return(false);
                }

                if (citizen.AtHome())
                {
                    ProcessAtHome(ref residentAI, citizenId, ref citizen);
                }
                else if (citizen.AtWork())
                {
                    ProcessAtWork(ref residentAI, citizenId, ref citizen);
                }
                else if (citizen.IsVisiting())
                {
                    ProcessVisiting(ref residentAI, citizenId, ref citizen);
                }
            }

            return(true);
        }
        public static bool ValidBuilding(this Citizen citizen)
        {
            var validHome  = citizen.AtHome() && citizen.ValidHomeBuilding();
            var validWork  = citizen.AtWork() && citizen.ValidWorkBuilding();
            var validVisit = citizen.IsVisiting() && citizen.ValidVisitBuilding();

            return(validHome || validWork || validVisit);
        }
        public static ushort GetBuilding(this Citizen citizen)
        {
            if (citizen.AtHome() && citizen.ValidHomeBuilding())
            {
                return(citizen.HomeBuilding());
            }
            else if (citizen.AtWork() && citizen.ValidWorkBuilding())
            {
                return(citizen.WorkBuilding());
            }
            else if (citizen.IsVisiting() && citizen.ValidVisitBuilding())
            {
                return(citizen.VisitBuilding());
            }

            return(0);
        }
        public static bool Process(ref TouristAI touristAI, uint citizenId, ref Citizen citizen)
        {
            if (!citizen.Arrested && !citizen.Sick && !citizen.Collapsed && !citizen.Dead && !citizen.AtHome() && !citizen.AtWork() && citizen.Exists())
            {
                CitizenActivityMonitor.LogActivity(citizenId, CitizenActivityMonitor.Activity.Unknown);

                if (citizen.IsAtABuilding())
                {
                    return(ProcessInBuilding(ref touristAI, citizenId, ref citizen));
                }
                else if (citizen.IsMoving())
                {
                    return(ProcessMoving(ref touristAI, citizenId, ref citizen));
                }

                return(true);
            }

            return(false);
        }