huge change, new desig wip
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
[RequireComponent(typeof(AudioSource))]
|
||||
public class PanelHiderButton : MonoBehaviour
|
||||
{
|
||||
private int colliderCount = 0;
|
||||
private bool isLocked = false;
|
||||
private float timer = 0f;
|
||||
private bool actionTaken = false;
|
||||
private Renderer r;
|
||||
|
||||
[Header("Settings")]
|
||||
[SerializeField]
|
||||
private float holdTime = 1f;
|
||||
|
||||
[Header("Components")]
|
||||
[SerializeField]
|
||||
private RawImage statusImg;
|
||||
[SerializeField]
|
||||
private Image timerRing;
|
||||
[SerializeField]
|
||||
private List<GameObject> panelButtons;
|
||||
|
||||
[Header("Assets")]
|
||||
[SerializeField]
|
||||
private Texture lockImg;
|
||||
[SerializeField]
|
||||
private Texture unlockImg;
|
||||
[SerializeField]
|
||||
private AudioClip lockSound;
|
||||
[SerializeField]
|
||||
private AudioClip unlockSound;
|
||||
|
||||
private AudioSource audioSrc;
|
||||
private void Start()
|
||||
{
|
||||
audioSrc = GetComponent<AudioSource>();
|
||||
r = GetComponent<Renderer>();
|
||||
statusImg.texture = isLocked ? lockImg : unlockImg;
|
||||
audioSrc.clip = lockSound;
|
||||
}
|
||||
|
||||
private void OnTriggerEnter(Collider _)
|
||||
{
|
||||
r.material.color = Color.white;
|
||||
++colliderCount;
|
||||
}
|
||||
|
||||
private void OnTriggerExit(Collider _)
|
||||
{
|
||||
r.material.color = Color.gray;
|
||||
colliderCount = Mathf.Clamp(colliderCount - 1, 0, colliderCount);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (colliderCount >= 1)
|
||||
{
|
||||
timer += Time.unscaledDeltaTime;
|
||||
float ratio = Mathf.Clamp(timer, 0, holdTime) / holdTime;
|
||||
|
||||
timerRing.fillAmount = Mathf.Pow(ratio, 3f);
|
||||
|
||||
if (ratio >= 1 && !actionTaken)
|
||||
{
|
||||
isLocked = !isLocked;
|
||||
|
||||
foreach (var btn in panelButtons)
|
||||
{
|
||||
btn.SetActive(!isLocked);
|
||||
}
|
||||
actionTaken = true;
|
||||
|
||||
timerRing.color = Color.cyan;
|
||||
statusImg.texture = isLocked ? lockImg : unlockImg;
|
||||
|
||||
audioSrc.clip = isLocked ? lockSound : unlockSound;
|
||||
audioSrc.Play();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
timer = 0;
|
||||
timerRing.fillAmount = 0;
|
||||
timerRing.color = Color.white;
|
||||
actionTaken = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user