using UnityEngine; using System.Collections.Generic; public class FireScript : MonoBehaviour { public GameObject fire1, fire2, fire3, pointLight, fireGUI; public PlayerScript player; public readonly float NUMBER_OF_ENERGY_LOST_PER_SECOND = 1; public readonly float MAX_FIRE_INTENSITY = 100; public GameObject prefabsFireElement; public Rain rain; public Sprite startUpSpriteCombustibleElement; public float startupCombustionEnergyElement = 100; private PlayerScript playerTriggered; private Vector2 startScaleFire1, startScaleFire2, startScaleFire3, startFireGUI; private float startLightRange; private int startOrderFire1, startOrderFire2, startOrderFire3; private Light pLight; private List combustibleItems = new List(); private bool playerHasFeared = false; private float ratioEnergyLostBooster = 1; // Start is called before the first frame update void Start() { startScaleFire1 = new Vector2(fire1.gameObject.transform.localScale.x, fire1.gameObject.transform.localScale.y); startScaleFire2 = new Vector2(fire2.gameObject.transform.localScale.x, fire2.gameObject.transform.localScale.y); startScaleFire3 = new Vector2(fire3.gameObject.transform.localScale.x, fire3.gameObject.transform.localScale.y); startFireGUI = new Vector2(fireGUI.gameObject.transform.localScale.x, fireGUI.gameObject.transform.localScale.y); pLight = pointLight.GetComponent(); startOrderFire1 = fire1.GetComponent().sortingOrder; startOrderFire2 = fire2.GetComponent().sortingOrder; startOrderFire3 = fire3.GetComponent().sortingOrder; startLightRange = pLight.range; if (startUpSpriteCombustibleElement is Sprite) AddIntensity(new CombustibleItem[] { new CombustibleItem(startupCombustionEnergyElement, startUpSpriteCombustibleElement) }); } // Update is called once per frame void Update() { ratioEnergyLostBooster = (rain.IsRaining()) ? 2 : 1; if (GetFireIntensity() > 0) { DecrementIntensity(Time.deltaTime * NUMBER_OF_ENERGY_LOST_PER_SECOND * ratioEnergyLostBooster); playerHasFeared = false; } else if (!playerHasFeared) { player.GetComponent().IncrementLevel(50); foreach (CombustibleItem combustibleItem in combustibleItems) { Destroy(combustibleItem.GetGameObject()); } combustibleItems.Clear(); playerHasFeared = true; } float ratioFireIntensity = GetFireIntensity() / MAX_FIRE_INTENSITY; fire1.gameObject.transform.localScale = new Vector3(startScaleFire1.x * ratioFireIntensity, startScaleFire1.y * ratioFireIntensity, 0); fire2.gameObject.transform.localScale = new Vector3(startScaleFire2.x * ratioFireIntensity, startScaleFire2.y * ratioFireIntensity, 0); fire3.gameObject.transform.localScale = new Vector3(startScaleFire3.x * ratioFireIntensity, startScaleFire3.y * ratioFireIntensity, 0); fireGUI.gameObject.transform.localScale = new Vector3(startFireGUI.x * ratioFireIntensity, startFireGUI.y * ratioFireIntensity, 0); float newRange = startLightRange * ratioFireIntensity; pLight.range = newRange + (Mathf.Cos(Time.timeSinceLevelLoad * 8) * newRange * 0.01f); if (player.transform.position.y > transform.position.y * 2 + player.transform.localScale.y) { fire1.GetComponent().sortingOrder = startOrderFire1 + 100; fire2.GetComponent().sortingOrder = startOrderFire2 + 100; fire3.GetComponent().sortingOrder = startOrderFire3 + 100; } else { fire1.GetComponent().sortingOrder = startOrderFire1; fire2.GetComponent().sortingOrder = startOrderFire2; fire3.GetComponent().sortingOrder = startOrderFire3; } if (playerTriggered is PlayerScript) { if (Input.GetKeyDown(KeyCode.E) || Manette.IsUse()) { AddIntensity(playerTriggered.BurnObjects(MAX_FIRE_INTENSITY - GetFireIntensity())); playerTriggered = null; } } } public void AddIntensity (CombustibleItem[] combustibleItems) { for (int i = 0; i < combustibleItems.Length; i++) { GameObject go = Instantiate(prefabsFireElement, this.transform.position, Quaternion.Euler(0, 0, Random.Range(0, 360))); go.GetComponent().sprite = combustibleItems[i].GetSprite(); combustibleItems[i].SetGameObject(go); this.combustibleItems.Add(combustibleItems[i]); } } public void DecrementIntensity (float intensity) { if (this.combustibleItems.Count == 0) return; if (GetFireIntensity() < intensity) intensity = GetFireIntensity(); float intensityLeft = this.combustibleItems[0].GetQuantityOfEnergy() - intensity; if (intensityLeft <= 0) { Destroy(this.combustibleItems[0].GetGameObject()); this.combustibleItems.RemoveAt(0); if (this.combustibleItems.Count > 0) { this.combustibleItems[0].SetQuantityOfEnergy(this.combustibleItems[0].GetQuantityOfEnergy() + intensityLeft); } } else { this.combustibleItems[0].SetQuantityOfEnergy(intensityLeft); } } public float GetFireIntensity () { float t = 0; foreach (CombustibleItem c in this.combustibleItems) { t += c.GetQuantityOfEnergy(); } return t; } void OnTriggerEnter2D(Collider2D c) { if (c.gameObject.tag.Equals("Player")) { playerTriggered = c.gameObject.GetComponent(); playerTriggered.SetInteractMessage(true, this.gameObject.tag); } } void OnTriggerExit2D(Collider2D c) { if (c.gameObject.tag.Equals("Player")) { playerTriggered = null; c.gameObject.GetComponent().SetInteractMessage(false, this.gameObject.tag); } } }