83 lines
2.7 KiB
C#
83 lines
2.7 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
/*
|
|
* <summary>A replacement for the Item class in VR contexts.</summary>
|
|
*/
|
|
[RequireComponent(typeof(Burnable))]
|
|
public class ItemVR : MonoBehaviour {
|
|
public BurnQuality IgnitedQuality;
|
|
public float IgniteDuration;
|
|
public bool Ignited = false;
|
|
public float TorchDuration;
|
|
public float TorchWarnDuration;
|
|
|
|
[Header("Burning indicators")]
|
|
public GameObject StickObject;
|
|
public GameObject TorchObject;
|
|
public ParticleSystem FireParticles;
|
|
public Light TorchLight;
|
|
public Color WarnColor;
|
|
public GameObject FireVolume;
|
|
|
|
[Header("Runtime values")]
|
|
public float TorchFuel;
|
|
|
|
private Burnable Burnable;
|
|
private int BurningSourceCount = 0;
|
|
private float IgnitionStartTime = -1;
|
|
private Color NormalColor;
|
|
|
|
private void Start() {
|
|
Burnable = GetComponent<Burnable>();
|
|
NormalColor = TorchLight.color;
|
|
TorchObject.SetActive(Ignited);
|
|
StickObject.SetActive(!Ignited);
|
|
}
|
|
|
|
private void Update() {
|
|
if (Ignited && TorchLight.enabled) {
|
|
TorchFuel -= Time.deltaTime;
|
|
if (TorchFuel < TorchWarnDuration) {
|
|
TorchLight.color = Color.Lerp(TorchLight.color, WarnColor, 5f * Time.deltaTime);
|
|
} else {
|
|
TorchLight.color = Color.Lerp(TorchLight.color, NormalColor, 5f * Time.deltaTime);
|
|
}
|
|
if (TorchFuel <= 0) {
|
|
FireParticles.Stop();
|
|
FireVolume.layer = gameObject.layer;
|
|
TorchLight.range = Mathf.Lerp(TorchLight.range, 0, 10f * Time.deltaTime);
|
|
if (TorchLight.range < 0.01f) {
|
|
TorchLight.enabled = false;
|
|
}
|
|
}
|
|
} else if (!Ignited && IgnitionStartTime != -1 && Time.time - IgnitionStartTime >= IgniteDuration) {
|
|
Ignited = true;
|
|
TorchFuel = TorchDuration;
|
|
TorchObject.SetActive(true);
|
|
FireParticles.Play();
|
|
StickObject.SetActive(false);
|
|
Burnable.Quality = IgnitedQuality;
|
|
}
|
|
}
|
|
|
|
private void OnTriggerEnter(Collider collider) {
|
|
if (!Ignited && collider.gameObject.layer == LayerMask.NameToLayer("Fire")) {
|
|
if (BurningSourceCount == 0) {
|
|
IgnitionStartTime = Time.time;
|
|
}
|
|
BurningSourceCount++;
|
|
}
|
|
}
|
|
|
|
private void OnTriggerExit(Collider collider) {
|
|
if (!Ignited && collider.gameObject.layer == LayerMask.NameToLayer("Fire")) {
|
|
BurningSourceCount--;
|
|
if (BurningSourceCount == 0) {
|
|
IgnitionStartTime = -1;
|
|
}
|
|
}
|
|
}
|
|
}
|