76 lines
1.4 KiB
C#
76 lines
1.4 KiB
C#
using Fusion;
|
|
using UnityEngine;
|
|
|
|
namespace TPSBR
|
|
{
|
|
public sealed class Smoke : NetworkBehaviour
|
|
{
|
|
// PRIVATE MEMBERS
|
|
|
|
[Networked]
|
|
private NetworkBool _finished { get; set; }
|
|
|
|
[SerializeField]
|
|
private float _radius;
|
|
[SerializeField]
|
|
private float _duration;
|
|
|
|
[SerializeField]
|
|
private float _despawnDelay;
|
|
[SerializeField]
|
|
private ParticleSystem _effect;
|
|
|
|
private TickTimer _timer;
|
|
|
|
// NetworkBehaviour INTERFACE
|
|
|
|
public override void CopyBackingFieldsToState(bool firstTime)
|
|
{
|
|
InvokeWeavedCode();
|
|
|
|
_effect.Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear);
|
|
}
|
|
|
|
public override void Spawned()
|
|
{
|
|
if (HasStateAuthority == true)
|
|
{
|
|
_timer = TickTimer.CreateFromSeconds(Runner, _duration);
|
|
_finished = false;
|
|
}
|
|
}
|
|
|
|
public override void FixedUpdateNetwork()
|
|
{
|
|
if (HasStateAuthority == false)
|
|
return;
|
|
|
|
if (_timer.Expired(Runner) == true)
|
|
{
|
|
if (_finished == false)
|
|
{
|
|
_finished = true;
|
|
_timer = TickTimer.CreateFromSeconds(Runner, _despawnDelay);
|
|
}
|
|
else
|
|
{
|
|
Runner.Despawn(Object);
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void Render()
|
|
{
|
|
if (_finished == false && _effect.isPlaying == false)
|
|
{
|
|
_effect.transform.localScale = Vector3.one * _radius * 2f;
|
|
_effect.Play(true);
|
|
}
|
|
else if (_finished == true && _effect.isPlaying == true)
|
|
{
|
|
_effect.Stop(true, ParticleSystemStopBehavior.StopEmitting);
|
|
}
|
|
}
|
|
}
|
|
}
|