Esempio n. 1
0
 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;
 }