MCPcopy Create free account
hub / github.com/OpenXcom/OpenXcom / addLight

Method addLight

src/Battlescape/TileEngine.cpp:195–220  ·  view source on GitHub ↗

* 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. */

Source from the content-addressed store, hash-verified

193 * @param layer Light is separated in 3 layers: Ambient, Static and Dynamic.
194 */
195void TileEngine::addLight(const Position &center, 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.

Callers 1

calculateSunShadingMethod · 0.45

Calls 4

RoundFunction · 0.85
getMapSizeZMethod · 0.80
PositionClass · 0.70
getTileMethod · 0.45

Tested by

no test coverage detected