private void DrawSource(WaterOnTerrainSFX.Source source, Matrix4x4 worldToScreenMatrix)
    {
        Vector3 v = this.EventPositionForLocalPosition(source.localPosition);

        v = worldToScreenMatrix.MultiplyPoint3x4(new Vector3(v.x, v.z));
        this.DrawTexture(v, WaterOnTerrainSFX.sourceTexture);
        v = source.eventPosition;
        v = worldToScreenMatrix.MultiplyPoint3x4(new Vector3(v.x, v.z));
        this.DrawTexture(v, WaterOnTerrainSFX.eventTexture);
    }
 private void StopSource(int index)
 {
     if (index >= 0 && index < this.sources.Count)
     {
         WaterOnTerrainSFX.Source source = this.sources[index];
         this.sources.RemoveAt(index);
         source.Stop();
         this.sourcePool.Push(source);
     }
 }
    private float ScoreForSource(WaterOnTerrainSFX.IntVector position, WaterOnTerrainSFX.Source source)
    {
        float num = 0f;

        if (WaterOnTerrainSFX.IsWithinSampleGrid(position))
        {
            num = this.sampleGrid[position.x, position.y].score;
            for (int i = 0; i < this.sources.Count; i++)
            {
                if (this.sources[i] != source)
                {
                    float t = (float)((position - this.sources[i].localPosition).squareMagnitude / 5);
                    num *= Mathf.Lerp(0.1f, 1f, t);
                }
            }
        }
        return(num);
    }
    private void UpdateSources()
    {
        float num = this.maximumScore / 5f;
        int   i   = 0;

        while (i < this.sources.Count)
        {
            WaterOnTerrainSFX.Source    source        = this.sources[i];
            WaterOnTerrainSFX.IntVector localPosition = source.localPosition;
            float num2 = this.ScoreForSource(source.localPosition, source);
            for (int j = 0; j < WaterOnTerrainSFX.NEIGHBOURS.Length; j++)
            {
                WaterOnTerrainSFX.IntVector intVector = source.localPosition + WaterOnTerrainSFX.NEIGHBOURS[j];
                float num3 = this.ScoreForSource(intVector, source);
                if (num3 > num2)
                {
                    num2          = num3;
                    localPosition = intVector;
                }
            }
            if (num2 > num)
            {
                source.localPosition = localPosition;
                source.SetGradient(this.GradientForLocalPosition(source.localPosition));
                i++;
            }
            else
            {
                this.StopSource(i);
            }
        }
        if (!this.centreSource.IsPlaying())
        {
            this.centreSource.Start(this.eventDescription, this.gradientParameterIndex, this.wetnessParameterIndex, WaterOnTerrainSFX.SAMPLE_GRID_CENTRE, base.transform.position, this.GradientForLocalPosition(WaterOnTerrainSFX.SAMPLE_GRID_CENTRE));
        }
        while (this.sourcePool.Count > 0)
        {
            WaterOnTerrainSFX.IntVector intVector2 = new WaterOnTerrainSFX.IntVector(0, 0);
            float num4 = num;
            WaterOnTerrainSFX.IntVector intVector3;
            intVector3.x = 0;
            while (intVector3.x < 21)
            {
                intVector3.y = 0;
                while (intVector3.y < 21)
                {
                    float num5 = this.ScoreForSource(intVector3, null);
                    if (num5 > num4)
                    {
                        num4       = num5;
                        intVector2 = intVector3;
                    }
                    intVector3.y++;
                }
                intVector3.x++;
            }
            if (num4 <= num)
            {
                break;
            }
            WaterOnTerrainSFX.Source source2 = this.sourcePool.Pop();
            source2.Start(this.eventDescription, this.gradientParameterIndex, this.wetnessParameterIndex, intVector2, this.EventPositionForLocalPosition(intVector2), this.GradientForLocalPosition(intVector2));
            this.sources.Add(source2);
        }
        float distance = Time.deltaTime * this.sourceSpeed;

        this.centreSource.UpdateEvent(base.transform.position, float.MaxValue, WaterOnTerrainSFX.Wetness);
        for (int k = 0; k < this.sources.Count; k++)
        {
            WaterOnTerrainSFX.Source source3 = this.sources[k];
            source3.UpdateEvent(this.EventPositionForLocalPosition(source3.localPosition), distance, WaterOnTerrainSFX.Wetness);
        }
    }
 private void UpdateSampleGrid()
 {
     WaterOnTerrainSFX.IntVector intVector = new WaterOnTerrainSFX.IntVector(Mathf.FloorToInt(base.transform.position.x / this.gridCellSize), Mathf.FloorToInt(base.transform.position.z / this.gridCellSize));
     if (intVector != this.gridPosition)
     {
         WaterOnTerrainSFX.IntVector intVector2 = intVector - this.gridPosition;
         if (Math.Abs(intVector2.x) < 21 && Math.Abs(intVector2.y) < 21)
         {
             this.MoveSampleGridEntries(-intVector2);
             WaterOnTerrainSFX.IntVector intVector3;
             WaterOnTerrainSFX.IntVector intVector4;
             if (intVector2.x < 0)
             {
                 intVector3.x = 0;
                 intVector4.x = -intVector2.x;
             }
             else
             {
                 intVector3.x = 21 - intVector2.x;
                 intVector4.x = 21;
             }
             if (intVector2.y < 0)
             {
                 intVector3.y = 0;
                 intVector4.y = -intVector2.y;
             }
             else
             {
                 intVector3.y = 21 - intVector2.y;
                 intVector4.y = 21;
             }
             this.CacheGradients(intVector, new WaterOnTerrainSFX.IntVector(0, intVector3.y), new WaterOnTerrainSFX.IntVector(21, intVector4.y));
             if (intVector3.y > 0)
             {
                 this.CacheGradients(intVector, new WaterOnTerrainSFX.IntVector(intVector3.x, 0), new WaterOnTerrainSFX.IntVector(intVector4.x, intVector3.y));
             }
             else
             {
                 this.CacheGradients(intVector, new WaterOnTerrainSFX.IntVector(intVector3.x, intVector4.y), new WaterOnTerrainSFX.IntVector(intVector4.x, 21));
             }
         }
         else
         {
             this.CacheGradients(intVector, new WaterOnTerrainSFX.IntVector(0, 0), new WaterOnTerrainSFX.IntVector(21, 21));
         }
         this.CalculateSampleGridScores();
         int i = 0;
         while (i < this.sources.Count)
         {
             WaterOnTerrainSFX.Source source = this.sources[i];
             this.sources[i].localPosition -= intVector2;
             int squareMagnitude = (source.localPosition - WaterOnTerrainSFX.SAMPLE_GRID_CENTRE).squareMagnitude;
             if (!WaterOnTerrainSFX.IsWithinSampleGrid(source.localPosition) || squareMagnitude > 100)
             {
                 this.StopSource(i);
             }
             else
             {
                 i++;
             }
         }
         this.gridPosition = intVector;
     }
 }