using FishNet.Connection; using FishNet.Object; using UnityEngine; namespace FishNet.Component.Ownership { /// <summary> /// Adding this component allows any client to use predictive spawning on this prefab. /// </summary> public class PredictedSpawn : NetworkBehaviour { #region Serialized. /// <summary> /// True to allow clients to predicted spawn this object. /// </summary> public bool GetAllowSpawning() => _allowSpawning; /// <summary> /// Sets to allow predicted spawning. This must be set on client and server. /// </summary> /// <param name="value">New value.</param> public void SetAllowSpawning(bool value) => _allowSpawning = value; [Tooltip("True to allow clients to predicted spawn this object.")] [SerializeField] private bool _allowSpawning = true; /// <summary> /// True to allow clients to predicted despawn this object. /// </summary> public bool GetAllowDespawning() => _allowDespawning; /// <summary> /// Sets to allow predicted despawning. This must be set on client and server. /// </summary> /// <param name="value">New value.</param> public void SetAllowDespawning(bool value) => _allowDespawning = value; [Tooltip("True to allow clients to predicted despawn this object.")] [SerializeField] private bool _allowDespawning = true; /// <summary> /// /// </summary> [Tooltip("True to allow clients to predicted set syncTypes prior to spawning the item. Set values will be applied on the server and sent to other clients.")] [SerializeField] private bool _allowSyncTypes = true; /// <summary> /// True to allow clients to predicted set syncTypes prior to spawning the item. Set values will be applied on the server and sent to other clients. /// </summary> public bool GetAllowSyncTypes() => _allowSyncTypes; /// <summary> /// Sets to allow syncTypes. This must be set on client and server. /// </summary> /// <param name="value">New value.</param> public void SetAllowSyncTypes(bool value) => _allowSyncTypes = value; #endregion /// <summary> /// Called on the client when trying to predicted spawn this object. /// </summary> /// <param name="owner">Owner specified to spawn with.</param> /// <returns>True if able to spawn.</returns> public virtual bool OnTrySpawnClient(NetworkConnection owner = null) { return GetAllowSpawning(); } /// <summary> /// Called on the server when a client tries to predicted spawn this object. /// </summary> /// <param name="spawner">Connection trying to predicted spawn this object.</param> /// <param name="owner">Owner specified to spawn with.</param> /// <returns>True if able to spawn.</returns> public virtual bool OnTrySpawnServer(NetworkConnection spawner, NetworkConnection owner = null) { return GetAllowSpawning(); } /// <summary> /// Called on the client when trying to predicted spawn this object. /// </summary> /// <returns>True if able to despawn.</returns> public virtual bool OnTryDespawnClient() { return GetAllowDespawning(); } /// <summary> /// Called on the server when a client tries to predicted despawn this object. /// </summary> /// <param name="despawner">Connection trying to predicted despawn this object.</param> /// <returns>True if able to despawn.</returns> public virtual bool OnTryDepawnServer(NetworkConnection despawner) { return GetAllowDespawning(); } } }