Exemplo n.º 1
0
    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);
            }
        }
    }
Exemplo n.º 2
0
    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);
			}
		}
	}