Added many other
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user