void BurningRuins::applyService(ServiceWalkerPtr walker) { if ( S_PREFECT == walker->getService() ) { _fireLevel = math::clamp<float>( _fireLevel - walker->getServiceValue(), 0.f, 100.f ); } }
void BurningRuins::applyService(ServiceWalkerPtr walker) { if ( Service::prefect == walker->getService() ) { double newValue = math::clamp<float>( getState( Construction::fire ) - walker->getServiceValue(), 0.f, 100.f ); updateState( Construction::fire, newValue, false ); } }
float House::evaluateService(ServiceWalkerPtr walker) { float res = 0.0; ServiceType service = walker->getService(); if( _reservedServices.count(service) == 1 ) { // service is already reserved return 0.0; } switch(service) { case S_ENGINEER: res = _damageLevel; break; case S_PREFECT: res = _fireLevel; break; // this house pays taxes case S_FORUM: case S_SENATE: res = _d->mayPayTax() ? (float)_d->getAvailableTax() : 0.f; break; case S_MARKET: { MarketPtr market = walker->getBase().as<Market>(); GoodStore &marketStore = market->getGoodStore(); GoodStore &houseStore = getGoodStore(); for (int i = 0; i < G_MAX; ++i) { GoodType goodType = (GoodType) i; int houseQty = houseStore.getCurrentQty(goodType); int houseSafeQty = _d->houseLevelSpec.computeMonthlyConsumption(*this, goodType) + _d->nextHouseLevelSpec.computeMonthlyConsumption(*this, goodType); int marketQty = marketStore.getCurrentQty(goodType); if (houseQty < houseSafeQty && marketQty > 0) { res += std::min(houseSafeQty - houseQty, marketQty); } } } break; case S_WORKERS_HUNTER: { res = (float)_d->freeWorkersCount; } break; default: { return _d->houseLevelSpec.evaluateServiceNeed(*this, service); } break; } // std::cout << "House evaluateService " << service << "=" << res << std::endl; return res; }
float BurningRuins::evaluateService( ServiceWalkerPtr walker ) { if ( Service::prefect == walker->getService() ) { return getState( Construction::fire ) * 2; } return 0; }
void Building::applyService( ServiceWalkerPtr walker) { // std::cout << "apply service" << std::endl; // remove service reservation Service::Type service = walker->getService(); _reservedServices.erase(service); switch( service ) { case Service::engineer: updateState( Construction::damage, 0, false ); break; case Service::prefect: updateState( Construction::fire, 0, false ); break; default: break; } }
float Building::evaluateService(ServiceWalkerPtr walker) { float res = 0.0; Service::Type service = walker->getService(); if (_reservedServices.count(service) == 1) { // service is already reserved return 0.0; } switch(service) { case Service::engineer: res = getState( Construction::damage ); break; case Service::prefect: res = getState( Construction::fire ); break; default: break; } return res; }
void Building::applyService( ServiceWalkerPtr walker) { // std::cout << "apply service" << std::endl; // remove service reservation ServiceType service = walker->getService(); _reservedServices.erase(service); switch( service ) { case S_ENGINEER: { _damageLevel = 0; } break; case S_PREFECT: { _fireLevel = 0; } break; } }
float Building::evaluateService(ServiceWalkerPtr walker) { float res = 0.0; ServiceType service = walker->getService(); if (_reservedServices.count(service) == 1) { // service is already reserved return 0.0; } switch(service) { case S_ENGINEER: res = _damageLevel; break; case S_PREFECT: res = _fireLevel; break; } return res; }
void House::applyService( ServiceWalkerPtr walker ) { Building::applyService(walker); // handles basic services, and remove service reservation ServiceType service = walker->getService(); switch (service) { case S_WELL: case S_FOUNTAIN: case S_TEMPLE_NEPTUNE: case S_TEMPLE_CERES: case S_TEMPLE_VENUS: case S_TEMPLE_MARS: case S_TEMPLE_MERCURE: case S_DOCTOR: case S_BARBER: case S_BATHS: case S_HOSPITAL: case S_SCHOOL: case S_LIBRARY: case S_COLLEGE: case S_THEATER: case S_AMPHITHEATER: case S_COLLOSSEUM: case S_HIPPODROME: setServiceAccess(service, 100); break; case S_MARKET: buyMarket(walker); break; case S_SENATE: case S_FORUM: setServiceAccess(service, 100); break; case S_TEMPLE_ORACLE: case S_ENGINEER: case S_PREFECT: case S_MAX: break; case S_WORKERS_HUNTER: { if( !_d->freeWorkersCount ) break; WorkersHunterPtr hunter = walker.as<WorkersHunter>(); if( hunter.isValid() ) { int hiredWorkers = math::clamp( _d->freeWorkersCount, 0, hunter->getWorkersNeeded() ); _d->freeWorkersCount -= hiredWorkers; hunter->hireWorkers( hiredWorkers ); } } break; default: break; } }