public void UpdatePortal(AkEnvironmentPortal in_portal) { var envList = new System.Collections.Generic.List <AkEnvironment> [2]; for (var i = 0; i < 2; i++) { if (!IntersectingEnvironments[i].TryGetValue(in_portal.GetInstanceID(), out envList[i])) { envList[i] = new System.Collections.Generic.List <AkEnvironment>(); IntersectingEnvironments[i][in_portal.GetInstanceID()] = envList[i]; } else { envList[i].Clear(); } } //We check if a portal intersects any environment //Iterate in reverse order for safe removal form list while iterating for (var i = EnvironmentList.Count - 1; i >= 0; i--) { if (EnvironmentList[i] != null) { //if there is an intersection if (in_portal.GetComponent <UnityEngine.Collider>().bounds .Intersects(EnvironmentList[i].GetComponent <UnityEngine.Collider>().bounds)) { if (UnityEngine.Vector3.Dot(in_portal.transform.rotation * in_portal.axis, EnvironmentList[i].transform.position - in_portal.transform.position) >= 0) { envList[1].Add(EnvironmentList[i]); } else { envList[0].Add(EnvironmentList[i]); } } } else { EnvironmentList.RemoveAt(i); } } }
public void UpdatePortal(AkEnvironmentPortal in_portal) { List <AkEnvironment>[] envList = new List <AkEnvironment> [2]; for (int i = 0; i < 2; i++) { if (!IntersectingEnvironments[i].TryGetValue(in_portal.GetInstanceID(), out envList[i])) { envList[i] = new List <AkEnvironment>(); IntersectingEnvironments[i][in_portal.GetInstanceID()] = envList[i]; } else { envList[i].Clear(); } } //We check if a portal intersects any environment for (int i = EnvironmentList.Count - 1; i >= 0; i--) //Iterate in reverse order for safe removal form list while iterating { if (EnvironmentList[i] != null) { //if there is an intersection if (in_portal.GetComponent <Collider>().bounds.Intersects(EnvironmentList[i].GetComponent <Collider>().bounds)) { //We check if the environment is on the left(negatif side of chosen axis) or right side of the portal if (Vector3.Dot(in_portal.transform.rotation * in_portal.axis, EnvironmentList[i].transform.position - in_portal.transform.position) >= 0) { envList[1].Add(EnvironmentList[i]); } else { envList[0].Add(EnvironmentList[i]); } } } else { EnvironmentList.RemoveAt(i); } } }
public void UpdatePortal(AkEnvironmentPortal in_portal) { List<AkEnvironment>[] envList = new List<AkEnvironment>[2]; for(int i = 0; i < 2; i++) { if(!IntersectingEnvironments[i].TryGetValue(in_portal.GetInstanceID(), out envList[i])) { envList[i] = new List<AkEnvironment>(); IntersectingEnvironments[i][in_portal.GetInstanceID()] = envList[i]; } else { envList[i].Clear(); } } //We check if a portal intersects any environment for(int i = EnvironmentList.Count - 1; i >= 0 ; i--)//Iterate in reverse order for safe removal form list while iterating { if(EnvironmentList[i] != null) { //if there is an intersection if(in_portal.GetComponent<Collider>().bounds.Intersects(EnvironmentList[i].GetComponent<Collider>().bounds)) { //We check if the environment is on the left(negatif side of chosen axis) or right side of the portal if(Vector3.Dot(in_portal.transform.rotation * in_portal.axis, EnvironmentList[i].transform.position - in_portal.transform.position) >= 0) { envList[1].Add(EnvironmentList[i]); } else { envList[0].Add(EnvironmentList[i]); } } } else { EnvironmentList.RemoveAt(i); } } }