public CachedSeeker( Seeker seeker ) { this.start = seeker.Start; this.end = seeker.End; this.solution = new ArrayList( seeker.Solution ); Restart( seeker.CacheLifespan ); }
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); }
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; }
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; }
public bool Match( Seeker seeker ) { return this.start == seeker.Start && this.end == seeker.End && seeker.ValidPath( Solution ); }
public void UncacheSeeker( Seeker seeker ) { cachedSeekers.Remove( seeker ); }
public void UseSeeker( Seeker seeker ) { idleSeekers.Remove( seeker ); activeSeekers.Remove( seeker ); if( !usedSeekers.Contains( seeker ) ) { usedSeekers.Add( seeker ); } }
public void SeekerKilled(Seeker seeker) { idleSeekers.Remove(seeker); activeSeekers.Remove(seeker); usedSeekers.Remove(seeker); }
public void SeekerStarted( Seeker seeker ) { idleSeekers.Remove( seeker ); if( !activeSeekers.Contains( seeker ) ) { activeSeekers.Add( seeker ); } }
public void RegisterSeeker( Seeker seeker ) { idleSeekers.Add( seeker ); seeker.CacheLifespan = seekerCacheLifespan; }
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; }
public void OnSearchFailed(Seeker seeker) { idleSeekers.Add(seeker); activeSeekers.Remove(seeker); }
public bool Match(Seeker seeker) { return(this.start == seeker.Start && this.end == seeker.End && seeker.ValidPath(Solution)); }
public void UncacheSeeker(Seeker seeker) { cachedSeekers.Remove(seeker); }
public void OnSearchCompleted( Seeker seeker ) { UseSeeker( seeker ); if( seeker.CacheLifespan != NoCache ) { cachedSeekers.Add( new CachedSeeker( seeker ) ); } }
public void SeekerKilled( Seeker seeker ) { idleSeekers.Remove( seeker ); activeSeekers.Remove( seeker ); usedSeekers.Remove( seeker ); }
public void OnSearchFailed( Seeker seeker ) { idleSeekers.Add( seeker ); activeSeekers.Remove( seeker ); }
public void RegisterSeeker(Seeker seeker) { idleSeekers.Add(seeker); seeker.CacheLifespan = seekerCacheLifespan; }