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(); } } }
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; } } }
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; } } }
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); } }
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); } } }
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); } }
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); }
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); } } }
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); } } }
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); } }
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); } } }
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); } }