1
0
Fork 0
This repository has been archived on 2024-01-06. You can view files and clone it, but cannot push or open issues or pull requests.
Global-Game-Jam-2019/Assets/Scripts/FireScript.cs
2019-01-27 14:54:55 +01:00

147 lines
6.3 KiB
C#

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<CombustibleItem> combustibleItems = new List<CombustibleItem>();
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<Light>();
startOrderFire1 = fire1.GetComponent<Renderer>().sortingOrder;
startOrderFire2 = fire2.GetComponent<Renderer>().sortingOrder;
startOrderFire3 = fire3.GetComponent<Renderer>().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<FearLevel>().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<Renderer>().sortingOrder = startOrderFire1 + 100;
fire2.GetComponent<Renderer>().sortingOrder = startOrderFire2 + 100;
fire3.GetComponent<Renderer>().sortingOrder = startOrderFire3 + 100;
}
else
{
fire1.GetComponent<Renderer>().sortingOrder = startOrderFire1;
fire2.GetComponent<Renderer>().sortingOrder = startOrderFire2;
fire3.GetComponent<Renderer>().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<SpriteRenderer>().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<PlayerScript>();
playerTriggered.SetInteractMessage(true, this.gameObject.tag);
}
}
void OnTriggerExit2D(Collider2D c)
{
if (c.gameObject.tag.Equals("Player"))
{
playerTriggered = null;
c.gameObject.GetComponent<PlayerScript>().SetInteractMessage(false, this.gameObject.tag);
}
}
}