private Vector2[,] Sample(Texture texture, int width, int height, int step = 4)
 {
     Vector2[,] array = new Vector2[width, height];
     Color[] pixels = this.WindowFriction.GetPixels();
     for (int i = 0; i < height; i++)
     {
         for (int j = 0; j < width; j++)
         {
             float num  = (float)j / (float)width;
             float num2 = (float)i / (float)height;
             int   num3 = (int)(num * (float)texture.width);
             int   num4 = (int)(num2 * (float)texture.height);
             int   num5 = num4 * width + num3 - step;
             int   num6 = num4 * width + num3 + step;
             int   num7 = (num4 + step) * width + num3;
             int   num8 = (num4 - step) * width + num3;
             float x    = 0f;
             float y    = 0f;
             if (WaterRaindropsIME.IsValidTextureIndex(num5, width, height) && WaterRaindropsIME.IsValidTextureIndex(num6, width, height))
             {
                 x = pixels[num6].r - pixels[num5].r;
             }
             if (WaterRaindropsIME.IsValidTextureIndex(num7, width, height) && WaterRaindropsIME.IsValidTextureIndex(num8, width, height))
             {
                 y = pixels[num7].r - pixels[num8].r;
             }
             array[j, i] = new Vector2(x, y);
         }
     }
     return(array);
 }
 private void CreateSimulation()
 {
     this._Initialized = true;
     this.CreateRenderTexture();
     this._Matrices = new Matrix4x4[4096];
     this._Buffer   = new CommandBuffer();
     this._Mesh     = WaterRaindropsIME.BuildQuad(1f, 1f);
     this.CreateFrictionMap();
 }
 private void Advance()
 {
     this._Droplets.RemoveAll((WaterRaindropsIME.Droplet x) => !WaterRaindropsIME.IsVisible(x) || x.Life <= 0f || x.Volume <= 0f);
     for (int i = 0; i < this._Droplets.Count; i++)
     {
         WaterRaindropsIME.Droplet droplet = this._Droplets[i];
         this.OnDropletUpdate(ref droplet);
         if (!WaterRaindropsIME.IsVisible(droplet))
         {
             this._Droplets[i] = droplet;
         }
         else
         {
             this.Draw(i, droplet.Position, droplet.Volume, droplet.Velocity);
             this._Droplets[i] = droplet;
         }
     }
 }
 internal void Initialize(WaterRaindropsIME reference)
 {
     this._Reference        = reference;
     this._PreviousPosition = this._Reference.transform.forward * this._Rotation + this._Reference.transform.position * this._Translation;
 }