Ejemplo n.º 1
0
 private void OnPreCull()
 {
     if (((Terrain.activeTerrain != null) && (Terrain.activeTerrain.terrainData != null)) && ((this._enabled && grass.on) && FPGrass.anyEnabled))
     {
         Terrain activeTerrain = Terrain.activeTerrain;
         this.UpdateDisplacement(grass.displacement);
         if (activeTerrain != null)
         {
             FPGrass.RenderArguments arguments;
             Camera camera = base.camera;
             this._frustum       = GeometryUtility.CalculateFrustumPlanes(camera);
             arguments.frustum   = this._frustum;
             arguments.camera    = camera;
             arguments.immediate = false;
             arguments.terrain   = activeTerrain;
             arguments.center    = camera.transform.position;
             FPGrass.DrawAllGrass(ref arguments);
         }
     }
 }
Ejemplo n.º 2
0
 private void OnPreCull()
 {
     FPGrass.RenderArguments renderArgument = new FPGrass.RenderArguments();
     if (!Terrain.activeTerrain || !Terrain.activeTerrain.terrainData)
     {
         return;
     }
     if (this._enabled && grass.on && FPGrass.anyEnabled)
     {
         Terrain terrain = Terrain.activeTerrain;
         this.UpdateDisplacement(grass.displacement);
         if (terrain)
         {
             Camera camera = base.camera;
             this._frustum            = GeometryUtility.CalculateFrustumPlanes(camera);
             renderArgument.frustum   = this._frustum;
             renderArgument.camera    = camera;
             renderArgument.immediate = false;
             renderArgument.terrain   = terrain;
             renderArgument.center    = camera.transform.position;
             FPGrass.DrawAllGrass(ref renderArgument);
         }
     }
 }
Ejemplo n.º 3
0
 internal void Render(ref FPGrass.RenderArguments renderArgs)
 {
     Bounds bound;
     bool flag;
     float single;
     float single1;
     float single2;
     float single3;
     float single4;
     float single5;
     if (renderArgs.terrain == null)
     {
         return;
     }
     Vector3 vector3 = renderArgs.center + this.transform.position;
     if (vector3.x != this.lastRenderPosition.x || vector3.y != this.lastRenderPosition.y || vector3.z != this.lastRenderPosition.z)
     {
         Vector3 vector31 = vector3;
         Vector3 vector32 = vector31;
         Vector3 vector33 = vector31;
         Vector3 vector34 = vector31;
         float single6 = this.patchSize * 0.5f;
         vector31.x = vector31.x - single6;
         vector31.z = vector31.z + single6;
         vector32.x = vector32.x - single6;
         vector32.z = vector32.z - single6;
         vector33.x = vector33.x + single6;
         vector33.z = vector33.z + single6;
         vector34.x = vector34.x + single6;
         vector34.z = vector34.z - single6;
         float single7 = renderArgs.terrain.SampleHeight(vector31);
         float single8 = renderArgs.terrain.SampleHeight(vector32);
         float single9 = renderArgs.terrain.SampleHeight(vector33);
         float single10 = renderArgs.terrain.SampleHeight(vector34);
         if (single7 >= single8)
         {
             single2 = single8;
             single4 = single7;
         }
         else
         {
             single2 = single7;
             single4 = single8;
         }
         if (single9 >= single10)
         {
             single3 = single10;
             single5 = single9;
         }
         else
         {
             single3 = single9;
             single5 = single10;
         }
         single = (single2 >= single3 ? single3 : single2);
         single1 = (single4 <= single5 ? single5 : single4);
         vector32.y = single - 5f;
         vector33.y = single1 + 5f;
         bound = new Bounds();
         bound.SetMinMax(vector32, vector33);
         flag = bound != this.lastBounds;
     }
     else
     {
         bound = this.lastBounds;
         flag = false;
     }
     if (!this.runtimeMesh)
     {
         this.runtimeMesh = this.mesh;
     }
     if (flag)
     {
         this.runtimeMesh.bounds = new Bounds(bound.center - vector3, bound.size);
         this.lastBounds = bound;
     }
     if (GeometryUtility.TestPlanesAABB(renderArgs.frustum, bound))
     {
         this.level.Draw(this, this.runtimeMesh, ref vector3, ref renderArgs);
     }
 }