public clsBooleanMap GetWaterMap() { clsBooleanMap map2 = new clsBooleanMap(); map2.Blank(this.Map.Terrain.TileSize.X + 1, this.Map.Terrain.TileSize.Y + 1); int y = this.Map.Terrain.TileSize.Y; for (int i = 0; i <= y; i++) { int x = this.Map.Terrain.TileSize.X; for (int j = 0; j <= x; j++) { bool isWater; float magnitude; modMath.sXY_int _int4; float maxValue = float.MaxValue; modMath.sXY_int point = new modMath.sXY_int(j * 0x80, i * 0x80); int num9 = this.ConnectionCount - 1; int index = 0; while (index <= num9) { if (this.Connections[index].PassageNodeA.IsWater == this.Connections[index].PassageNodeB.IsWater) { modMath.sXY_int _int3 = modMath.PointGetClosestPosOnLine(this.Connections[index].PassageNodeA.Pos, this.Connections[index].PassageNodeB.Pos, point) - point; magnitude = (float) _int3.ToDoubles().GetMagnitude(); if (magnitude < maxValue) { maxValue = magnitude; _int3 = point - this.Connections[index].PassageNodeA.Pos; _int4 = point - this.Connections[index].PassageNodeB.Pos; if (_int3.ToDoubles().GetMagnitude() <= _int4.ToDoubles().GetMagnitude()) { isWater = this.Connections[index].PassageNodeA.IsWater; } else { isWater = this.Connections[index].PassageNodeB.IsWater; } } } index++; } int num10 = this.PassageNodeCount - 1; for (int k = 0; k <= num10; k++) { int num11 = this.SymmetryBlockCount - 1; for (index = 0; index <= num11; index++) { _int4 = point - this.PassageNodes[index, k].Pos; magnitude = (float) _int4.ToDoubles().GetMagnitude(); if (magnitude < maxValue) { maxValue = magnitude; isWater = this.PassageNodes[index, k].IsWater; } } } map2.ValueData.Value[i, j] = isWater; } } return map2; }