コード例 #1
0
ファイル: LPShapeEditor.cs プロジェクト: stg34/OPENTadpole
    protected void DrawPointsUI()
    {
        DrawDefaultInspector();
        LPCorporeal poly = (LPCorporeal)target;
        string      msg  = "Draw Shape";

        if (poly.Drawing)
        {
            msg = "Stop Drawing";
        }

        if (GUILayout.Button(msg))
        {
            poly.Drawing = !poly.Drawing;

            if (poly.Drawing)
            {
                poly.DontDrawLoop = true;
            }
            else
            {
                poly.DontDrawLoop = false;
            }

            if (poly.Drawing)
            {
                Undo.RecordObject(poly, "Draw poly shape");
                poly.drawingfirstpoint = true;
                poly.EmptyPoints();
            }
        }
    }
コード例 #2
0
ファイル: LPShapeEditor.cs プロジェクト: stg34/OPENTadpole
    protected void CheckDists(LPCorporeal poly)
    {
        LPFixture[] polys  = poly.gameObject.GetComponents <LPFixturePoly>();
        LPFixture[] chains = poly.gameObject.GetComponents <LPFixtureChainShape>();

        LPFixture[] fixes = new LPFixture[0];

        if (polys != null && chains == null)
        {
            fixes = polys;
        }
        else if (polys == null && chains != null)
        {
            fixes = chains;
        }
        else if (polys != null && chains != null)
        {
            fixes = new LPFixture[polys.Length + chains.Length];
            Array.Copy(polys, fixes, polys.Length);
            Array.Copy(chains, 0, fixes, polys.Length, chains.Length);
        }

        if (fixes.Length > 1)
        {
            fixes           = fixes.OrderBy(d => d.ClosestDist).ToArray();
            fixes[0].EditMe = true;

            for (int i = 1; i < fixes.Length; i++)
            {
                fixes[i].EditMe = false;
            }
        }
    }
コード例 #3
0
    protected void CheckDists(LPCorporeal poly)
    {
        LPFixture[] polys = poly.gameObject.GetComponents<LPFixturePoly>();
        LPFixture[] chains = poly.gameObject.GetComponents<LPFixtureChainShape>();

        LPFixture[] fixes = new LPFixture[0];

        if (polys!=null && chains == null)
        {
            fixes = polys;
        }
        else if(polys==null && chains != null)
        {
            fixes = chains;
        }
        else if (polys!=null && chains !=null)
        {
            fixes = new LPFixture[polys.Length + chains.Length];
            Array.Copy(polys, fixes,polys.Length);
            Array.Copy(chains,0,fixes,polys.Length,chains.Length);
        }

        if (fixes.Length > 1)
        {
            fixes  = fixes.OrderBy(d => d.ClosestDist).ToArray();
            fixes[0].EditMe = true;

            for (int i = 1; i < fixes.Length; i++)
            {
                fixes[i].EditMe = false;
            }
        }
    }
コード例 #4
0
ファイル: LPShapeEditor.cs プロジェクト: stg34/OPENTadpole
    protected void Drawpoints(LPCorporeal poly, Event e)
    {
        Vector3 mousepos = GetMousePos(e);
        int     cID      = GetCID();

        if (!poly.drawingfirstpoint)
        {
            Handles.DrawAAPolyLine(2f, new Vector3[2] {
                LastPoint, mousepos
            });
        }

        switch (e.type)
        {
        case EventType.mouseDown:
            if (!drawingpoint)
            {
                LastPoint = mousepos;
                poly.AddPoint(mousepos - poly.transform.position);
                if (poly.drawingfirstpoint)
                {
                    poly.drawingfirstpoint = false;
                }
            }
            drawingpoint = true;
            e.Use();
            break;

        case EventType.mouseUp:
            drawingpoint = false;
            e.Use();
            break;

        case EventType.MouseMove:
            e.Use();
            break;

        case EventType.layout:
            HandleUtility.AddDefaultControl(cID);
            break;
        }
        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }
コード例 #5
0
ファイル: LPShapeEditor.cs プロジェクト: stg34/OPENTadpole
    protected void Removepoints(LPCorporeal poly, Event e)
    {
        Vector3 mousepos = GetMousePos(e);
        int     cID      = GetCID();

        int   closest;
        float dist;

        isclosest        = CheckDists(poly.transform, poly.GetPoints(), poly.transform.position, mousepos, cID, out closest, out dist, Color.red, poly.EditMe);
        poly.ClosestDist = dist;
        if (isclosest)
        {
            editpoint = closest;
        }
        CheckDists(poly);

        if (poly.EditMe)
        {
            switch (e.type)
            {
            case EventType.mouseDown:
                if (isclosest && poly.GetPoints().Count > 3)
                {
                    Undo.RecordObject(poly, "Remove Point from poly shape");
                    poly.RemovePoint(closest);
                }
                e.Use();
                break;

            case EventType.MouseMove:
                e.Use();
                break;

            case EventType.layout:
                HandleUtility.AddDefaultControl(cID);
                break;
            }
            if (GUI.changed)
            {
                EditorUtility.SetDirty(target);
            }
        }
    }
コード例 #6
0
ファイル: LPShapeEditor.cs プロジェクト: stg34/OPENTadpole
    protected void Manipulate(Event e)
    {
        LPCorporeal poly = (LPCorporeal)target;

        if (poly.Drawing)
        {
            Drawpoints(poly, e);
        }
        else if (e.shift)
        {
            Movepoints(poly, e);
        }
        else if (e.control)
        {
            Removepoints(poly, e);
        }
        else if (e.alt)
        {
            Insertpoints(poly, e);
        }
    }
コード例 #7
0
    protected void Drawpoints(LPCorporeal poly, Event e)
    {
        Vector3 mousepos = GetMousePos(e);
        int cID = GetCID();

        if (!poly.drawingfirstpoint)
        {
            Handles.DrawAAPolyLine(2f,new Vector3[2]{LastPoint,mousepos});
        }

        switch (e.type)
        {
        case EventType.mouseDown:
            if (!drawingpoint)
            {
                LastPoint = mousepos;
                poly.AddPoint(mousepos - poly.transform.position);
                if(poly.drawingfirstpoint)poly.drawingfirstpoint = false;
            }
            drawingpoint = true;
            e.Use();
            break;

        case EventType.mouseUp:
            drawingpoint = false;
            e.Use();
            break;

        case EventType.MouseMove:
            e.Use();
             break;

        case EventType.layout:
            HandleUtility.AddDefaultControl(cID);
            break;
            }
            if (GUI.changed) EditorUtility.SetDirty(target);
    }
コード例 #8
0
ファイル: LPShapeEditor.cs プロジェクト: stg34/OPENTadpole
    protected void Insertpoints(LPCorporeal poly, Event e)
    {
        Vector3 mousepos = GetMousePos(e);
        int     cID      = GetCID();

        int   closest = 0;
        float dist    = 0;

        if (!created)
        {
            isclosest = DrawLines(poly.transform, poly.GetPoints(), poly.transform.position, mousepos
                                  , cID, out closest, out dist, Color.green, poly.EditMe);
        }
        poly.ClosestDist = dist;
        CheckDists(poly);

        if (poly.EditMe)
        {
            switch (e.type)
            {
            case EventType.mouseDown:
                if (isclosest)
                {
                    Undo.RecordObject(poly, "Add Point to poly shape");
                    poly.InsertPoint(closest + 1, mousepos - poly.transform.position);
                    created                = true;
                    createdindex           = closest + 1;
                    EditingStatics.editing = true;
                }
                e.Use();
                break;

            case EventType.MouseDrag:
                if (created)
                {
                    poly.EditPoint(createdindex, mousepos - poly.transform.position);
                }

                e.Use();
                break;

            case EventType.MouseMove:
                e.Use();
                break;

            case EventType.mouseUp:
                created = false;
                EditingStatics.editing = false;
                e.Use();
                break;

            case EventType.layout:
                HandleUtility.AddDefaultControl(cID);
                break;
            }
            if (GUI.changed)
            {
                EditorUtility.SetDirty(target);
            }
        }
    }
コード例 #9
0
ファイル: LPShapeEditor.cs プロジェクト: stg34/OPENTadpole
    protected void Movepoints(LPCorporeal poly, Event e)
    {
        Vector3 mousepos = GetMousePos(e);
        int     cID      = GetCID();

        if (!editing)
        {
            int   closest;
            float dist;
            isclosest        = CheckDists(poly.transform, poly.GetPoints(), poly.transform.position, mousepos, cID, out closest, out dist, Color.blue, poly.EditMe);
            poly.ClosestDist = dist;
            if (isclosest)
            {
                editpoint = closest;
            }
            if (!EditingStatics.editing)
            {
                CheckDists(poly);
            }
        }

        if (poly.EditMe)
        {
            switch (e.type)
            {
            case EventType.mouseDown:
                if (isclosest)
                {
                    Undo.RecordObject(poly, "Move Point in poly shape");
                    editing = true;
                    EditingStatics.editing = true;
                }
                e.Use();
                break;

            case EventType.mouseUp:
                if (editing)
                {
                    editing = false;
                    EditingStatics.editing = false;
                }
                e.Use();
                break;

            case EventType.MouseMove:
                e.Use();
                break;

            case EventType.MouseDrag:
                e.Use();
                break;

            case EventType.layout:
                HandleUtility.AddDefaultControl(cID);
                break;
            }
            if (GUI.changed)
            {
                EditorUtility.SetDirty(target);
            }

            if (editing)
            {
                poly.EditPoint(editpoint, mousepos - poly.transform.position);
            }
        }
    }
コード例 #10
0
    protected void Removepoints(LPCorporeal poly, Event e)
    {
        Vector3 mousepos = GetMousePos(e);
        int cID = GetCID();

        int closest;
        float dist;
        isclosest = CheckDists(poly.transform,poly.GetPoints(),poly.transform.position,mousepos,cID,out closest, out dist,Color.red,poly.EditMe);
        poly.ClosestDist = dist;
        if (isclosest)
        {
            editpoint = closest;
        }
        CheckDists(poly);

        if(poly.EditMe)
        {

            switch (e.type)
            {
            case EventType.mouseDown:
                if (isclosest && poly.GetPoints().Count > 3)
                {
                    Undo.RecordObject (poly,"Remove Point from poly shape");
                    poly.RemovePoint(closest);
                }
                e.Use();
                break;

            case EventType.MouseMove:
                e.Use();
                    break;

                case EventType.layout:
                    HandleUtility.AddDefaultControl(cID);
                    break;
            }
            if (GUI.changed) EditorUtility.SetDirty(target);
        }
    }
コード例 #11
0
    protected void Movepoints(LPCorporeal poly, Event e)
    {
        Vector3 mousepos = GetMousePos(e);
        int cID = GetCID();

        if (!editing)
        {
            int closest;
            float dist;
            isclosest = CheckDists(poly.transform,poly.GetPoints(),poly.transform.position,mousepos,cID,out closest,out dist,Color.blue,poly.EditMe);
            poly.ClosestDist = dist;
            if (isclosest)
            {
                editpoint = closest;
            }
            if(!EditingStatics.editing)CheckDists(poly);
        }

        if (poly.EditMe)
        {
            switch (e.type)
            {
            case EventType.mouseDown:
                if (isclosest)
                {
                    Undo.RecordObject (poly,"Move Point in poly shape");
                    editing = true;
                    EditingStatics.editing = true;
                }
                e.Use();
                break;

            case EventType.mouseUp:
                if (editing)
                {
                    editing = false;
                    EditingStatics.editing = false;
                }
                e.Use();
                break;

            case EventType.MouseMove:
                e.Use();
                break;

                case EventType.MouseDrag:
                    e.Use();
                    break;

                case EventType.layout:
                    HandleUtility.AddDefaultControl(cID);
                    break;
            }
            if (GUI.changed) EditorUtility.SetDirty(target);

            if (editing)
            {
                poly.EditPoint(editpoint,mousepos - poly.transform.position);
            }
        }
    }
コード例 #12
0
    protected void Insertpoints(LPCorporeal poly, Event e)
    {
        Vector3 mousepos = GetMousePos(e);
        int cID = GetCID();

        int closest = 0;
        float dist = 0;
        if (!created) isclosest = DrawLines(poly.transform,poly.GetPoints(),poly.transform.position,mousepos
                                                                        ,cID,out closest,out dist,Color.green,poly.EditMe);
        poly.ClosestDist = dist;
        CheckDists(poly);

        if (poly.EditMe)
        {
            switch (e.type)
            {
            case EventType.mouseDown:
                if (isclosest)
                {
                    Undo.RecordObject (poly,"Add Point to poly shape");
                    poly.InsertPoint(closest+1,mousepos-poly.transform.position);
                    created = true;
                    createdindex = closest+1;
                    EditingStatics.editing = true;
                }
                e.Use();
                break;

            case EventType.MouseDrag:
                if (created)poly.EditPoint(createdindex,mousepos - poly.transform.position);

                e.Use();
                    break;

            case EventType.MouseMove:
                e.Use();
                break;

            case EventType.mouseUp:
                created = false;
                EditingStatics.editing = false;
                e.Use();
                break;

                case EventType.layout:
                    HandleUtility.AddDefaultControl(cID);
                    break;
            }
            if (GUI.changed) EditorUtility.SetDirty(target);
        }
    }