void ZoneImplementation::updateCityRegions() { info("scheduling updates for " + String::valueOf(cityRegionUpdateVector.size()) + " cities", true); for (int i = 0; i < cityRegionUpdateVector.size(); ++i) { CityRegion* city = cityRegionUpdateVector.get(i); Locker locker(city); Time* nextUpdateTime = city->getNextUpdateTime(); int seconds = -1 * round(nextUpdateTime->miliDifference() / 1000.f); if (seconds < 0) //If the update occurred in the past, force an immediate update. seconds = 0; city->setRadius(city->getRadius()); city->setLoaded(); city->cleanupCitizens(); //city->cleanupDuplicateCityStructures(); city->rescheduleUpdateEvent(seconds); if (city->hasAssessmentPending()) { Time* nextAssessmentTime = city->getNextAssessmentTime(); int seconds2 = -1 * round(nextAssessmentTime->miliDifference() / 1000.f); if (seconds2 < 0) seconds2 = 0; city->scheduleCitizenAssessment(seconds2); } if (!city->isRegistered()) continue; if (city->getRegionsCount() == 0) continue; Region* region = city->getRegion(0); unregisterObjectWithPlanetaryMap(region); registerObjectWithPlanetaryMap(region); for(int i = 0; i < city->getStructuresCount(); i++){ ManagedReference<StructureObject*> structure = city->getCivicStructure(i); unregisterObjectWithPlanetaryMap(structure); registerObjectWithPlanetaryMap(structure); } for(int i = 0; i < city->getCommercialStructuresCount(); i++){ ManagedReference<StructureObject*> structure = city->getCommercialStructure(i); unregisterObjectWithPlanetaryMap(structure); registerObjectWithPlanetaryMap(structure); } } cityRegionUpdateVector.removeAll(); }
void ZoneImplementation::addSceneObject(SceneObject* object) { objectMap->put(object->getObjectID(), object); //Civic and commercial structures map registration will be handled by their city if (object->isStructureObject()) { StructureObject* structure = cast<StructureObject*>(object); if (structure->isCivicStructure() || structure->isCommercialStructure()) { return; } //Same thing for player city bank/mission terminals } else if (object->isTerminal()) { Terminal* terminal = cast<Terminal*>(object); ManagedReference<SceneObject*> controlledObject = terminal->getControlledObject(); if (controlledObject != NULL && controlledObject->isStructureObject()) { StructureObject* structure = controlledObject.castTo<StructureObject*>(); if (structure->isCivicStructure()) return; } } registerObjectWithPlanetaryMap(object); }