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)); }
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); }
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); } }
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); }
private static GameObject GetGameObjectOrNull(TrackedObjectData data) { return(data != null ? data.GameObject : null); }
private static bool TestFor_Distance(TrackedObjectData item, Vector2 center, float sqrRadius) { var testCenter = item.AABB.Center; return(testCenter.TestDistanceLowerThan(center, sqrRadius, false)); }
private static bool TestFor_PIP(TrackedObjectData item, Vector2 point) { IList <Vector2> hullPoints = item.WorldConvexHull; return(point.IsInPoly(hullPoints)); }
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); }