Beispiel #1
0
 public static void UnregisterZone(PAExclusionZone zone)
 {
     if (exclusionZones != null && exclusionZones.Contains(zone))
     {
         exclusionZones.Remove(zone);
     }
     exclusionZones.RemoveAll((obj) => obj == null);
 }
Beispiel #2
0
 public static void RegisterZone(PAExclusionZone zone)
 {
     if (exclusionZones == null)
     {
         exclusionZones = new List <PAExclusionZone>();
     }
     if (!exclusionZones.Contains(zone))
     {
         exclusionZones.Add(zone);
     }
 }
Beispiel #3
0
    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));
        }
    }
Beispiel #4
0
    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);
    }
Beispiel #5
0
 static void CreateExclusionZone()
 {
     Selection.activeGameObject = PAExclusionZone.Create("New PAExclusionZone").gameObject;
 }
Beispiel #6
0
    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;
        }
    }