public static void UnregisterZone(PAExclusionZone zone) { if (exclusionZones != null && exclusionZones.Contains(zone)) { exclusionZones.Remove(zone); } exclusionZones.RemoveAll((obj) => obj == null); }
public static void RegisterZone(PAExclusionZone zone) { if (exclusionZones == null) { exclusionZones = new List <PAExclusionZone>(); } if (!exclusionZones.Contains(zone)) { exclusionZones.Add(zone); } }
void OnSceneGUI() { PAExclusionZone zone = target as PAExclusionZone; if (zone) { DrawBoxGizmo(zone); PAParticleFieldInspector.DrawWireCube(Vector3.zero, zone.edgeThreshold, zone.transform, new Color(1, 1, 1, 0.5f)); } }
public static bool GetExclusionZones(ref PAExclusionZone[] zones, Vector3 position, Bounds checkBounds, int layer) { bool foundExclusionZones = false; for (int i = 0; i < zones.Length; i++) { zones[i] = null; } if (exclusionZones == null) { return(foundExclusionZones); } for (int i = 0; i < exclusionZones.Count; i++) { PAExclusionZone testedZone = exclusionZones[i]; bool zoneIsValid = checkBounds.Intersects(testedZone.bounds) && (1 << layer & testedZone.affectsLayers) != 0; if (zoneIsValid) { foundExclusionZones = true; for (int j = 0; j < zones.Length; j++) { if (zones[j] == null) { zones[j] = testedZone; break; } else { float sqrMagToThis = Vector3.SqrMagnitude(ClosestPointOnBounds(testedZone.bounds, position) - position); float sqrMagToCurrent = Vector3.SqrMagnitude(ClosestPointOnBounds(zones[j].bounds, position) - position); if ((testedZone.important && !zones[j].important) || //if this zone is more important (testedZone.important == zones[j].important && sqrMagToThis < sqrMagToCurrent)) //if both zones are equally important but this ones closer { for (int k = zones.Length - 1; k > j; k--) { zones[k] = zones[k - 1]; } zones[j] = testedZone; break; } } } } } return(foundExclusionZones); }
static void CreateExclusionZone() { Selection.activeGameObject = PAExclusionZone.Create("New PAExclusionZone").gameObject; }
void DrawBoxGizmo(PAExclusionZone zone) { Vector3 Pos = zone.transform.position; // Calculate the handle positions mHandlePositions [0] = zone.transform.TransformPoint(0.5f, 0, 0); mHandlePositions [1] = zone.transform.TransformPoint(-0.5f, 0, 0); mHandlePositions [2] = zone.transform.TransformPoint(0, 0.5f, 0); mHandlePositions [3] = zone.transform.TransformPoint(0, -0.5f, 0); mHandlePositions [4] = zone.transform.TransformPoint(0, 0, 0.5f); mHandlePositions [5] = zone.transform.TransformPoint(0, 0, -0.5f); PAParticleFieldInspector.DrawWireCube(Vector3.zero, Vector3.one, zone.transform, Color.white); Undo.RecordObject(zone.transform, "PAExclusionZone"); float handleSize = 0.025f; Vector3[] NewHandlePositions = new Vector3[6]; NewHandlePositions [0] = Handles.Slider(mHandlePositions [0], zone.transform.right, HandleUtility.GetHandleSize(mHandlePositions [0]) * handleSize, Handles.DotCap, 0.1f); NewHandlePositions [1] = Handles.Slider(mHandlePositions [1], -zone.transform.right, HandleUtility.GetHandleSize(mHandlePositions [1]) * handleSize, Handles.DotCap, 0.1f); NewHandlePositions [2] = Handles.Slider(mHandlePositions [2], zone.transform.up, HandleUtility.GetHandleSize(mHandlePositions [2]) * handleSize, Handles.DotCap, 0.1f); NewHandlePositions [3] = Handles.Slider(mHandlePositions [3], -zone.transform.up, HandleUtility.GetHandleSize(mHandlePositions [3]) * handleSize, Handles.DotCap, 0.1f); NewHandlePositions [4] = Handles.Slider(mHandlePositions [4], zone.transform.forward, HandleUtility.GetHandleSize(mHandlePositions [4]) * handleSize, Handles.DotCap, 0.1f); NewHandlePositions [5] = Handles.Slider(mHandlePositions [5], -zone.transform.forward, HandleUtility.GetHandleSize(mHandlePositions [5]) * handleSize, Handles.DotCap, 0.1f); Vector3 Change; Vector3 Scale = zone.transform.localScale; Change = NewHandlePositions [0] - mHandlePositions [0]; if (Change.sqrMagnitude != 0.0f) { zone.transform.position = Pos + Change * 0.5f; Scale.x = (zone.transform.position - NewHandlePositions [0]).magnitude * 2.0f; } Change = NewHandlePositions [1] - mHandlePositions [1]; if (Change.sqrMagnitude != 0.0f) { zone.transform.position = Pos + Change * 0.5f; Scale.x = (zone.transform.position - NewHandlePositions [1]).magnitude * 2.0f; } Change = NewHandlePositions [2] - mHandlePositions [2]; if (Change.sqrMagnitude != 0.0f) { zone.transform.position = Pos + Change * 0.5f; Scale.y = (zone.transform.position - NewHandlePositions [2]).magnitude * 2.0f; } Change = NewHandlePositions [3] - mHandlePositions [3]; if (Change.sqrMagnitude != 0.0f) { zone.transform.position = Pos + Change * 0.5f; Scale.y = (zone.transform.position - NewHandlePositions [3]).magnitude * 2.0f; } Change = NewHandlePositions [4] - mHandlePositions [4]; if (Change.sqrMagnitude != 0.0f) { zone.transform.position = Pos + Change * 0.5f; Scale.z = (zone.transform.position - NewHandlePositions [4]).magnitude * 2.0f; } Change = NewHandlePositions [5] - mHandlePositions [5]; if (Change.sqrMagnitude != 0.0f) { zone.transform.position = Pos + Change * 0.5f; Scale.z = (zone.transform.position - NewHandlePositions [5]).magnitude * 2.0f; } if (zone.transform.localScale != Scale) { zone.transform.localScale = Scale; } }