* Adds circular light pattern starting from center and losing power with distance travelled. * @param center Center. * @param power Power. * @param layer Light is separated in 3 layers: Ambient, Static and Dynamic. */
| 193 | * @param layer Light is separated in 3 layers: Ambient, Static and Dynamic. |
| 194 | */ |
| 195 | void TileEngine::addLight(const Position ¢er, int power, int layer) |
| 196 | { |
| 197 | // only loop through the positive quadrant. |
| 198 | for (int x = 0; x <= power; ++x) |
| 199 | { |
| 200 | for (int y = 0; y <= power; ++y) |
| 201 | { |
| 202 | for (int z = 0; z < _save->getMapSizeZ(); z++) |
| 203 | { |
| 204 | int distance = (int)Round(sqrt(float(x*x + y*y))); |
| 205 | |
| 206 | if (_save->getTile(Position(center.x + x,center.y + y, z))) |
| 207 | _save->getTile(Position(center.x + x,center.y + y, z))->addLight(power - distance, layer); |
| 208 | |
| 209 | if (_save->getTile(Position(center.x - x,center.y - y, z))) |
| 210 | _save->getTile(Position(center.x - x,center.y - y, z))->addLight(power - distance, layer); |
| 211 | |
| 212 | if (_save->getTile(Position(center.x - x,center.y + y, z))) |
| 213 | _save->getTile(Position(center.x - x,center.y + y, z))->addLight(power - distance, layer); |
| 214 | |
| 215 | if (_save->getTile(Position(center.x + x,center.y - y, z))) |
| 216 | _save->getTile(Position(center.x + x,center.y - y, z))->addLight(power - distance, layer); |
| 217 | } |
| 218 | } |
| 219 | } |
| 220 | } |
| 221 | |
| 222 | /** |
| 223 | * Calculates line of sight of a soldier. |
no test coverage detected