* Closes ufo doors. * @return Whether doors are closed. */
| 1981 | * @return Whether doors are closed. |
| 1982 | */ |
| 1983 | int TileEngine::closeUfoDoors() |
| 1984 | { |
| 1985 | int doorsclosed = 0; |
| 1986 | |
| 1987 | // prepare a list of tiles on fire/smoke & close any ufo doors |
| 1988 | for (int i = 0; i < _save->getMapSizeXYZ(); ++i) |
| 1989 | { |
| 1990 | if (_save->getTiles()[i]->getUnit() && _save->getTiles()[i]->getUnit()->getArmor()->getSize() > 1) |
| 1991 | { |
| 1992 | BattleUnit *bu = _save->getTiles()[i]->getUnit(); |
| 1993 | Tile *tile = _save->getTiles()[i]; |
| 1994 | Tile *oneTileNorth = _save->getTile(tile->getPosition() + Position(0, -1, 0)); |
| 1995 | Tile *oneTileWest = _save->getTile(tile->getPosition() + Position(-1, 0, 0)); |
| 1996 | if ((tile->isUfoDoorOpen(MapData::O_NORTHWALL) && oneTileNorth && oneTileNorth->getUnit() && oneTileNorth->getUnit() == bu) || |
| 1997 | (tile->isUfoDoorOpen(MapData::O_WESTWALL) && oneTileWest && oneTileWest->getUnit() && oneTileWest->getUnit() == bu)) |
| 1998 | { |
| 1999 | continue; |
| 2000 | } |
| 2001 | } |
| 2002 | doorsclosed += _save->getTiles()[i]->closeUfoDoor(); |
| 2003 | } |
| 2004 | |
| 2005 | return doorsclosed; |
| 2006 | } |
| 2007 | |
| 2008 | /** |
| 2009 | * Calculates a line trajectory, using bresenham algorithm in 3D. |
no test coverage detected