GlobalGameJame/Assets/Scripts/BlockManager.cs
2020-02-01 23:28:26 +01:00

153 lines
4.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BlockManager : MonoBehaviour
{
public enum BlockType {None, Barricade, Door, Wood, Ammo, FireCamp};
public BlockType blockType = BlockType.None;
public float health = 100;
public float healthRate = 5;
private float healthTime = 5;
private Animation animation;
private PlayerManager player;
private bool action = false;
public List<GameObject> amountModels = new List<GameObject>();
public AudioSource audioSource = new AudioSource();
public AudioClip doorSound;
// Start is called before the first frame update
void Start()
{
player = FindObjectOfType<PlayerManager>();
if (blockType == BlockType.Door)
{
animation = this.GetComponent<Animation>();
}
else if (blockType == BlockType.Wood)
{
healthTime = healthRate;
}
else if (blockType == BlockType.Ammo)
{
healthTime = healthRate;
}
}
// Update is called once per frame
void Update()
{
if (blockType == BlockType.Wood)
{
if (health < 100 && healthTime < Time.time)
{
health += 10;
healthTime = healthRate + Time.time;
}
}
else if (blockType == BlockType.Ammo)
{
if (health < 100 && healthTime < Time.time)
{
health += 10;
healthTime = healthRate + Time.time;
}
}
viewHealthAs();
}
void viewHealthAs()
{
if (blockType == BlockType.Wood) {
if (amountModels.Count > 0)
{
for (int i = 0; i < amountModels.Count; i++)
{
if (i < ((100 - health) / 3.7f))
{
amountModels[i].SetActive(false);
}
else
{
amountModels[i].SetActive(true);
}
}
}
}
else if (blockType == BlockType.Ammo)
{
if (amountModels.Count > 0)
{
for (int i = 0; i < amountModels.Count; i++)
{
if (i < ((100 - health) / 4.5f))
{
amountModels[i].SetActive(false);
}
else
{
amountModels[i].SetActive(true);
}
}
}
}
}
public void Action()
{
if (blockType == BlockType.Door)
{
if (!animation.isPlaying)
{
audioSource.PlayOneShot(doorSound);
if (!action)
{
animation["Door"].speed = 1;
animation["Door"].time = 0;
action = true;
}
else
{
animation["Door"].speed = -1;
animation["Door"].time = animation["Door"].length;
action = false;
}
animation.Play("Door");
}
}
else if (blockType == BlockType.Wood)
{
if (health > 0 && player.barricadeMaterials < 50) {
health -= 10;
player.barricadeMaterials += (player.barricadeMaterials <= 40 ? 10 : (50 - player.barricadeMaterials));
}
}
else if (blockType == BlockType.Ammo)
{
if (health > 0 && player.ammo < 50)
{
health -= 10;
player.ammo += (player.ammo <= 40 ? 10 : (50 - player.ammo));
}
}
}
void OnCollisionEnter(Collision collision)
{
if (blockType == BlockType.Barricade) {
Debug.Log(collision.transform.tag);
if (collision.transform.CompareTag("Enemy"))
{
EnemyManager enemyManager = collision.transform.GetComponent<EnemyManager>();
if (enemyManager != null)
{
enemyManager.Damage(100);
health = 0;
Destroy(this.gameObject, 3);
}
}
}
}
}