using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using Mirror; public class PushBox : NetworkBehaviour { public int playersRequired; public Text numberTxt; public List DTP; public List Neighbours; public List targets; public List scannedList; void Start() { UpdateText(); } void OnCollisionEnter2D(Collision2D col) { NetPlayer player = col.collider.GetComponent(); if (player != null) { if (!DTP.Contains(player)) { DTP.Add(player); UpdateNeighbourCount(); } } } void OnCollisionExit2D(Collision2D col) { NetPlayer player = col.collider.GetComponent(); if (player != null) { if (DTP.Contains(player)) { DTP.Remove(player); UpdateNeighbourCount(); } } } public void UpdateNeighbourCount() { targets = new List(); Neighbours = new List(); scannedList= new List(); targets.AddRange(DTP); int failCount = 0; while(targets.Count > 0 && failCount < 50){ failCount++; Neighbours.Add(targets[0]); scannedList.Add(targets[0]); foreach(NetPlayer neighbour in targets[0].touchingNeighbours){ if(!scannedList.Contains(neighbour)){ targets.Add(neighbour); } } scannedList.Add(targets[0]); targets.RemoveAt(0); } if(failCount >= 50){ Debug.LogError("Fail switch triggered"); } GetComponent().simulated=((playersRequired - Neighbours.Count) > 0); UpdateText(); } void UpdateText() { numberTxt.text = (playersRequired - Neighbours.Count).ToString(); } }