void Occluding() { List <Destiny_OcclusionBox> activatedBox = new List <Destiny_OcclusionBox>(); foreach (OcclusionDat dat in m_AllOcclusionBounds) { if (!dat.bound.Contains(exampleChar.position) && !activatedBox.Find(x => x == dat.occlusionBox)) { dat.occlusionBox.OccludeObject(); } else if (!activatedBox.Find(x => x == dat.occlusionBox)) { dat.occlusionBox.DeoccludeObject(); activatedBox.Add(dat.occlusionBox); } foreach (Destiny_OcclusionBox box in dat.occlusionBox.linkedBox) { if (activatedBox.Find(x => x == box)) { continue; } OcclusionDat targetDat = m_AllOcclusionBounds.Find(x => x.occlusionBox == box); if (targetDat == null) { continue; } if (dat.bound.Contains(exampleChar.position)) { targetDat.occlusionBox.DeoccludeObject(); activatedBox.Add(targetDat.occlusionBox); } } } }
public void Get_AllOcclusionBounds() { m_AllOcclusionBounds.Clear(); Destiny_OcclusionBox[] occlusionBoxes = GetComponentsInChildren <Destiny_OcclusionBox>(); foreach (Destiny_OcclusionBox box in occlusionBoxes) { Bounds bound = new Bounds(box.transform.position, box.transform.localScale); OcclusionDat occlusionDat = new OcclusionDat(); occlusionDat.bound = bound; occlusionDat.occlusionBox = box; m_AllOcclusionBounds.Add(occlusionDat); } //Check all intersecting bounds foreach (OcclusionDat dat in m_AllOcclusionBounds) { dat.occlusionBox.linkedBox.Clear(); foreach (OcclusionDat dat1 in m_AllOcclusionBounds) { if (dat == dat1) { continue; } if (dat.bound.Intersects(dat1.bound)) { dat.occlusionBox.linkedBox.Add(dat1.occlusionBox); } } } }