bool AGFreeTime::typeFromHomeNight(int day) { int backHome = whenBackHomeThisDay(day); int ActivitiesNextDay = whenBeginActivityNextDay(day); // is equal to 2 days if there is nothing the next day int nextDay = 0; if (myHousehold->getCars().empty()) { return true; } AGPosition destination(myHousehold->getTheCity()->getRandomStreet()); int depTime = randomTimeBetween(MAX2(backHome, TB_NIGHT), TE_NIGHT); int arrTime = this->arrHour(myHousehold->getPosition(), destination, depTime); //we have to go back home before the beginning of next day activities. int lastRetTime = this->depHour(destination, myHousehold->getPosition(), MIN2(TE_NIGHT, ActivitiesNextDay)); int retTime = randomTimeBetween(arrTime, lastRetTime); if (depTime < 0 || retTime < 0) { return true; // not enough time during the day } AGTime departureTime(depTime); nextDay = departureTime.getDay(); departureTime.setDay(0); AGTrip depTrip(myHousehold->getPosition(), destination, myHousehold->getCars().front().getName(), departureTime.getTime(), day + nextDay); AGTime returnTime(depTime); nextDay = returnTime.getDay(); returnTime.setDay(0); AGTrip retTrip(destination, myHousehold->getPosition(), myHousehold->getCars().front().getName(), returnTime.getTime(), day + nextDay); myPartialActivityTrips.push_back(depTrip); myPartialActivityTrips.push_back(retTrip); return true; }
bool AGActivities::generateInOutTraffic() { /** * outgoing traffic already done by generateTrips(): * people who work out of the city. * Here are people from outside the city coming to work. */ if (myCity->peopleIncoming.empty()) { return true; } if (myCity->cityGates.empty()) { return false; } int num = 1; std::list<AGAdult>::iterator itA; for (itA = myCity->peopleIncoming.begin(); itA != myCity->peopleIncoming.end(); ++itA) { int posi = myCity->statData.getRandomCityGateByIncoming(); std::string nom(generateName(num, "carIn")); AGTrip wayTrip(myCity->cityGates[posi], itA->getWorkPosition().getPosition(), nom, itA->getWorkPosition().getOpening()); //now we put the estimated time of entrance in the city. wayTrip.setDepTime(wayTrip.estimateDepTime(wayTrip.getTime(), myCity->statData.speedTimePerKm)); AGTrip retTrip(itA->getWorkPosition().getPosition(), myCity->cityGates[posi], nom, itA->getWorkPosition().getClosing()); trips.push_back(wayTrip); trips.push_back(retTrip); ++num; } return true; }
bool AGFreeTime::typeFromHomeEvening(int day) { int backHome = whenBackHomeThisDay(day); if (myHousehold->getCars().empty()) { return true; } AGPosition destination(myHousehold->getTheCity()->getRandomStreet()); int depTime = randomTimeBetween(MAX2(backHome, TB_EVENING), TE_EVENING); int arrTime = this->arrHour(myHousehold->getPosition(), destination, depTime); int retTime = randomTimeBetween(arrTime, TE_EVENING); if (depTime < 0 || retTime < 0) { return true; // not enough time during the day } AGTrip depTrip(myHousehold->getPosition(), destination, myHousehold->getCars().front().getName(), depTime, day); AGTrip retTrip(destination, myHousehold->getPosition(), myHousehold->getCars().front().getName(), retTime, day); myPartialActivityTrips.push_back(depTrip); myPartialActivityTrips.push_back(retTrip); return true; }