public static List <ushort> FindAllClosePlaces(this HumanAI humanAI, uint citizenId, ref Citizen citizen, Vector3 position, ItemClass.Service[] services, ItemClass.SubService[] subServices, float distance)
        {
            var simulationManager = SimulationManager.instance;
            var currentBuilding   = citizen.GetBuilding();

            if (currentBuilding != 0)
            {
                var buildingManager = BuildingManager.instance;
                var closeBuildings  = buildingManager.FindAllBuildings(position, distance, services, subServices, Building.Flags.Created, Building.Flags.Demolishing | Building.Flags.Deleted | Building.Flags.Abandoned);

                return(GlobalLocationHandler.FilterAcceptableBuildingsForCitizen(ref citizen, closeBuildings));
            }

            return(null);
        }
        public static bool TryVisit(this HumanAI humanAI, uint citizenId, ref Citizen citizen, ushort buildingId)
        {
            var currentBuilding = citizen.GetBuilding();

            if (buildingId != 0 && currentBuilding != 0 && currentBuilding != buildingId && GlobalLocationHandler.GoodBuildingToVisit(buildingId, ref citizen))
            {
                var moving = humanAI.GoToBuilding(citizenId, ref citizen, buildingId);

                CitizenActivityMonitor.LogActivity(citizenId, CitizenActivityMonitor.Activity.GoingToVisit);

                return(moving);
            }

            return(false);
        }
示例#3
0
 public static bool CanMove(this Citizen citizen) => citizen.IsVisible() || GlobalLocationHandler.ShouldMove();