Files
FORT-BO/Assets/CONTENT/Game/Scripts/Items/NetworkTestCubeItem.cs
T
2026-08-06 18:56:32 +03:00

83 lines
2.1 KiB
C#

using DG.Tweening;
using Unity.Netcode;
using UnityEngine;
public sealed class NetworkTestCubeItem : NetworkHandItemInteractable
{
[Header("Use feedback")]
[SerializeField] private Transform visual;
[SerializeField, Min(0.01f)] private float punchDuration = 0.25f;
[SerializeField, Min(0f)] private float punchStrength = 0.2f;
private readonly NetworkVariable<uint> useSequence = new(
0,
NetworkVariableReadPermission.Everyone,
NetworkVariableWritePermission.Server);
private Vector3 restingVisualScale;
private Tween useTween;
protected override void Awake()
{
base.Awake();
if (visual == null)
{
Renderer itemRenderer = GetComponentInChildren<Renderer>(true);
visual = itemRenderer != null ? itemRenderer.transform : transform;
}
restingVisualScale = visual.localScale;
}
public override void OnNetworkSpawn()
{
base.OnNetworkSpawn();
useSequence.OnValueChanged += HandleUseSequenceChanged;
}
public override void OnNetworkDespawn()
{
useSequence.OnValueChanged -= HandleUseSequenceChanged;
useTween?.Kill();
base.OnNetworkDespawn();
}
protected override void UseOnServer(NetworkObject playerObject)
{
useSequence.Value++;
}
[ContextMenu("Preview/Use")]
private void PreviewUse()
{
if (Application.isPlaying)
PlayUseFeedback();
else if (visual != null)
visual.localScale = restingVisualScale * (1f + punchStrength);
}
[ContextMenu("Preview/Reset")]
private void PreviewReset()
{
useTween?.Kill();
if (visual != null)
visual.localScale = restingVisualScale;
}
private void HandleUseSequenceChanged(uint _, uint currentValue) =>
PlayUseFeedback();
private void PlayUseFeedback()
{
if (visual == null)
return;
useTween?.Kill();
visual.localScale = restingVisualScale;
useTween = visual
.DOPunchScale(Vector3.one * punchStrength, punchDuration, 6, 0.5f)
.SetLink(gameObject);
}
}