Example #1
0
    public GameObject Create(string path)
    {
        var key = CRC32.GetHashForAnsi(path);

        if (objectPool.ContainsKey(key) == false)
        {
            objectPool.Add(key, new Queue <GameObject>());
        }

        GameObject obj = null;

        if (0 < objectPool[key].Count)
        {
            obj = objectPool[key].Dequeue();
        }

        if (obj == null)
        {
            obj = CreateObject(path);

            CustomGameObject customObject = obj.GetComponent <CustomGameObject>();

            if (customObject == null)
            {
                customObject = obj.AddComponent <CustomGameObject>();
            }

            customObject.hashKey = key;
        }

        obj.SetActive(true);

        return(obj);
    }
Example #2
0
    public void DestroyImmediate(GameObject obj)
    {
        if (null == obj)
        {
            return;
        }

        CustomGameObject customObject = obj.GetComponent <CustomGameObject>();

        if (customObject == null)
        {
            GameObject.Destroy(obj);
            return;
        }

        if (objectPool.ContainsKey(customObject.hashKey) == false)
        {
            GameObject.Destroy(obj);
            return;
        }

        obj.SetActive(false);

        objectPool[customObject.hashKey].Enqueue(obj);
    }
Example #3
0
    private List <CustomGameObject> CheckForAdjacentObjects(GameObject obj, List <CustomGameObject> matchingObjectsList)
    {
        var go = new CustomGameObject
        {
            GameObject = obj,
            IsChecked  = true
        };

        go.GameObject.GetComponent <Collider2D>().enabled = false;

        RaycastHit2D downHit = Physics2D.Raycast(obj.transform.position, -Vector2.up);

        RaycastHit2D upHit = Physics2D.Raycast(obj.transform.position, Vector2.up);

        RaycastHit2D rightHit = Physics2D.Raycast(obj.transform.position, Vector2.right);

        RaycastHit2D leftHit = Physics2D.Raycast(obj.transform.position, -Vector2.right);

        obj.GetComponent <Collider2D>().enabled = true;

        if (!matchingObjectsList.Contains(go))
        {
            matchingObjectsList.Add(go);
        }

        if (downHit.collider != null && obj.tag == downHit.collider.tag && downHit.collider.gameObject != obj && !matchingObjectsList.Any(x => x.GameObject == downHit.collider.gameObject))
        {
            matchingObjectsList.Add(new CustomGameObject {
                GameObject = downHit.collider.gameObject, IsChecked = false
            });
        }
        if (upHit.collider != null && obj.tag == upHit.collider.tag && upHit.collider.gameObject != obj && !matchingObjectsList.Any(x => x.GameObject == upHit.collider.gameObject))
        {
            matchingObjectsList.Add(new CustomGameObject {
                GameObject = upHit.collider.gameObject, IsChecked = false
            });
        }
        if (rightHit.collider != null && obj.tag == rightHit.collider.tag && rightHit.collider.gameObject != obj && !matchingObjectsList.Any(x => x.GameObject == rightHit.collider.gameObject))
        {
            matchingObjectsList.Add(new CustomGameObject {
                GameObject = rightHit.collider.gameObject, IsChecked = false
            });
        }
        if (leftHit.collider != null && obj.tag == leftHit.collider.tag && leftHit.collider.gameObject != obj && !matchingObjectsList.Any(x => x.GameObject == leftHit.collider.gameObject))
        {
            matchingObjectsList.Add(new CustomGameObject {
                GameObject = leftHit.collider.gameObject, IsChecked = false
            });
        }

        foreach (var item in matchingObjectsList.Where(x => !x.IsChecked).ToList())
        {
            matchingObjectsList.Remove(item);
            CheckForAdjacentObjects(item.GameObject, matchingObjectsList);
        }

        return(matchingObjectsList.ToList());
    }