Exemplo n.º 1
0
 // Token: 0x06003AD9 RID: 15065 RVA: 0x000D01DC File Offset: 0x000CE3DC
 public static global::LaserGraphics.VertexBuffer Size(int i)
 {
     global::LaserGraphics.VertexBuffer result;
     if (!global::LaserGraphics.VertexBuffer.Register.all.TryGetValue(i, out result))
     {
         global::LaserGraphics.VertexBuffer.Register.all.Add(i, result = new global::LaserGraphics.VertexBuffer(i));
     }
     return(result);
 }
Exemplo n.º 2
0
    // Token: 0x06003AD3 RID: 15059 RVA: 0x000CE6DC File Offset: 0x000CC8DC
    private void RenderLasers(Camera camera)
    {
        if (!this.madeLists)
        {
            this.beams      = new List <global::LaserBeam>();
            this.willRender = new List <global::LaserBeam>();
            this.madeLists  = true;
        }
        int cullingMask = camera.cullingMask;

        if (this.beams == null)
        {
            this.beams = new List <global::LaserBeam>(global::LaserBeam.Collect());
        }
        else
        {
            this.beams.Clear();
            this.beams.AddRange(global::LaserBeam.Collect());
        }
        global::LaserGraphics.allBeamsMask = 0;
        foreach (global::LaserBeam laserBeam in this.beams)
        {
            global::LaserGraphics.UpdateBeam(ref laserBeam.frame, laserBeam);
        }
        if ((cullingMask & global::LaserGraphics.allBeamsMask) != 0 && this.beams.Count > 0)
        {
            Plane[] array = GeometryUtility.CalculateFrustumPlanes(camera);
            foreach (global::LaserBeam laserBeam2 in this.beams)
            {
                if (laserBeam2.isViewModel || ((cullingMask & laserBeam2.frame.beamsLayer) == laserBeam2.frame.beamsLayer && GeometryUtility.TestPlanesAABB(array, laserBeam2.frame.bounds)))
                {
                    this.willRender.Add(laserBeam2);
                }
            }
            if (this.willRender.Count > 0)
            {
                global::LaserGraphics.world2Cam = camera.worldToCameraMatrix;
                global::LaserGraphics.cam2World = camera.cameraToWorldMatrix;
                global::LaserGraphics.camProj   = camera.projectionMatrix;
                try
                {
                    foreach (global::LaserBeam laserBeam3 in this.willRender)
                    {
                        global::LaserGraphics.RenderBeam(array, camera, laserBeam3, ref laserBeam3.frame);
                    }
                    foreach (global::LaserGraphics.MeshBuffer meshBuffer in global::LaserGraphics.Computation.beams)
                    {
                        bool rebindVertexLayout = meshBuffer.Resize();
                        int  num = 0;
                        global::LaserGraphics.VertexBuffer buffer = meshBuffer.buffer;
                        Vector3 min;
                        min.x = (min.y = (min.z = float.PositiveInfinity));
                        Vector3 max;
                        max.x = (max.y = (max.z = float.NegativeInfinity));
                        foreach (global::LaserBeam laserBeam4 in meshBuffer.beams)
                        {
                            int num2 = num++;
                            int num3 = num++;
                            int num4 = num++;
                            int num5 = num++;
                            buffer.v[num2] = laserBeam4.frame.beamVertices.m0;
                            buffer.v[num3] = laserBeam4.frame.beamVertices.m1;
                            buffer.v[num5] = laserBeam4.frame.beamVertices.m2;
                            buffer.v[num4] = laserBeam4.frame.beamVertices.m3;
                            buffer.n[num2] = laserBeam4.frame.beamNormals.m0;
                            buffer.n[num3] = laserBeam4.frame.beamNormals.m1;
                            buffer.n[num5] = laserBeam4.frame.beamNormals.m2;
                            buffer.n[num4] = laserBeam4.frame.beamNormals.m3;
                            buffer.c[num2] = laserBeam4.frame.beamColor.m0;
                            buffer.c[num3] = laserBeam4.frame.beamColor.m1;
                            buffer.c[num5] = laserBeam4.frame.beamColor.m2;
                            buffer.c[num4] = laserBeam4.frame.beamColor.m3;
                            buffer.t[num2] = laserBeam4.frame.beamUVs.m0;
                            buffer.t[num3] = laserBeam4.frame.beamUVs.m1;
                            buffer.t[num5] = laserBeam4.frame.beamUVs.m2;
                            buffer.t[num4] = laserBeam4.frame.beamUVs.m3;
                            for (int i = num2; i <= num4; i++)
                            {
                                if (buffer.v[i].x < min.x)
                                {
                                    min.x = buffer.v[i].x;
                                }
                                if (buffer.v[i].x > max.x)
                                {
                                    max.x = buffer.v[i].x;
                                }
                                if (buffer.v[i].y < min.y)
                                {
                                    min.y = buffer.v[i].y;
                                }
                                if (buffer.v[i].y > max.y)
                                {
                                    max.y = buffer.v[i].y;
                                }
                                if (buffer.v[i].z < min.z)
                                {
                                    min.z = buffer.v[i].z;
                                }
                                if (buffer.v[i].z > max.z)
                                {
                                    max.z = buffer.v[i].z;
                                }
                            }
                            laserBeam4.frame.bufBeam = null;
                        }
                        meshBuffer.beams.Clear();
                        meshBuffer.BindMesh(rebindVertexLayout, min, max);
                        Graphics.DrawMesh(meshBuffer.mesh, Matrix4x4.identity, meshBuffer.material, 1, camera, 0, null, false, false);
                    }
                    foreach (global::LaserGraphics.MeshBuffer meshBuffer2 in global::LaserGraphics.Computation.dots)
                    {
                        bool flag = meshBuffer2.Resize();
                        int  num6 = 0;
                        global::LaserGraphics.VertexBuffer buffer2 = meshBuffer2.buffer;
                        Vector3 min2;
                        min2.x = (min2.y = (min2.z = float.PositiveInfinity));
                        Vector3 max2;
                        max2.x = (max2.y = (max2.z = float.NegativeInfinity));
                        foreach (global::LaserBeam laserBeam5 in meshBuffer2.beams)
                        {
                            int num7  = num6++;
                            int num8  = num6++;
                            int num9  = num6++;
                            int num10 = num6++;
                            buffer2.v[num7]  = laserBeam5.frame.dotVertices1.m0;
                            buffer2.v[num8]  = laserBeam5.frame.dotVertices1.m1;
                            buffer2.v[num10] = laserBeam5.frame.dotVertices1.m2;
                            buffer2.v[num9]  = laserBeam5.frame.dotVertices1.m3;
                            buffer2.n[num7]  = laserBeam5.frame.beamNormals.m0;
                            buffer2.n[num8]  = laserBeam5.frame.beamNormals.m1;
                            buffer2.n[num10] = laserBeam5.frame.beamNormals.m2;
                            buffer2.n[num9]  = laserBeam5.frame.beamNormals.m3;
                            buffer2.c[num7]  = laserBeam5.frame.dotColor1.m0;
                            buffer2.c[num8]  = laserBeam5.frame.dotColor1.m1;
                            buffer2.c[num10] = laserBeam5.frame.dotColor1.m2;
                            buffer2.c[num9]  = laserBeam5.frame.dotColor1.m3;
                            buffer2.t[num7]  = global::LaserGraphics.uv[0];
                            buffer2.t[num8]  = global::LaserGraphics.uv[1];
                            buffer2.t[num10] = global::LaserGraphics.uv[2];
                            buffer2.t[num9]  = global::LaserGraphics.uv[3];
                            for (int j = num7; j <= num9; j++)
                            {
                                if (buffer2.v[j].x < min2.x)
                                {
                                    min2.x = buffer2.v[j].x;
                                }
                                if (buffer2.v[j].x > max2.x)
                                {
                                    max2.x = buffer2.v[j].x;
                                }
                                if (buffer2.v[j].y < min2.y)
                                {
                                    min2.y = buffer2.v[j].y;
                                }
                                if (buffer2.v[j].y > max2.y)
                                {
                                    max2.y = buffer2.v[j].y;
                                }
                                if (buffer2.v[j].z < min2.z)
                                {
                                    min2.z = buffer2.v[j].z;
                                }
                                if (buffer2.v[j].z > max2.z)
                                {
                                    max2.z = buffer2.v[j].z;
                                }
                            }
                            num7             = num6++;
                            num8             = num6++;
                            num9             = num6++;
                            num10            = num6++;
                            buffer2.v[num7]  = laserBeam5.frame.dotVertices2.m0;
                            buffer2.v[num8]  = laserBeam5.frame.dotVertices2.m1;
                            buffer2.v[num10] = laserBeam5.frame.dotVertices2.m2;
                            buffer2.v[num9]  = laserBeam5.frame.dotVertices2.m3;
                            buffer2.n[num7]  = laserBeam5.frame.beamNormals.m0;
                            buffer2.n[num8]  = laserBeam5.frame.beamNormals.m1;
                            buffer2.n[num10] = laserBeam5.frame.beamNormals.m2;
                            buffer2.n[num9]  = laserBeam5.frame.beamNormals.m3;
                            buffer2.c[num7]  = laserBeam5.frame.dotColor2.m0;
                            buffer2.c[num8]  = laserBeam5.frame.dotColor2.m1;
                            buffer2.c[num10] = laserBeam5.frame.dotColor2.m2;
                            buffer2.c[num9]  = laserBeam5.frame.dotColor2.m3;
                            buffer2.t[num7]  = global::LaserGraphics.uv[0];
                            buffer2.t[num8]  = global::LaserGraphics.uv[1];
                            buffer2.t[num10] = global::LaserGraphics.uv[2];
                            buffer2.t[num9]  = global::LaserGraphics.uv[3];
                            for (int k = num7; k <= num9; k++)
                            {
                                if (buffer2.v[k].x < min2.x)
                                {
                                    min2.x = buffer2.v[k].x;
                                }
                                if (buffer2.v[k].x > max2.x)
                                {
                                    max2.x = buffer2.v[k].x;
                                }
                                if (buffer2.v[k].y < min2.y)
                                {
                                    min2.y = buffer2.v[k].y;
                                }
                                if (buffer2.v[k].y > max2.y)
                                {
                                    max2.y = buffer2.v[k].y;
                                }
                                if (buffer2.v[k].z < min2.z)
                                {
                                    min2.z = buffer2.v[k].z;
                                }
                                if (buffer2.v[k].z > max2.z)
                                {
                                    max2.z = buffer2.v[k].z;
                                }
                            }
                            laserBeam5.frame.bufDot = null;
                        }
                        meshBuffer2.beams.Clear();
                        if (flag)
                        {
                            meshBuffer2.mesh.Clear(false);
                            meshBuffer2.mesh.vertices = buffer2.v;
                            meshBuffer2.mesh.normals  = buffer2.n;
                            meshBuffer2.mesh.colors   = buffer2.c;
                            meshBuffer2.mesh.uv       = buffer2.t;
                            meshBuffer2.mesh.SetIndices(buffer2.i, 2, 0);
                        }
                        else
                        {
                            meshBuffer2.mesh.vertices = buffer2.v;
                            meshBuffer2.mesh.normals  = buffer2.n;
                            meshBuffer2.mesh.colors   = buffer2.c;
                            meshBuffer2.mesh.uv       = buffer2.t;
                        }
                        meshBuffer2.BindMesh(flag, min2, max2);
                        Graphics.DrawMesh(meshBuffer2.mesh, Matrix4x4.identity, meshBuffer2.material, 1, camera, 0, null, false, false);
                    }
                }
                finally
                {
                    this.willRender.Clear();
                    global::LaserGraphics.Computation.beams.Clear();
                    global::LaserGraphics.Computation.dots.Clear();
                    global::LaserGraphics.MeshBuffer.Reset();
                }
            }
        }
    }