Axiom.SceneManagers.PortalConnected.PCZIntersectionSceneQuery.Execute C# (CSharp) Метод

Execute() публичный Метод

public Execute ( IIntersectionSceneQueryListener listener ) : void
listener IIntersectionSceneQueryListener
Результат void
		public override void Execute( IIntersectionSceneQueryListener listener )
		{
			Dictionary<MovableObject, MovableObject> set = new Dictionary<MovableObject, MovableObject>();

			// Iterate over all movable types
			foreach ( Core.MovableObjectFactory factory in Root.Instance.MovableObjectFactories.Values )
			{
				MovableObjectCollection col = creator.GetMovableObjectCollection( factory.Type );
				foreach ( MovableObject e in col.Values )
				{
					PCZone zone = ( (PCZSceneNode)( e.ParentSceneNode ) ).HomeZone;
					List<PCZSceneNode> list = new List<PCZSceneNode>();
					//find the nodes that intersect the AAB
					( (PCZSceneManager)creator ).FindNodesIn( e.GetWorldBoundingBox(), ref list, zone, null );
					//grab all moveables from the node that intersect...
					foreach ( PCZSceneNode node in list )
					{
						foreach ( MovableObject m in node.Objects )
						{
							// MovableObject m =
							if ( m != e &&
								!set.ContainsKey( m ) &&
								!set.ContainsKey( e ) &&
								( m.QueryFlags & queryMask ) != 0 &&
								( m.TypeFlags & queryTypeMask ) != 0 &&
								m.IsAttached &&
								e.GetWorldBoundingBox().Intersects( m.GetWorldBoundingBox() ) )
							{
								listener.OnQueryResult( e, m );
								// deal with attached objects, since they are not directly attached to nodes
								if ( m.MovableType == "Entity" )
								{
									Entity e2 = (Entity)m;
									foreach ( MovableObject c in e2.SubEntities )
									{
										if ( ( c.QueryFlags & queryMask ) != 0 &&
											e.GetWorldBoundingBox().Intersects( c.GetWorldBoundingBox() ) )
										{
											listener.OnQueryResult( e, c );
										}
									}
								}
							}
							set.Add( e, m );

						}
					}

				}
			}
		}
	}
PCZIntersectionSceneQuery