コード例 #1
0
ファイル: Control.cs プロジェクト: imclab/Path-GPL
			public CachedSeeker( Seeker seeker )
			{
				this.start = seeker.Start;
				this.end = seeker.End;
				this.solution = new ArrayList( seeker.Solution );
				
				Restart( seeker.CacheLifespan );
			}
コード例 #2
0
ファイル: Control.cs プロジェクト: hardikbhalodi/Path-GPL
        public NetworkNodeAsset NearestNode(Vector3 position, Seeker seeker)
        {
            NetworkNodeAsset nearest;
            Bounds           networkBounds;

            nearest = null;
            foreach (NetworkAsset network in networks)
            {
                if (network is GridNetworkAsset || !network.Enabled || (seeker.ValidateNetworks && !seeker.Valid(network)))
                // Reject disabled networks and invalid ones if we're checking for that
                {
                    continue;
                }

                networkBounds = new Bounds(network.Position + Owner.transform.position, network.Size);
                if (!networkBounds.Contains(position))
                // Reject networks whose bounds do not contain the point
                {
                    continue;
                }

                foreach (NetworkNodeAsset node in network.Nodes)
                // Find the nearest node in this network
                {
                    if (!node.Enabled || !seeker.Valid(node))
                    {
                        continue;
                    }

                    if (nearest == null || (WorldPosition(nearest) - position).sqrMagnitude > (WorldPosition(node) - position).sqrMagnitude)
                    {
                        nearest = node;
                    }
                }
            }

            return(nearest);
        }
コード例 #3
0
ファイル: Control.cs プロジェクト: imclab/Path-GPL
		public bool StartSeeker( Seeker seeker )
		{
			if( monoBehaviour == null )
			{
				Debug.LogError( "Control failed to add seeker: Not initialized." );
				return false;
			}
			
			monoBehaviour.StartCoroutine( seeker.Seek() );
			
			return true;
		}
コード例 #4
0
ファイル: Control.cs プロジェクト: imclab/Path-GPL
		public NetworkNodeAsset NearestNode( Vector3 position, Seeker seeker )
		{
			NetworkNodeAsset nearest;
			Bounds networkBounds;
			
			nearest = null;
			foreach( NetworkAsset network in networks )
			{
				if( network is GridNetworkAsset || !network.Enabled || ( seeker.ValidateNetworks && !seeker.Valid( network ) ) )
				// Reject disabled networks and invalid ones if we're checking for that
				{
					continue;
				}
				
				networkBounds = new Bounds( network.Position + Owner.transform.position, network.Size );
				if( !networkBounds.Contains( position ) )
				// Reject networks whose bounds do not contain the point
				{
					continue;
				}
				
				foreach( NetworkNodeAsset node in network.Nodes )
				// Find the nearest node in this network
				{
					if( !node.Enabled || !seeker.Valid( node ) )
					{
						continue;
					}
					
					if( nearest == null || ( WorldPosition( nearest ) - position ).sqrMagnitude > ( WorldPosition( node ) - position ).sqrMagnitude )
					{
						nearest = node;
					}
				}
			}
			
			return nearest;
		}
コード例 #5
0
ファイル: Control.cs プロジェクト: imclab/Path-GPL
			public bool Match( Seeker seeker )
			{
				return this.start == seeker.Start && this.end == seeker.End && seeker.ValidPath( Solution );
			}
コード例 #6
0
ファイル: Control.cs プロジェクト: imclab/Path-GPL
		public void UncacheSeeker( Seeker seeker )
		{
			cachedSeekers.Remove( seeker );
		}
コード例 #7
0
ファイル: Control.cs プロジェクト: imclab/Path-GPL
		public void UseSeeker( Seeker seeker )
		{
			idleSeekers.Remove( seeker );
			activeSeekers.Remove( seeker );
			if( !usedSeekers.Contains( seeker ) )
			{
				usedSeekers.Add( seeker );
			}
		}
コード例 #8
0
ファイル: Control.cs プロジェクト: hardikbhalodi/Path-GPL
 public void SeekerKilled(Seeker seeker)
 {
     idleSeekers.Remove(seeker);
     activeSeekers.Remove(seeker);
     usedSeekers.Remove(seeker);
 }
コード例 #9
0
ファイル: Control.cs プロジェクト: imclab/Path-GPL
		public void SeekerStarted( Seeker seeker )
		{
			idleSeekers.Remove( seeker );
			if( !activeSeekers.Contains( seeker ) )
			{
				activeSeekers.Add( seeker );
			}
		}
コード例 #10
0
ファイル: Control.cs プロジェクト: imclab/Path-GPL
		public void RegisterSeeker( Seeker seeker )
		{
			idleSeekers.Add( seeker );
			seeker.CacheLifespan = seekerCacheLifespan;
		}
コード例 #11
0
ファイル: Control.cs プロジェクト: imclab/Path-GPL
		public ArrayList GetCache( Seeker seeker )
		{
			foreach( CachedSeeker cache in cachedSeekers )
			{
				if( cache.Match( seeker ) )
				{
					if( seeker.CacheLifespan != NoCache )
					{
						cache.Restart( seeker.CacheLifespan );
					}
					
					return cache.Solution;
				}
			}
			
			return null;
		}
コード例 #12
0
ファイル: Control.cs プロジェクト: hardikbhalodi/Path-GPL
 public void OnSearchFailed(Seeker seeker)
 {
     idleSeekers.Add(seeker);
     activeSeekers.Remove(seeker);
 }
コード例 #13
0
ファイル: Control.cs プロジェクト: hardikbhalodi/Path-GPL
 public bool Match(Seeker seeker)
 {
     return(this.start == seeker.Start && this.end == seeker.End && seeker.ValidPath(Solution));
 }
コード例 #14
0
ファイル: Control.cs プロジェクト: hardikbhalodi/Path-GPL
 public void UncacheSeeker(Seeker seeker)
 {
     cachedSeekers.Remove(seeker);
 }
コード例 #15
0
ファイル: Control.cs プロジェクト: imclab/Path-GPL
		public void OnSearchCompleted( Seeker seeker )
		{
			UseSeeker( seeker );
			if( seeker.CacheLifespan != NoCache )
			{
				cachedSeekers.Add( new CachedSeeker( seeker ) );
			}
		}
コード例 #16
0
ファイル: Control.cs プロジェクト: imclab/Path-GPL
		public void SeekerKilled( Seeker seeker )
		{
			idleSeekers.Remove( seeker );
			activeSeekers.Remove( seeker );
			usedSeekers.Remove( seeker );
		}
コード例 #17
0
ファイル: Control.cs プロジェクト: imclab/Path-GPL
		public void OnSearchFailed( Seeker seeker )
		{
			idleSeekers.Add( seeker );
			activeSeekers.Remove( seeker );
		}
コード例 #18
0
ファイル: Control.cs プロジェクト: hardikbhalodi/Path-GPL
 public void RegisterSeeker(Seeker seeker)
 {
     idleSeekers.Add(seeker);
     seeker.CacheLifespan = seekerCacheLifespan;
 }