void InfoBoxManager::showHelp( const Tile& tile ) { LandOverlayPtr overlay = tile.getTerrain().getOverlay(); BuildingType type; if( _d->showDebugInfo ) { StringHelper::debug( 0xff, "Tile debug info: dsrbl=%d", tile.getTerrain().getDesirability() ); } type = overlay.isNull() ? B_NONE : overlay->getType(); Impl::InfoboxCreators::iterator findConstructor = _d->constructors.find( type ); GuiInfoBox* infoBox = findConstructor != _d->constructors.end() ? findConstructor->second->create( _d->gui->getRootWidget(), tile ) : 0; if( infoBox && infoBox->isAutoPosition() ) { Size rSize = _d->gui->getRootWidget()->getSize(); int y = ( _d->gui->getCursorPos().getY() < rSize.getHeight() / 2 ) ? rSize.getHeight() - infoBox->getHeight() - 5 : 30; Point pos( ( rSize.getWidth() - infoBox->getWidth() ) / 2, y ); infoBox->setPosition( pos ); } }
void Minimap::Impl::getBuildingColours(const Tile& tile, int &c1, int &c2) { LandOverlayPtr overlay = tile.getOverlay(); if (overlay == NULL) return; BuildingType type = overlay->getType(); switch(type) { case B_HOUSE: { switch (overlay->getSize().getWidth()) { case 1: { c1 = colors->colour(MinimapColors::MAP_HOUSE, 0); c2 = colors->colour(MinimapColors::MAP_HOUSE, 1); break; } default: { c1 = colors->colour(MinimapColors::MAP_HOUSE, 2); c2 = colors->colour(MinimapColors::MAP_HOUSE, 0); } } break; } case B_RESERVOIR: { c1 = colors->colour(MinimapColors::MAP_AQUA, 1); c2 = colors->colour(MinimapColors::MAP_AQUA, 0); break; } default: { switch (overlay->getSize().getWidth()) { case 1: { c1 = colors->colour(MinimapColors::MAP_BUILDING, 0); c2 = colors->colour(MinimapColors::MAP_BUILDING, 1); break; } default: { c1 = colors->colour(MinimapColors::MAP_BUILDING, 0); c2 = colors->colour(MinimapColors::MAP_BUILDING, 2); } } } } c1 |= 0xff000000; c2 |= 0xff000000; }
void WalkerPrefect::onMidTile() { ReachedBuildings reachedBuildings; TilePos firePos; bool haveBurningRuinsNear = _looks4Fire( reachedBuildings, firePos ); bool isDestination = _getPathway().isDestination(); switch( _d->action ) { case Impl::doNothing: break; case Impl::patrol: { if( haveBurningRuinsNear ) { //tell our prefecture that need send prefect with water to fight with fire //on next deliverService //found fire, no water, go prefecture getBase().as<Prefecture>()->fireDetect( firePos ); _back2Prefecture(); Walker::onNewDirection(); } else { foreach( BuildingPtr building, reachedBuildings ) { building->applyService( ServiceWalkerPtr( this ) ); HousePtr house = building.as<House>(); if( house.isValid() && house->getHealthLevel() < 1 ) { house->deleteLater(); GameEventMgr::append( DisasterEvent::create( house->getTilePos(), DisasterEvent::plague ) ); } } } if( isDestination ) { _back2Prefecture(); } Walker::onMidTile(); } break; case Impl::back2Prefecture: { if( haveBurningRuinsNear ) { //tell our prefecture that need send prefect with water to fight with fire //on next deliverService getBase().as<Prefecture>()->fireDetect( firePos ); } if( isDestination ) { deleteLater(); _d->action = Impl::doNothing; } Walker::onMidTile(); } break; case Impl::gotoFire: { if( _getPathway().getDestination().getIJ().distanceFrom( getIJ() ) < 1.5f ) { LandOverlayPtr overlay = _getPathway().getDestination().getOverlay(); if( overlay.isValid() && overlay->getType() == B_BURNING_RUINS ) { _d->action = Impl::fightFire; _setGraphic( WG_PREFECT_FIGHTS_FIRE ); Walker::onNewDirection(); isDestination = false; } } if( isDestination ) { if( !haveBurningRuinsNear || _d->water == 0 ) { _back2Prefecture(); } else { _setGraphic( WG_PREFECT_DRAG_WATER ); _d->action = Impl::gotoFire; _checkPath2NearestFire( reachedBuildings ); Walker::onNewDirection(); } } Walker::onMidTile(); } break; case Impl::fightFire: break; }