示例#1
0
        private static bool TestFor_AABB(TrackedObjectData item, Vector2 min, Vector2 max)
        {
            var itemMin = item.AABB.Min;
            var itemMax = item.AABB.Max;

            return(Geometry2D.IsOverlapping(itemMin, itemMax, min, max));
        }
示例#2
0
        private bool Test_ByCircle(TrackedObjectData item, Vector2 center, float sqrRadius, Vector2 aabbMin,
                                   Vector2 aabbMax, int layerMask, bool checkForLayers)
        {
            if (checkForLayers)
            {
                //--- Step 1: Run the LayerMask test. ---
                if (!TestFor_Layer(item, layerMask))
                {
                    return(false);
                }
            }

            //--- Step 2: Run the AABB test. ---
            if (!TestFor_AABB(item, aabbMin, aabbMax))
            {
                return(false);
            }

            //--- Step 3: Run the Distance test. ---
            if (!TestFor_Distance(item, center, sqrRadius))
            {
                return(false);
            }

            //--- Finally: Return true (passed all tests). ---
            return(true);
        }
示例#3
0
        private bool Test_ByPoint(TrackedObjectData item, Vector2 point, int layerMask, bool checkForLayers)
        {
            if (checkForLayers)
            {
                //--- Step 1: Run the LayerMask test. ---
                if (!TestFor_Layer(item, layerMask))
                {
                    return(false);
                }
            }

            //--- Step 2: Run the AABB test. ---
            if (!TestFor_AABB(item, point, point))
            {
                return(false);
            }

            //--- Step 3: Run the PIP test. ---
            if (!TestFor_PIP(item, point))
            {
                return(false);
            }

            //--- Finally: Return true (passed all tests). ---
            return(true);
        }
        public static void Remove(TrackedObjectData data)
        {
            var gameObject = DataObjectDictionary[data];

            AllTrackedObjects.Remove(data);
            ObjectDataDictionary.Remove(gameObject);
            DataObjectDictionary.Remove(data);
        }
        public void RegisterObject(GameObject toRegister, GameObject prefab)
        {
            var renderer = toRegister.GetComponent<SpriteRenderer>();
            if (renderer)
            {
                IList<Vector2> localConvexHull = ConvexHullDatabase.Instance.GetLocalConvexHull(prefab);

                var newData = new TrackedObjectData(toRegister, renderer, localConvexHull);
                ObjectTrackerDatabase.Add(toRegister, newData);
            }
        }
示例#6
0
        private bool Test_ByBox(TrackedObjectData item, Vector2 min, Vector2 max, int layerMask, bool checkForLayers)
        {
            if (checkForLayers)
            {
                //--- Step 1: Run the LayerMask test. ---
                if (!TestFor_Layer(item, layerMask))
                {
                    return(false);
                }
            }

            //--- Step 2: Run the AABB test. ---
            if (!TestFor_AABB(item, min, max))
            {
                return(false);
            }

            //--- Finally: Return true (passed all tests). ---
            return(true);
        }
示例#7
0
 private static GameObject GetGameObjectOrNull(TrackedObjectData data)
 {
     return(data != null ? data.GameObject : null);
 }
示例#8
0
        private static bool TestFor_Distance(TrackedObjectData item, Vector2 center, float sqrRadius)
        {
            var testCenter = item.AABB.Center;

            return(testCenter.TestDistanceLowerThan(center, sqrRadius, false));
        }
示例#9
0
        private static bool TestFor_PIP(TrackedObjectData item, Vector2 point)
        {
            IList <Vector2> hullPoints = item.WorldConvexHull;

            return(point.IsInPoly(hullPoints));
        }
示例#10
0
        private static bool TestFor_Layer(TrackedObjectData item, int layerMask)
        {
            var layerToTest = item.GameObject.layer;

            return(layerMask.MaskIncludes(layerToTest));
        }
 public static void Add(GameObject gameObject, TrackedObjectData data)
 {
     AllTrackedObjects.Add(data);
     ObjectDataDictionary.Add(gameObject, data);
     DataObjectDictionary.Add(data, gameObject);
 }