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()); }
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); }
public void RemoveCell(TNTCellObject cellObject) { cells.Remove(cellObject); Destroy(cellObject.gameObject); if (cells.Count == 0) { TNTGameMain.instance.RemoveBlock(this); } }