예제 #1
0
    public LevelGrid(float size) {
      this.Size = size;

      var bitmap =
          (Bitmap) Image.FromFile(LocalIo.Resources.GetFile("level.bmp").Uri);

      var (width, height) = (bitmap.Width, bitmap.Height);
      var boolGrid =
          new FinSparseGrid<bool>(bitmap.Width, bitmap.Height, false) {
              ShouldThrowExceptions = false,
          };
      for (var y = 0; y < height; ++y) {
        for (var x = 0; x < width; ++x) {
          var color = bitmap.GetPixel(x, y);
          if (color.R == 0) {
            boolGrid[x, y] = true;
          }
        }
      }

      this.tiles_ = new FinSparseGrid<LevelTileTypes>(
          bitmap.Width,
          bitmap.Height,
          LevelTileTypes.EMPTY) {
          ShouldThrowExceptions = false,
      };
      foreach (var node in boolGrid) {
        if (!node.Value) {
          continue;
        }

        var (c, r) = (node.C, node.R);

        var tile = LevelTileTypes.EMPTY;

        var isFloor = !boolGrid[c, r - 1];
        if (isFloor) {
          tile |= LevelTileTypes.FLOOR;
        }

        var isCeiling = !boolGrid[c, r + 1];
        if (isCeiling) {
          tile |= LevelTileTypes.CEILING;
        }

        var isLeftWall = !boolGrid[c - 1, r];
        if (isLeftWall) {
          tile |= LevelTileTypes.LEFT_WALL;
        }

        var isRightWall = !boolGrid[c + 1, r];
        if (isRightWall) {
          tile |= LevelTileTypes.RIGHT_WALL;
        }

        this.tiles_[c, r] = tile;
      }

      boolGrid.Clear();
    }
예제 #2
0
            public void SetAllPixels(IFinGrid <FinColor> rgbaGrid)
            {
                /*TexturesOpenTk.ConvertRgbaGridToUintArray_(
                 *  rgbaGrid,
                 *  ref this.pixelData_);
                 *
                 * GL.BindBuffer(BufferTarget.PixelPackBuffer, this.bufferId_);
                 * GL.ReadPixels(0,
                 *            0,
                 *            this.width_,
                 *            this.height_,
                 *            PixelFormat.AbgrExt,
                 *            PixelType.UnsignedByte,
                 *            this.pixelData_);
                 * GL.BindBuffer(BufferTarget.PixelPackBuffer, 0);*/

                TexturesOpenTk.ConvertRgbaGridToUintArray_(
                    rgbaGrid,
                    ref this.pixelData_,
                    this.width_,
                    this.height_);

                GL.BindTexture(TextureTarget.Texture2D, this.textureId_);
                //GL.BindTexture(BufferTarget.PixelUnpackBuffer, this.pixelData_);

                GL.TexImage2D(TextureTarget.Texture2D,
                              0,
                              PixelInternalFormat.Rgba,
                              this.width_,
                              this.height_,
                              0,
                              PixelFormat.AbgrExt,
                              PixelType.UnsignedByte,
                              this.pixelData_);

                GL.TexParameter(TextureTarget.Texture2D,
                                TextureParameterName.TextureMinFilter,
                                (int)TextureMinFilter.Linear);
                GL.TexParameter(TextureTarget.Texture2D,
                                TextureParameterName.TextureMagFilter,
                                (int)TextureMagFilter.Linear);
                GL.TexParameter(TextureTarget.Texture2D,
                                TextureParameterName.TextureWrapS,
                                (int)TextureWrapMode.Clamp);
                GL.TexParameter(TextureTarget.Texture2D,
                                TextureParameterName.TextureWrapT,
                                (int)TextureWrapMode.Clamp);

                //GL.BindTexture(BufferTarget.PixelUnpackBuffer, 0);
                GL.BindTexture(TextureTarget.Texture2D, 0);
            }
예제 #3
0
 private static void ConvertRgbaGridToUintArray_(
     IFinGrid <FinColor> rgbaGrid,
     ref uint[] uintArray,
     int width,
     int height
     )
 {
     for (var y = 0; y < height; ++y)
     {
         for (var x = 0; x < width; ++x)
         {
             var i    = y * width + x;
             var rgba = rgbaGrid[x, y];
             uintArray[i] = rgba.I;
         }
     }
 }
예제 #4
0
 public ImageData(ImageType imageType, IFinGrid <FinColor> pixels)
 {
     this.imageType = imageType;
     this.pixels    = pixels;
 }