void Religion::drawTile(Engine& engine, Tile& tile, const Point& offset) { Point screenPos = tile.mappos() + offset; if( tile.overlay().isNull() ) { drawPass( engine, tile, offset, Renderer::ground ); drawPass( engine, tile, offset, Renderer::groundAnimation ); } else { bool needDrawAnimations = false; OverlayPtr overlay = tile.overlay(); int religionLevel = -1; if( _isVisibleObject( overlay->type() ) ) { // Base set of visible objects needDrawAnimations = true; } else if( overlay->type() == object::house ) { auto house = overlay.as<House>(); religionLevel = (int) house->getServiceValue(Service::religionMercury); religionLevel += house->getServiceValue(Service::religionVenus); religionLevel += house->getServiceValue(Service::religionMars); religionLevel += house->getServiceValue(Service::religionNeptune); religionLevel += house->getServiceValue(Service::religionCeres); religionLevel = math::clamp( religionLevel / (house->spec().minReligionLevel()+1), 0, 100 ); needDrawAnimations = (house->level() <= HouseLevel::hovel) && house->habitants().empty(); if( !needDrawAnimations ) { drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase ); } } else { drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::base ); } if( needDrawAnimations ) { Layer::drawTile( engine, tile, offset ); registerTileForRendering( tile ); } else if( religionLevel > 0 ) { drawColumn( engine, screenPos, religionLevel ); } } tile.setRendered(); }
void Crime::onEvent( const NEvent& event) { if( event.EventType == sEventMouse ) { switch( event.mouse.type ) { case NEvent::Mouse::moved: { 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 != 0 ) { int crime = (int)house->getServiceValue( Service::crime ); text = crimeDesc[ math::clamp<int>( crime / 11, 0, 7 ) ]; } } _setTooltipText( _(text) ); } break; default: break; } } Layer::onEvent( event ); }
void Tax::drawTile(Engine& engine, Tile& tile, const Point& offset) { Point screenPos = tile.mappos() + offset; if( tile.overlay().isNull() ) { //draw background //engine.draw( tile.picture(), screenPos ); drawPass( engine, tile, offset, Renderer::ground ); drawPass( engine, tile, offset, Renderer::groundAnimation ); } else { bool needDrawAnimations = false; OverlayPtr overlay = tile.overlay(); int taxLevel = -1; if( _isVisibleObject( overlay->type() ) ) { // Base set of visible objects needDrawAnimations = true; } else if( overlay->type() == object::house ) { auto house = overlay.as<House>(); int taxAccess = house->getServiceValue( Service::forum ); taxLevel = math::clamp<int>( house->taxesThisYear(), 0, 100 ); needDrawAnimations = ((house->level() <= HouseLevel::hovel && house->habitants().empty()) || taxAccess < 25); if( !needDrawAnimations ) { drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase ); } } else { drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::base ); } if( needDrawAnimations ) { Layer::drawTile( engine, tile, offset ); registerTileForRendering( tile ); } else if( taxLevel > 0 ) { drawColumn( engine, screenPos, taxLevel ); } } tile.setRendered(); }
void MarketAccess::drawTile(Engine& engine, Tile& tile, const Point& offset) { Point screenPos = tile.mappos() + offset; if( tile.overlay().isNull() ) { drawPass( engine, tile, offset, Renderer::ground ); drawPass( engine, tile, offset, Renderer::groundAnimation ); } else { bool needDrawAnimations = false; OverlayPtr overlay = tile.overlay(); int accessLevel = 0; if( _isVisibleObject( overlay->type() ) ) { needDrawAnimations = true; } else if( overlay->type() == object::house ) { auto house = overlay.as<House>(); accessLevel = (int)house->getServiceValue( Service::market ); needDrawAnimations = (house->level() <= HouseLevel::hovel) && house->habitants().empty(); if( !needDrawAnimations ) { drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase ); } } else { drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::base ); } if( needDrawAnimations ) { Layer::drawTile( engine, tile, offset ); registerTileForRendering( tile ); } else if( accessLevel >= 0 ) { drawColumn( engine, screenPos, accessLevel ); } } tile.setRendered(); }
void Crime::drawTile( const RenderInfo& rinfo, Tile& tile) { if( tile.overlay().isNull() ) { drawPass( rinfo, tile, Renderer::ground ); drawPass( rinfo, tile, Renderer::groundAnimation ); } else { bool needDrawAnimations = false; OverlayPtr overlay = tile.overlay(); int crime = -1; if( _isVisibleObject( overlay->type() ) ) { needDrawAnimations = true; } else if( overlay->type() == object::house ) { auto house = overlay.as<House>(); crime = (int)house->getServiceValue( Service::crime ); needDrawAnimations = (house->level() <= HouseLevel::hovel) && house->habitants().empty(); // In case of vacant terrain drawArea( rinfo, overlay->area(), config::layer.ground, config::tile.house ); } else { drawArea( rinfo, overlay->area(), config::layer.ground, config::tile.constr ); } if( needDrawAnimations ) { Layer::drawTile( rinfo, tile ); registerTileForRendering( tile ); } else if( crime >= 0) { Point screenPos = tile.mappos() + rinfo.offset; drawColumn( rinfo, screenPos, crime ); } } tile.setRendered(); }