Пример #1
0
    private List <TNTCellObject> Bfs(TNTCellObject cellObject)
    {
        var visited = new HashSet <TNTCellObject> {
            cellObject
        };

        var queue     = new Queue <TNTCellObject>(GetContacts(cellObject).Where(c => c.cell.type == cellObject.cell.type));
        var connected = new List <TNTCellObject> {
            cellObject
        };

        while (queue.Count != 0)
        {
            var next = queue.Dequeue();

            connected.Add(next);
            visited.Add(next);

            foreach (var tntCellObject in GetContacts(next))
            {
                if (tntCellObject.cell.type == cellObject.cell.type && !visited.Contains(tntCellObject))
                {
                    queue.Enqueue(tntCellObject);
                }
            }
        }

        return(connected.Distinct().ToList());
    }
Пример #2
0
    private List <TNTCellObject> GetContacts(TNTCellObject cellObject)
    {
        var collider2d = cellObject.transform.GetComponent <Collider2D>();

        var contactPoints = new ContactPoint2D[10];
        var contactCount  = collider2d.GetContacts(contactPoints);
        var contacts      = new List <TNTCellObject>();

        foreach (Transform tf in cellObject.transform.parent)
        {
            var distance = Vector3.Distance(tf.position, cellObject.transform.position);
            if (Mathf.Abs(distance - 32) < 1.0f && tf.GetComponent <TNTCellObject>() != null)
            {
                contacts.Add(tf.GetComponent <TNTCellObject>());
            }
        }

        for (var i = 0; i < contactCount; i++)
        {
            var self  = contactPoints[i].collider.GetComponent <TNTCellObject>();
            var other = contactPoints[i].otherCollider.GetComponent <TNTCellObject>();

            if (other != cellObject)
            {
                Debug.Log("?");
            }

            if (self != null)
            {
                contacts.Add(self);
            }
        }

        return(contacts);
    }
Пример #3
0
    public void RemoveCell(TNTCellObject cellObject)
    {
        cells.Remove(cellObject);
        Destroy(cellObject.gameObject);

        if (cells.Count == 0)
        {
            TNTGameMain.instance.RemoveBlock(this);
        }
    }