void Religion::handleEvent(NEvent& event) { if( event.EventType == sEventMouse ) { switch( event.mouse.type ) { case mouseMoved: { Tile* tile = _camera()->at( event.mouse.pos(), false ); // tile under the cursor (or NULL) std::string text = ""; if( tile != 0 ) { auto house = tile->overlay<House>(); if( house.isValid() ) { int templeAccess = house->spec().computeReligionLevel( house ); bool oracleAccess = house->hasServiceAccess( Service::oracle ); text = (templeAccess == 5 && oracleAccess ) ? "##religion_access_full##" : utils::format( 0xff, "##religion_access_%d_temple##", templeAccess ); } } _setTooltipText( _(text) ); } break; default: break; } } Layer::handleEvent( event ); }
void Water::drawTile( const RenderInfo& rinfo, Tile& tile) { bool needDrawAnimations = false; Size areaSize = Size::square(1); if( tile.overlay().isNull() ) { drawLandTile( rinfo, tile ); } else { OverlayPtr overlay = tile.overlay(); if( _isVisibleObject( overlay->type() ) ) { // Base set of visible objects needDrawAnimations = true; areaSize = overlay->size(); } else { int tileNumber = 0; bool haveWater = tile.param( Tile::pFountainWater ) > 0 || tile.param( Tile::pWellWater ) > 0; needDrawAnimations = false; if ( overlay->type() == object::house ) { auto house = overlay.as<House>(); needDrawAnimations = (house->level() <= HouseLevel::hovel) && house->habitants().empty(); tileNumber = config::tile.house-1; haveWater = haveWater || house->hasServiceAccess(Service::fountain) || house->hasServiceAccess(Service::well); } if( !needDrawAnimations ) { tileNumber += (haveWater ? config::layer.haveWater : 0); tileNumber += tile.param( Tile::pReservoirWater ) > 0 ? config::layer.reservoirRange : 0; drawArea( rinfo, overlay->area(), config::layer.water, config::tile.constr + tileNumber ); areaSize = Size::zero; } } if ( needDrawAnimations ) { Point screenPos = tile.mappos() + rinfo.offset; Layer::drawTile( rinfo, tile ); if( _d->showWaterValue ) { auto aqueduct = tile.overlay<Aqueduct>(); if( aqueduct.isValid() ) { Font f = Font::create( "FONT_2" ).withColor( ColorList::red ); int df = aqueduct->water(); f.draw( rinfo.engine.screen(), utils::format( 0xff, "%x", df), screenPos + Point( 20, -80 ), false ); } int wellValue = tile.param( Tile::pWellWater ); int fountainValue = tile.param( Tile::pFountainWater ); int reservoirWater = tile.param( Tile::pReservoirWater ); if( wellValue > 0 || fountainValue > 0 || reservoirWater > 0 ) { std::string text = utils::format( 0xff, "%d/%d/%d", wellValue, fountainValue, reservoirWater ); Font f = Font::create( "FONT_2" ).withColor( ColorList::red ); f.draw( rinfo.engine.screen(), text, screenPos + Point( 20, -80 ), false ); } } registerTileForRendering( tile ); } } if( !needDrawAnimations && ( tile.isWalkable(true) || tile.getFlag( Tile::tlOverlay ) ) ) { _drawLandTile( rinfo, tile, areaSize ); } tile.setRendered(); }
void Education::handleEvent(NEvent& event) { if( event.EventType == sEventMouse ) { switch( event.mouse.type ) { case mouseMoved: { Tile* tile = _camera()->at( event.mouse.pos(), false ); // tile under the cursor (or NULL) std::string text = ""; std::string levelName = ""; if( tile != 0 ) { auto house = tile->overlay<House>(); if( house != 0 ) { std::string typeName; int lvlValue = _getLevelValue( house ); switch( _type ) { case citylayer::education: { bool schoolAccess = house->hasServiceAccess( Service::school ); bool libraryAccess = house->hasServiceAccess( Service::library ); bool academyAccess = house->hasServiceAccess( Service::academy ); if( schoolAccess && libraryAccess && academyAccess ) { text = "##education_full_access##"; } else { if( schoolAccess && libraryAccess ) { text = "##education_have_school_library_access##"; } else if( schoolAccess || libraryAccess ) { text = "##education_have_school_or_library_access##"; } else if( academyAccess ) { text = "##education_have_academy_access##"; } else { text = "##education_have_no_access##"; } } } break; case citylayer::school: typeName = "school"; break; case citylayer::library: typeName = "library"; break; case citylayer::academy: typeName = "academy"; break; } if( text.empty() ) { levelName = _getAccessLevel( lvlValue ); text = levelName + typeName + "_access##"; } } } _setTooltipText( _(text) ); } break; default: break; } } Layer::handleEvent( event ); }