本文整理汇总了C++中HousePtr类的典型用法代码示例。如果您正苦于以下问题:C++ HousePtr类的具体用法?C++ HousePtr怎么用?C++ HousePtr使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了HousePtr类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: _findBlankHouse
Pathway Emigrant::_findSomeWay( TilePos startPoint )
{
HousePtr house = _findBlankHouse();
_d->failedWayCount++;
Pathway pathway;
if( house.isValid() )
{
pathway = PathwayHelper::create( startPoint, house->pos(), PathwayHelper::roadFirst );
if( !pathway.isValid() )
{
pathway = PathwayHelper::create( startPoint, ptr_cast<Construction>(house),
PathwayHelper::roadFirst );
}
if( pathway.isValid() )
{
_lockHouse( house );
}
}
if( !pathway.isValid() || _d->failedWayCount > 10 )
{
pathway = PathwayHelper::create( startPoint,
_city()->borderInfo().roadExit,
PathwayHelper::allTerrain );
}
return pathway;
}
示例2: switch
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 )
{
HousePtr house = ptr_cast<House>( tile->overlay() );
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 );
}
示例3: _getCity
void Immigrant::onDestination()
{
bool gooutCity = true;
if( _d->destination.getI() > 0 && _d->destination.getJ() > 0 ) //have destination
{
const Tile& tile = _getCity()->getTilemap().at( _d->destination );
HousePtr house = tile.getOverlay().as<House>();
if( house.isValid() )
{
int freeRoom = house->getMaxHabitants() - house->getHabitants().count();
if( freeRoom > 0 )
{
house->addHabitants( _d->peoples );
Walker::onDestination();
gooutCity = (_d->peoples.count() > 0);
}
}
}
if( gooutCity )
{
_findPath2blankHouse( _getCity()->getTilemap().at( getIJ() ) );
}
else
{
deleteLater();
}
}
示例4: hlp
HousePtr Immigrant::_findBlankHouse()
{
CityHelper hlp( _getCity() );
HouseList houses = hlp.find< House >( building::house );
HousePtr blankHouse;
_d->destination = TilePos( -1, -1 );
HouseList::iterator itHouse = houses.begin();
while( itHouse != houses.end() )
{
if( (*itHouse)->getAccessRoads().size() > 0 &&
( (*itHouse)->getHabitants().count() < (*itHouse)->getMaxHabitants() ) )
{
itHouse++;
}
else
{
itHouse = houses.erase( itHouse );
}
}
if( houses.size() > 0 )
{
itHouse = houses.begin();
std::advance(itHouse, rand() % houses.size() );
blankHouse = *itHouse;
_d->destination = blankHouse->getTilePos();
}
return blankHouse;
}
示例5: switch
void MarketAccess::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 )
{
HousePtr house = tile->overlay<House>();
if( house.isValid() )
{
int accessLevel = house->getServiceValue( Service::market );
accessLevel = math::clamp<int>( accessLevel / maxAccessLevel, 0, maxAccessLevel-1 );
text = marketLevelName[ accessLevel ];
}
}
_setTooltipText( text );
}
break;
default: break;
}
}
Layer::handleEvent( event );
}
示例6: switch
void Sentiment::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 )
{
HousePtr house = tile->overlay().as<House>();
if( house.isValid() )
{
int happiness = math::clamp<int>( house->state( pr::happiness ) / maxSentimentLevel, 0, maxSentimentLevel-1 );
text = sentimentLevelName[ happiness ];
}
}
_setTooltipText( text );
}
break;
default: break;
}
}
Layer::handleEvent( event );
}
示例7: getHouse
void HouseManager::load(const std::string& fileName)
{
try {
TiXmlDocument doc;
doc.Parse(g_resources.readFileContents(fileName).c_str());
if(doc.Error())
stdext::throw_exception(stdext::format("failed to load '%s': %s (House XML)", fileName, doc.ErrorDesc()));
TiXmlElement *root = doc.FirstChildElement();
if(!root || root->ValueTStr() != "houses")
stdext::throw_exception("invalid root tag name");
for(TiXmlElement *elem = root->FirstChildElement(); elem; elem = elem->NextSiblingElement()) {
if(elem->ValueTStr() != "house")
stdext::throw_exception("invalid house tag.");
uint32 houseId = elem->readType<uint32>("houseid");
HousePtr house = getHouse(houseId);
if(!house)
house = HousePtr(new House(houseId)), addHouse(house);
house->load(elem);
}
} catch(std::exception& e) {
g_logger.error(stdext::format("Failed to load '%s': %s", fileName, e.what()));
}
}
示例8: drawPass
void Health::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 healthLevel = -1;
if( _isVisibleObject( overlay->type() ) )
{
// Base set of visible objects
needDrawAnimations = true;
}
else if( _flags.count( overlay->type() ) )
{
needDrawAnimations = true;
//city::Helper helper( _city() );
//drawArea( engine, helper.getArea( overlay ), offset, ResourceGroup::foodOverlay, OverlayPic::base );
}
else if( overlay->type() == object::house )
{
HousePtr house = ptr_cast<House>( overlay );
healthLevel = _getLevelValue( house );
needDrawAnimations = (house->spec().level() == 1) && (house->habitants().empty());
if( !needDrawAnimations )
{
drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase );
}
}
else //other buildings
{
drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::base );
}
if( needDrawAnimations )
{
Layer::drawTile( engine, tile, offset );
registerTileForRendering( tile );
}
else if( healthLevel > 0 )
{
drawColumn( engine, screenPos, healthLevel );
}
}
tile.setWasDrawn();
}
示例9: if
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 );
}
else
{
bool needDrawAnimations = false;
TileOverlayPtr overlay = tile.overlay();
int taxLevel = -1;
if( _isVisibleObject( overlay->type() ) )
{
// Base set of visible objects
needDrawAnimations = true;
}
else if( overlay->type() == objects::house )
{
HousePtr house = ptr_cast<House>( overlay );
//taxLevel = house->getServiceValue( Service::forum );
taxLevel = math::clamp<int>( house->taxesThisYear(), 0, 100 );
needDrawAnimations = (house->spec().level() == 1) && (house->habitants().empty());
if( needDrawAnimations )
{
int taxAccess = house->hasServiceAccess( Service::forum );
needDrawAnimations = (taxAccess < 25);
}
if( !needDrawAnimations )
{
city::Helper helper( _city() );
drawArea( engine, helper.getArea( overlay ), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase );
}
}
else
{
city::Helper helper( _city() );
drawArea( engine, helper.getArea( overlay ), offset, ResourceGroup::foodOverlay, OverlayPic::base );
}
if( needDrawAnimations )
{
Layer::drawTile( engine, tile, offset );
registerTileForRendering( tile );
}
else if( taxLevel > 0 )
{
_addColumn( screenPos, taxLevel );
//drawColumn( engine, screenPos, taxLevel );
}
}
tile.setWasDrawn();
}
示例10: drawPass
void Unemployed::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();
WorkingBuildingPtr workBuilding = overlay.as<WorkingBuilding>();
int worklessPercent = 0;
if( _isVisibleObject( overlay->type() ) )
{
needDrawAnimations = true;
}
else if( overlay->type() == object::house )
{
HousePtr house = overlay.as<House>();
int worklessNumber = (int)house->getServiceValue( Service::recruter );
int matureNumber = (int)house->habitants().mature_n();
worklessPercent = math::percentage( worklessNumber, matureNumber );
needDrawAnimations = (house->spec().level() == 1) && house->habitants().empty();
if( !needDrawAnimations )
{
drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase );
}
}
else if( workBuilding.isValid() )
{
worklessPercent = math::percentage( workBuilding->needWorkers(), workBuilding->maximumWorkers() );
needDrawAnimations = workBuilding->needWorkers() > 0;
if( !needDrawAnimations )
drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::base );
}
if( needDrawAnimations )
{
Layer::drawTile( engine, tile, offset );
registerTileForRendering( tile );
}
else if( worklessPercent > 0 )
{
drawColumn( engine, screenPos, worklessPercent );
}
}
tile.setWasDrawn();
}
示例11: _lockHouse
void Emigrant::_append2house( HousePtr house )
{
int freeRoom = house->maxHabitants() - house->habitants().count();
if( freeRoom > 0 )
{
house->addHabitants( _d->peoples );
_lockHouse( HousePtr() );
}
}
示例12: foreach
foreach( it, buildings )
{
if( (*it)->type() == object::house )
{
HousePtr house = it->as<House>();
TilePos pos = house->pos();
int hash = (pos.i() << 8) | pos.i();
_d->servedHouses[ hash ] = house->habitants().count();
}
}
示例13: create
GuiInfoBox* create( Widget* parent, const Tile& tile )
{
HousePtr house = tile.getTerrain().getOverlay().as<House>();
if( house->getNbHabitants() > 0 )
{
return new InfoBoxHouse( parent, tile );
}
else
{
return new InfoBoxFreeHouse( parent, tile );
}
}
示例14: buildingDestroyed
void Peace::buildingDestroyed(gfx::TileOverlayPtr overlay)
{
HousePtr house = ptr_cast<House>( overlay );
if( house.isValid() && house->spec().level() > HouseLevel::tent )
{
_d->significantBuildingsDestroyed = true;
}
else
{
_d->significantBuildingsDestroyed |= !_d->unsignificantBuildings.count( overlay->type() );
}
}
示例15: _getLevelValue
int LayerHealth::_getLevelValue( HousePtr house )
{
switch(_type)
{
case citylayer::health: return (int) house->state( House::health );
case citylayer::hospital: return (int) house->getServiceValue( Service::hospital );
case citylayer::barber: return (int) house->getServiceValue( Service::barber );
case citylayer::baths: return (int) house->getServiceValue( Service::baths );
}
return 0;
}