Esempio n. 1
0
 public static LaserGraphics.VertexBuffer Size(int i)
 {
     LaserGraphics.VertexBuffer buffer;
     if (!Register.all.TryGetValue(i, out buffer))
     {
         Register.all.Add(i, buffer = new LaserGraphics.VertexBuffer(i));
     }
     return(buffer);
 }
Esempio n. 2
0
 private static LaserGraphics.MeshBuffer ForMaterial(Dictionary <Material, LaserGraphics.MeshBuffer> all, Material material)
 {
     LaserGraphics.MeshBuffer buffer;
     if (!all.TryGetValue(material, out buffer))
     {
         buffer = new LaserGraphics.MeshBuffer(material);
         all.Add(material, buffer);
     }
     return(buffer);
 }
Esempio n. 3
0
 public static LaserGraphics.VertexBuffer Size(int i)
 {
     LaserGraphics.VertexBuffer vertexBuffer;
     if (!LaserGraphics.VertexBuffer.Register.all.TryGetValue(i, out vertexBuffer))
     {
         Dictionary <int, LaserGraphics.VertexBuffer> nums = LaserGraphics.VertexBuffer.Register.all;
         LaserGraphics.VertexBuffer vertexBuffer1          = new LaserGraphics.VertexBuffer(i);
         vertexBuffer = vertexBuffer1;
         nums.Add(i, vertexBuffer1);
     }
     return(vertexBuffer);
 }
Esempio n. 4
0
 private bool SetSize(int size)
 {
     if (this.quadCount == size)
     {
         return(false);
     }
     if (size == 0)
     {
         this.buffer = null;
     }
     else
     {
         this.buffer = LaserGraphics.VertexBuffer.Size(size);
     }
     this.quadCount = size;
     return(true);
 }
Esempio n. 5
0
    private void RenderLasers(Camera camera)
    {
        Vector3 vector3  = new Vector3();
        Vector3 vector31 = new Vector3();
        Vector3 vector32 = new Vector3();
        Vector3 vector33 = new Vector3();
        float   single;

        if (!this.madeLists)
        {
            this.beams      = new List <LaserBeam>();
            this.willRender = new List <LaserBeam>();
            this.madeLists  = true;
        }
        int num = camera.cullingMask;

        if (this.beams != null)
        {
            this.beams.Clear();
            this.beams.AddRange(LaserBeam.Collect());
        }
        else
        {
            this.beams = new List <LaserBeam>(LaserBeam.Collect());
        }
        LaserGraphics.allBeamsMask = 0;
        foreach (LaserBeam beam in this.beams)
        {
            LaserGraphics.UpdateBeam(ref beam.frame, beam);
        }
        if ((num & LaserGraphics.allBeamsMask) != 0 && this.beams.Count > 0)
        {
            Plane[] planeArray = GeometryUtility.CalculateFrustumPlanes(camera);
            foreach (LaserBeam laserBeam in this.beams)
            {
                if (!laserBeam.isViewModel && ((num & laserBeam.frame.beamsLayer) != laserBeam.frame.beamsLayer || !GeometryUtility.TestPlanesAABB(planeArray, laserBeam.frame.bounds)))
                {
                    continue;
                }
                this.willRender.Add(laserBeam);
            }
            if (this.willRender.Count > 0)
            {
                LaserGraphics.world2Cam = camera.worldToCameraMatrix;
                LaserGraphics.cam2World = camera.cameraToWorldMatrix;
                LaserGraphics.camProj   = camera.projectionMatrix;
                try
                {
                    foreach (LaserBeam laserBeam1 in this.willRender)
                    {
                        LaserGraphics.RenderBeam(planeArray, camera, laserBeam1, ref laserBeam1.frame);
                    }
                    foreach (LaserGraphics.MeshBuffer meshBuffer in LaserGraphics.Computation.beams)
                    {
                        bool flag = meshBuffer.Resize();
                        int  num1 = 0;
                        LaserGraphics.VertexBuffer vertexBuffer = meshBuffer.buffer;
                        float single1 = Single.PositiveInfinity;
                        single    = single1;
                        vector3.z = single1;
                        float single2 = single;
                        single    = single2;
                        vector3.y = single2;
                        vector3.x = single;
                        float single3 = Single.NegativeInfinity;
                        single     = single3;
                        vector31.z = single3;
                        float single4 = single;
                        single     = single4;
                        vector31.y = single4;
                        vector31.x = single;
                        foreach (LaserBeam beam1 in meshBuffer.beams)
                        {
                            int num2 = num1;
                            num1 = num2 + 1;
                            int num3 = num2;
                            int num4 = num1;
                            num1 = num4 + 1;
                            int num5 = num4;
                            int num6 = num1;
                            num1 = num6 + 1;
                            int num7 = num6;
                            int num8 = num1;
                            num1 = num8 + 1;
                            int num9 = num8;
                            vertexBuffer.v[num3] = beam1.frame.beamVertices.m0;
                            vertexBuffer.v[num5] = beam1.frame.beamVertices.m1;
                            vertexBuffer.v[num9] = beam1.frame.beamVertices.m2;
                            vertexBuffer.v[num7] = beam1.frame.beamVertices.m3;
                            vertexBuffer.n[num3] = beam1.frame.beamNormals.m0;
                            vertexBuffer.n[num5] = beam1.frame.beamNormals.m1;
                            vertexBuffer.n[num9] = beam1.frame.beamNormals.m2;
                            vertexBuffer.n[num7] = beam1.frame.beamNormals.m3;
                            vertexBuffer.c[num3] = beam1.frame.beamColor.m0;
                            vertexBuffer.c[num5] = beam1.frame.beamColor.m1;
                            vertexBuffer.c[num9] = beam1.frame.beamColor.m2;
                            vertexBuffer.c[num7] = beam1.frame.beamColor.m3;
                            vertexBuffer.t[num3] = beam1.frame.beamUVs.m0;
                            vertexBuffer.t[num5] = beam1.frame.beamUVs.m1;
                            vertexBuffer.t[num9] = beam1.frame.beamUVs.m2;
                            vertexBuffer.t[num7] = beam1.frame.beamUVs.m3;
                            for (int i = num3; i <= num7; i++)
                            {
                                if (vertexBuffer.v[i].x < vector3.x)
                                {
                                    vector3.x = vertexBuffer.v[i].x;
                                }
                                if (vertexBuffer.v[i].x > vector31.x)
                                {
                                    vector31.x = vertexBuffer.v[i].x;
                                }
                                if (vertexBuffer.v[i].y < vector3.y)
                                {
                                    vector3.y = vertexBuffer.v[i].y;
                                }
                                if (vertexBuffer.v[i].y > vector31.y)
                                {
                                    vector31.y = vertexBuffer.v[i].y;
                                }
                                if (vertexBuffer.v[i].z < vector3.z)
                                {
                                    vector3.z = vertexBuffer.v[i].z;
                                }
                                if (vertexBuffer.v[i].z > vector31.z)
                                {
                                    vector31.z = vertexBuffer.v[i].z;
                                }
                            }
                            beam1.frame.bufBeam = null;
                        }
                        meshBuffer.beams.Clear();
                        meshBuffer.BindMesh(flag, vector3, vector31);
                        Graphics.DrawMesh(meshBuffer.mesh, Matrix4x4.identity, meshBuffer.material, 1, camera, 0, null, false, false);
                    }
                    foreach (LaserGraphics.MeshBuffer dot in LaserGraphics.Computation.dots)
                    {
                        bool flag1 = dot.Resize();
                        int  num10 = 0;
                        LaserGraphics.VertexBuffer vertexBuffer1 = dot.buffer;
                        float single5 = Single.PositiveInfinity;
                        single     = single5;
                        vector32.z = single5;
                        float single6 = single;
                        single     = single6;
                        vector32.y = single6;
                        vector32.x = single;
                        float single7 = Single.NegativeInfinity;
                        single     = single7;
                        vector33.z = single7;
                        float single8 = single;
                        single     = single8;
                        vector33.y = single8;
                        vector33.x = single;
                        foreach (LaserBeam beam2 in dot.beams)
                        {
                            int num11 = num10;
                            num10 = num11 + 1;
                            int num12 = num11;
                            int num13 = num10;
                            num10 = num13 + 1;
                            int num14 = num13;
                            int num15 = num10;
                            num10 = num15 + 1;
                            int num16 = num15;
                            int num17 = num10;
                            num10 = num17 + 1;
                            int num18 = num17;
                            vertexBuffer1.v[num12] = beam2.frame.dotVertices1.m0;
                            vertexBuffer1.v[num14] = beam2.frame.dotVertices1.m1;
                            vertexBuffer1.v[num18] = beam2.frame.dotVertices1.m2;
                            vertexBuffer1.v[num16] = beam2.frame.dotVertices1.m3;
                            vertexBuffer1.n[num12] = beam2.frame.beamNormals.m0;
                            vertexBuffer1.n[num14] = beam2.frame.beamNormals.m1;
                            vertexBuffer1.n[num18] = beam2.frame.beamNormals.m2;
                            vertexBuffer1.n[num16] = beam2.frame.beamNormals.m3;
                            vertexBuffer1.c[num12] = beam2.frame.dotColor1.m0;
                            vertexBuffer1.c[num14] = beam2.frame.dotColor1.m1;
                            vertexBuffer1.c[num18] = beam2.frame.dotColor1.m2;
                            vertexBuffer1.c[num16] = beam2.frame.dotColor1.m3;
                            vertexBuffer1.t[num12] = LaserGraphics.uv[0];
                            vertexBuffer1.t[num14] = LaserGraphics.uv[1];
                            vertexBuffer1.t[num18] = LaserGraphics.uv[2];
                            vertexBuffer1.t[num16] = LaserGraphics.uv[3];
                            for (int j = num12; j <= num16; j++)
                            {
                                if (vertexBuffer1.v[j].x < vector32.x)
                                {
                                    vector32.x = vertexBuffer1.v[j].x;
                                }
                                if (vertexBuffer1.v[j].x > vector33.x)
                                {
                                    vector33.x = vertexBuffer1.v[j].x;
                                }
                                if (vertexBuffer1.v[j].y < vector32.y)
                                {
                                    vector32.y = vertexBuffer1.v[j].y;
                                }
                                if (vertexBuffer1.v[j].y > vector33.y)
                                {
                                    vector33.y = vertexBuffer1.v[j].y;
                                }
                                if (vertexBuffer1.v[j].z < vector32.z)
                                {
                                    vector32.z = vertexBuffer1.v[j].z;
                                }
                                if (vertexBuffer1.v[j].z > vector33.z)
                                {
                                    vector33.z = vertexBuffer1.v[j].z;
                                }
                            }
                            int num19 = num10;
                            num10 = num19 + 1;
                            num12 = num19;
                            int num20 = num10;
                            num10 = num20 + 1;
                            num14 = num20;
                            int num21 = num10;
                            num10 = num21 + 1;
                            num16 = num21;
                            int num22 = num10;
                            num10 = num22 + 1;
                            num18 = num22;
                            vertexBuffer1.v[num12] = beam2.frame.dotVertices2.m0;
                            vertexBuffer1.v[num14] = beam2.frame.dotVertices2.m1;
                            vertexBuffer1.v[num18] = beam2.frame.dotVertices2.m2;
                            vertexBuffer1.v[num16] = beam2.frame.dotVertices2.m3;
                            vertexBuffer1.n[num12] = beam2.frame.beamNormals.m0;
                            vertexBuffer1.n[num14] = beam2.frame.beamNormals.m1;
                            vertexBuffer1.n[num18] = beam2.frame.beamNormals.m2;
                            vertexBuffer1.n[num16] = beam2.frame.beamNormals.m3;
                            vertexBuffer1.c[num12] = beam2.frame.dotColor2.m0;
                            vertexBuffer1.c[num14] = beam2.frame.dotColor2.m1;
                            vertexBuffer1.c[num18] = beam2.frame.dotColor2.m2;
                            vertexBuffer1.c[num16] = beam2.frame.dotColor2.m3;
                            vertexBuffer1.t[num12] = LaserGraphics.uv[0];
                            vertexBuffer1.t[num14] = LaserGraphics.uv[1];
                            vertexBuffer1.t[num18] = LaserGraphics.uv[2];
                            vertexBuffer1.t[num16] = LaserGraphics.uv[3];
                            for (int k = num12; k <= num16; k++)
                            {
                                if (vertexBuffer1.v[k].x < vector32.x)
                                {
                                    vector32.x = vertexBuffer1.v[k].x;
                                }
                                if (vertexBuffer1.v[k].x > vector33.x)
                                {
                                    vector33.x = vertexBuffer1.v[k].x;
                                }
                                if (vertexBuffer1.v[k].y < vector32.y)
                                {
                                    vector32.y = vertexBuffer1.v[k].y;
                                }
                                if (vertexBuffer1.v[k].y > vector33.y)
                                {
                                    vector33.y = vertexBuffer1.v[k].y;
                                }
                                if (vertexBuffer1.v[k].z < vector32.z)
                                {
                                    vector32.z = vertexBuffer1.v[k].z;
                                }
                                if (vertexBuffer1.v[k].z > vector33.z)
                                {
                                    vector33.z = vertexBuffer1.v[k].z;
                                }
                            }
                            beam2.frame.bufDot = null;
                        }
                        dot.beams.Clear();
                        if (!flag1)
                        {
                            dot.mesh.vertices = vertexBuffer1.v;
                            dot.mesh.normals  = vertexBuffer1.n;
                            dot.mesh.colors   = vertexBuffer1.c;
                            dot.mesh.uv       = vertexBuffer1.t;
                        }
                        else
                        {
                            dot.mesh.Clear(false);
                            dot.mesh.vertices = vertexBuffer1.v;
                            dot.mesh.normals  = vertexBuffer1.n;
                            dot.mesh.colors   = vertexBuffer1.c;
                            dot.mesh.uv       = vertexBuffer1.t;
                            dot.mesh.SetIndices(vertexBuffer1.i, MeshTopology.Quads, 0);
                        }
                        dot.BindMesh(flag1, vector32, vector33);
                        Graphics.DrawMesh(dot.mesh, Matrix4x4.identity, dot.material, 1, camera, 0, null, false, false);
                    }
                }
                finally
                {
                    this.willRender.Clear();
                    LaserGraphics.Computation.beams.Clear();
                    LaserGraphics.Computation.dots.Clear();
                    LaserGraphics.MeshBuffer.Reset();
                }
            }
        }
    }