Example #1
0
    public void AddChunk(TerrainChunk chunk, int start_x, int start_y, AddMode mode = AddMode.Add) {
      int minWidth = Mathf.Min(chunk.data.GetLength(0), this.data.GetLength(0) - start_x);
      int minHeight = Mathf.Min(chunk.data.GetLength(1), this.data.GetLength(1) - start_y);
      float centerValue = this.data[start_x + chunk.GetWidth() / 2, start_y + chunk.GetHeight() / 2];
      for (int x = 0; x < minWidth; x++) {
        for (int y = 0; y < minHeight; y++) {
          int xc = start_x + x;
          int yc = start_y + y;
          if (xc < 0 || yc < 0) {
            continue;
          }

          switch (mode) {
            case AddMode.Add:
              this.data[xc, yc] = this.data[xc, yc] + chunk.data[x, y];

              if (chunk.data[x, y] != 0) {
                for (int layer = 0; layer < TEXTURE_COUNT; layer++) {
                  this.textureData[xc, yc, layer] = this.textureData[xc, yc, layer] + chunk.textureData[x, y, layer] * 4;
                }
              }
            break;
            case AddMode.Max:
              if (chunk.data[x, y] != 0 && chunk.data[x, y] > this.data[xc, yc]) {
                for (int layer = 0; layer < TEXTURE_COUNT; layer++) {
                  this.textureData[xc, yc, layer] = chunk.textureData[x, y, layer];
                }
              }

              this.data[xc, yc] = Mathf.Max(this.data[xc, yc], chunk.data[x, y]);
            break;
            case AddMode.Min:
              this.data[xc, yc] = Mathf.Min(this.data[xc, yc], chunk.data[x, y]);
            break;
            case AddMode.RelaMin:
              this.data[xc, yc] = Mathf.Min(this.data[xc, yc], centerValue - chunk.data[x, y]);
            break;
          }
        }
      }
    }
Example #2
0
 public void AddChunkAtPoints(TerrainPoint[] points, TerrainChunk chunk, AddMode mode = AddMode.Add) {
   for (int i = 0; i < points.Length; i++) {
     int x = points[i].x;
     int y = points[i].y;
     this.AddChunk(chunk, x - chunk.GetWidth() / 2, y - chunk.GetHeight() / 2, mode);
   }
 }