using System.Collections; using System.Collections.Generic; using UnityEngine; public class Campfire : MonoBehaviour { public GameState GameState; public Light DynamicLight; [Tooltip("This audiosource will play the clips to indicate that an object has been thrown in the fire.")] public AudioSource BurnEffectSource; public float GoodFuelAmount; [Tooltip("The light turns this color when Fuel < GoodFuelAmount. Otherwise it'll be as it is in the editor.")] public Color TooLowFuelColor; public float RandomVarianceDuration; public float RandomVarianceMagnitude; [Header("Runtime values")] public float Fuel; private Color EnoughFuelColor; private float FullRange; private float RandomVariance = 0; private float NextRandomVariance = 0; private float LastRandomVarianceChange = 0; private void Awake() { EnoughFuelColor = DynamicLight.color; FullRange = DynamicLight.range; } private void Update() { if (Time.time - LastRandomVarianceChange > RandomVarianceDuration) { NextRandomVariance = (Random.value - 0.5f) * 2f * RandomVarianceMagnitude; LastRandomVarianceChange = Time.time; } RandomVariance = Mathf.Lerp(RandomVariance, NextRandomVariance, (Time.time - LastRandomVarianceChange) / RandomVarianceDuration); Fuel -= Time.deltaTime; DynamicLight.range = Mathf.Log(Fuel + 1f, 10) / 2f * FullRange + RandomVariance; DynamicLight.color = Color.Lerp(DynamicLight.color, Fuel < GoodFuelAmount ? TooLowFuelColor : EnoughFuelColor, 10f * Time.deltaTime); if (Fuel <= 0) { GameState.Current = State.GameOver; } } private void OnCollisionEnter(Collision c) { if (c.collider.attachedRigidbody != null && c.collider.attachedRigidbody) { Burnable Burnable = c.collider.attachedRigidbody.GetComponent(); if (Burnable != null) { Fuel += Burnable.Quality.FuelValue; BurnEffectSource.PlayOneShot(Burnable.Quality.BurningSound); Destroy(c.collider.attachedRigidbody.gameObject); } } } }