Пример #1
0
 static public void SwapInf(MegaScatter mod, int t1, int t2)
 {
     if (t1 >= 0 && t1 < mod.layers.Count && t2 >= 0 && t2 < mod.layers.Count && t1 != t2)
     {
         MegaScatterLayer inf = mod.layers[t1];
         mod.layers.RemoveAt(t1);
         mod.layers.Insert(t2, inf);
         //EditorUtility.SetDirty(target);
     }
 }
Пример #2
0
    static public void DisplayGizmo(MegaScatter mod, Matrix4x4 tm)
    {
        if (mod && mod.displaygizmo && mod.layers.Count > 0)
        {
            Handles.matrix = tm;

            Handles.color = Color.green;

            if (mod.currentEdit >= 0)
            {
                Vector3 p1 = Vector3.zero;
                Vector3 p2 = Vector3.zero;
                Vector3 p3 = Vector3.zero;
                Vector3 p4 = Vector3.zero;

                p1.x = mod.totalbounds.min.x;
                p1.z = mod.totalbounds.min.z;

                p2.x = mod.totalbounds.max.x;
                p2.z = mod.totalbounds.min.z;

                p3.x = mod.totalbounds.max.x;
                p3.z = mod.totalbounds.max.z;

                p4.x = mod.totalbounds.min.x;
                p4.z = mod.totalbounds.max.z;

                Handles.DrawLine(p1, p2);
                Handles.DrawLine(p2, p3);
                Handles.DrawLine(p3, p4);
                Handles.DrawLine(p4, p1);

                MegaScatterLayer inf = mod.layers[mod.currentEdit];

                Handles.color = disccol;
                //Handles.CircleCap(0, Vector3.zero, Quaternion.identity, inf.radius * inf.scale * mod.globalScale.x);
                Handles.matrix = mod.transform.localToWorldMatrix;
                Handles.DrawSolidDisc(Vector3.zero, Vector3.up, inf.radius * inf.scale * mod.globalScale.x);

                if (inf.useheight)
                {
                    Handles.matrix = Matrix4x4.identity;

                    //Vector3 hp = Vector3.zero;

                    Vector3[] pv = new Vector3[4];

                    //Matrix4x4 tm = mod.shape.transform.localToWorldMatrix;
                    pv[0] = tm.MultiplyPoint3x4(p1);
                    pv[1] = tm.MultiplyPoint3x4(p2);
                    pv[2] = tm.MultiplyPoint3x4(p3);
                    pv[3] = tm.MultiplyPoint3x4(p4);
                    //hp = inf.
                    pv[0].y = pv[1].y = pv[2].y = pv[3].y = inf.minheight;

                    Handles.color = Color.grey;

                    Color c = new Color(1, 1, 1, 0.25f);
                    //Handles.DrawSolidRectangleWithOutline(pv, c, Color.blue);
                    //DisplayQuad(pv, tm);
        #if true
                    GL.PushMatrix();
                    GL.Color(c);
                    GL.Begin(GL.QUADS);
                    GL.Vertex(pv[0]);
                    GL.Vertex(pv[1]);
                    GL.Vertex(pv[2]);
                    GL.Vertex(pv[3]);
                    GL.End();
                    GL.PopMatrix();
        #endif
                    Handles.color = Color.blue;
                    Handles.DrawPolyLine(pv);

                    pv[0].y = pv[1].y = pv[2].y = pv[3].y = inf.maxheight;
                    //p1.y = p2.y = p3.y = p4.y = inf.maxheight;

                    //Handles.color = Color.red;

                    //Handles.DrawLine(p1, p2);
                    //Handles.DrawLine(p2, p3);
                    //Handles.DrawLine(p3, p4);
                    //Handles.DrawLine(p4, p1);

                    //Handles.DrawSolidRectangleWithOutline(pv, c, Color.red);
        #if true
                    GL.PushMatrix();
                    GL.Color(c);
                    GL.Begin(GL.QUADS);
                    GL.Vertex(pv[0]);
                    GL.Vertex(pv[1]);
                    GL.Vertex(pv[2]);
                    GL.Vertex(pv[3]);
                    GL.End();
                    GL.PopMatrix();
        #endif
                    Handles.color = Color.red;
                    Handles.DrawPolyLine(pv);
                }
            }
        }
    }