/// <summary> /// Changes layers of a given intersector /// </summary> /// <param name="intersector"></param> /// <param name="layers"></param> public void ChangeLayers( IRay3Intersector intersector, ulong layers ) { int index = Find( intersector ); if ( index != -1 ) { ( ( IRayLayerIntersector )m_Intersectors[ index ] ).Layers = layers; } }
/// <summary> /// Adds an object that can be intersected to the raycaster /// </summary> /// <param name="intersector">Intersectable object</param> public IRayLayerIntersector AddIntersector( IRay3Intersector intersector ) { if ( intersector is IRayLayerIntersector ) { m_Intersectors.Add( intersector ); return ( IRayLayerIntersector )intersector; } return AddIntersector( ulong.MaxValue, intersector ); }
/// <summary> /// Initialises this ray intersector /// </summary> /// <param name="intersector">Base intersector</param> /// <param name="layers">Initial layers</param> public Ray3LayerIntersector( IRay3Intersector intersector, ulong layers ) { if ( intersector == null ) { throw new ArgumentNullException( "intersector", "Base intersector cannot be null" ); } m_Intersector = intersector; m_Layers = layers; }
/// <summary> /// Adds an intersectable geometry object to the ray caster /// </summary> public IRayLayerIntersector AddIntersector( ulong layers, IRay3Intersector intersector ) { if ( intersector is IRayLayerIntersector ) { throw new ArgumentException( "Intersector already supports layers", "intersector" ); } Ray3LayerIntersector layerIntersector = new Ray3LayerIntersector( intersector, layers ); m_Intersectors.Add( layerIntersector ); return layerIntersector; }
/// <summary> /// Finds the index of a given intersector object /// </summary> /// <param name="intersector">Intersector to find</param> /// <returns>Returns the index of the intersector, or -1 if it can't be found</returns> private int Find( IRay3Intersector intersector ) { for ( int index = 0; index < m_Intersectors.Count; ++index ) { if ( m_Intersectors[ index ] == intersector ) { return index; } Ray3LayerIntersector layerIntersector = m_Intersectors[ index ] as Ray3LayerIntersector; if ( layerIntersector != null && layerIntersector.BaseIntersector == intersector ) { return index; } } return -1; }
/// <summary> /// Removes an intersector /// </summary> /// <param name="intersector">Intersector to remove</param> public void RemoveIntersector( IRay3Intersector intersector ) { int index = Find( intersector ); if ( index != -1 ) { m_Intersectors.RemoveAt( index ); } }