namespace Fusion.Addons.InterestManagement { using System.Collections.Generic; using UnityEngine; public interface IInterestProvider { /// /// Reference to Transform component. /// Transform Transform { get; } /// /// Version used for tracking object state and releasing references. /// int Version { get; } /// /// Defines order in which interest providers are processed. Provider with lower value will be processed first. /// int SortOrder { get; } /// /// Defines processing behavior of interest provider. /// /// Default - Interest from this provider is processed additively to existing interest. /// Override - Interest from this provider overrides all existing interest. /// /// EInterestMode InterestMode { get; } /// /// Mark all active registrations (including global) of this provider as invalid. /// Use this method to prevent further processing of this provider. /// Called automatically on despawn. /// void Release(); /// /// Register other interest provider to self, allowing to create hierarchy of interest providers. /// Registered providers are processed only if the player is interested in this provider. /// /// Reference to interest provider. /// How long the interest provider stays registered. bool RegisterProvider(IInterestProvider interestProvider, float duration = 0.0f); /// /// Unregister other interest provider from self. /// /// Reference to interest provider. /// If true, the interest provider is unregistered recursively from all registered interest providers. bool UnregisterProvider(IInterestProvider interestProvider, bool recursive); /// /// Add all valid registered interest providers to the set of unique providers. /// /// Set of interest providers that will be filled. /// If true, registered interest providers are processed recursively. void GetProviders(InterestProviderSet interestProviders, bool recursive); /// /// Returns whether this provider should be processed for given player. /// /// Player interest view with player information used for filtering. bool IsPlayerInterested(PlayerInterestView playerView); /// /// Add interest providers that are relevant to the player. /// /// Player interest view used for filtering. /// Interest providers set that will be filled. /// Indicates whether registered interest providers should be iterated recursively. void GetProvidersForPlayer(PlayerInterestView playerView, InterestProviderSet interestProviders, bool recursive); /// /// Add interest cells that are relevant to the player. /// This method typically converts custom list of InterestShape objects to cells, using InterestShape.GetCells(). /// /// Player interest view used for filtering. /// Interest cells that will be set. void GetCellsForPlayer(PlayerInterestView playerView, HashSet cells); /// /// Called when an object with PlayerInterestManager component is selected. /// /// Provides player information when PlayerInterestManager component is selected. void DrawGizmosForPlayer(PlayerInterestView playerView); } }