void HighBridge::_checkParams( DirectionType& direction, TilePos& start, TilePos& stop, const TilePos& curPos ) const { start = curPos; Tilemap& tilemap = Scenario::instance().getCity()->getTilemap(); Tile& tile = tilemap.at( curPos ); if( tile.getTerrain().isRoad() ) { direction = D_NONE; return; } int imdId = tile.getTerrain().getOriginalImgId(); if( imdId == 384 || imdId == 385 || imdId == 386 || imdId == 387 ) { PtrTilesArea tiles = tilemap.getFilledRectangle( curPos - TilePos( 10, 0), curPos ); for( PtrTilesArea::reverse_iterator it=tiles.rbegin(); it != tiles.rend(); it++ ) { imdId = (*it)->getTerrain().getOriginalImgId(); if( imdId == 376 || imdId == 377 || imdId == 378 || imdId == 379 ) { stop = (*it)->getIJ(); direction = abs( stop.getI() - start.getI() ) > 3 ? D_NORTH_WEST : D_NONE; break; } } } else if( imdId == 376 || imdId == 377 || imdId == 378 || imdId == 379 ) { PtrTilesArea tiles = tilemap.getFilledRectangle( curPos, curPos + TilePos( 10, 0) ); for( PtrTilesArea::reverse_iterator it=tiles.rbegin(); it != tiles.rend(); it++ ) { imdId = (*it)->getTerrain().getOriginalImgId(); if( imdId == 384 || imdId == 385 || imdId == 386 || imdId == 387 ) { stop = (*it)->getIJ(); direction = abs( stop.getI() - start.getI() ) > 3 ? D_SOUTH_EAST : D_NONE; break; } } } else if( imdId == 372 || imdId == 373 || imdId == 374 || imdId == 375 ) { PtrTilesArea tiles = tilemap.getFilledRectangle( curPos, curPos + TilePos( 0, 10) ); for( PtrTilesArea::reverse_iterator it=tiles.rbegin(); it != tiles.rend(); it++ ) { imdId = (*it)->getTerrain().getOriginalImgId(); if( imdId == 380 || imdId == 381 || imdId == 382 || imdId == 383 ) { stop = (*it)->getIJ(); direction = abs( stop.getJ() - start.getJ() ) > 3 ? D_NORTH_EAST : D_NONE; break; } } } else if( imdId == 380 || imdId == 381 || imdId == 382 || imdId == 383 ) { PtrTilesArea tiles = tilemap.getFilledRectangle( curPos - TilePos( 0, 10), curPos ); for( PtrTilesArea::reverse_iterator it=tiles.rbegin(); it != tiles.rend(); it++ ) { imdId = (*it)->getTerrain().getOriginalImgId(); if( imdId == 372 || imdId == 373 || imdId == 374 || imdId == 375 ) { stop = (*it)->getIJ(); direction = abs( stop.getJ() - start.getJ() ) > 3 ? D_SOUTH_WEST : D_NONE; break; } } } else { direction = D_NONE; } }
void HighBridge::_computePictures( const TilePos& startPos, const TilePos& endPos, DirectionType dir ) { Tilemap& tilemap = Scenario::instance().getCity()->getTilemap(); //Picture& water = Picture::load( "land1a", 120 ); switch( dir ) { case D_NORTH_WEST: { PtrTilesArea tiles = tilemap.getFilledRectangle( endPos, startPos ); tiles.pop_back(); tiles.pop_back(); tiles.pop_front(); _d->addSpan( tiles.front()->getIJ() - startPos - TilePos( 1, 0 ), HighBridgeSubTile::liftingSE ); _d->addSpan( tiles.front()->getIJ() - startPos, HighBridgeSubTile::liftingSE2 ); tiles.pop_front(); for( PtrTilesArea::iterator it=tiles.begin(); it != tiles.end(); it++ ) { _d->addSpan( (*it)->getIJ() - startPos, HighBridgeSubTile::spanSE ); } _d->addSpan( tiles.back()->getIJ() - startPos + TilePos( 1, 0 ), HighBridgeSubTile::descentSE ); _d->addSpan( tiles.back()->getIJ() - startPos + TilePos( 2, 0 ), HighBridgeSubTile::descentSE2 ); } break; case D_NORTH_EAST: { PtrTilesArea tiles = tilemap.getFilledRectangle( startPos, endPos ); tiles.pop_back(); tiles.pop_back(); tiles.pop_front(); TilePos liftPos = tiles.front()->getIJ(); tiles.pop_front(); _d->addSpan( tiles.back()->getIJ() - startPos + TilePos( 0, 1 ), HighBridgeSubTile::liftingSW ); _d->addSpan( tiles.back()->getIJ() - startPos + TilePos( 0, 2 ), HighBridgeSubTile::liftingSW2 ); for( PtrTilesArea::reverse_iterator it=tiles.rbegin(); it != tiles.rend(); it++ ) { _d->addSpan( (*it)->getIJ() - startPos, HighBridgeSubTile::spanSW ); } _d->addSpan( liftPos - startPos, HighBridgeSubTile::descentSW2 ); _d->addSpan( liftPos - startPos - TilePos( 0, 1 ), HighBridgeSubTile::descentSW ); } break; case D_SOUTH_EAST: { PtrTilesArea tiles = tilemap.getFilledRectangle( startPos, endPos ); tiles.pop_back(); tiles.pop_back(); tiles.pop_front(); _d->addSpan( tiles.front()->getIJ() - startPos - TilePos( 1, 0 ), HighBridgeSubTile::liftingSE ); _d->addSpan( tiles.front()->getIJ() - startPos, HighBridgeSubTile::liftingSE2 ); tiles.pop_front(); for( PtrTilesArea::iterator it=tiles.begin(); it != tiles.end(); it++ ) { _d->addSpan( (*it)->getIJ() - startPos, HighBridgeSubTile::spanSE ); } _d->addSpan( tiles.back()->getIJ() - startPos + TilePos( 1, 0 ), HighBridgeSubTile::descentSE ); _d->addSpan( tiles.back()->getIJ() - startPos + TilePos( 2, 0 ), HighBridgeSubTile::descentSE2 ); } break; case D_SOUTH_WEST: { PtrTilesArea tiles = tilemap.getFilledRectangle( endPos, startPos ); tiles.pop_back(); tiles.pop_back(); tiles.pop_front(); TilePos liftPos = tiles.front()->getIJ(); tiles.pop_front(); _d->addSpan( tiles.back()->getIJ() - startPos + TilePos( 0, 1 ), HighBridgeSubTile::liftingSW ); _d->addSpan( tiles.back()->getIJ() - startPos + TilePos( 0, 2 ), HighBridgeSubTile::liftingSW2 ); for( PtrTilesArea::reverse_iterator it=tiles.rbegin(); it != tiles.rend(); it++ ) { _d->addSpan( (*it)->getIJ() - startPos, HighBridgeSubTile::spanSW ); } _d->addSpan( liftPos - startPos, HighBridgeSubTile::descentSW2 ); _d->addSpan( liftPos - startPos - TilePos( 0, 1 ), HighBridgeSubTile::descentSW ); } break; default: break; } for( HighBridgeSubTiles::iterator it=_d->subtiles.begin(); it != _d->subtiles.end(); it++ ) { _fgPictures.push_back( (*it)->_picture ); } }