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