Heroes_of_Hiis/Assets/Project Files/Scripts/JoonasP/WellController.cs

70 lines
2.1 KiB
C#
Raw Permalink Normal View History

2022-03-17 15:24:46 +00:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WellController : MonoBehaviour
{
public GameObject node;
public int numberOfNodes = 5;
2022-03-25 16:03:38 +00:00
private List<GameObject> nodes = new List<GameObject>();
public float spawnDelay;
public float despawnTime;
2022-03-25 16:03:38 +00:00
2022-03-17 15:24:46 +00:00
private Transform player;
2022-03-25 16:03:38 +00:00
public float rightDistance = 0.2f; //Distance between spawned nodes
public float maxUp = 0.2f; //Maximum up shift between orbs
public float minDown = -0.2f; //Same but for down
2022-03-17 15:24:46 +00:00
private Vector3 right;
private Vector3 up;
private void Awake()
{
}
public void StartMinigame()
{
player = GameObject.FindGameObjectWithTag("MainCamera").transform;
Vector3 nodeSpawn = player.transform.position + (player.forward * 0.5f);
nodeSpawn.y = player.transform.position.y;
up = player.transform.up;
right = player.transform.right;
2022-03-25 16:03:38 +00:00
StartCoroutine(SpawnNode(nodeSpawn, 0.5f, 0));
2022-03-17 15:24:46 +00:00
}
2022-03-25 16:03:38 +00:00
IEnumerator SpawnNode(Vector3 nodeSpawn, float pitch, int i)
2022-03-17 15:24:46 +00:00
{
2022-03-25 16:03:38 +00:00
if(i == numberOfNodes)
{
yield return new WaitForSeconds((despawnTime - spawnDelay) * 2); //Wait for all of the nodes to despawn
2022-03-25 16:03:38 +00:00
foreach(GameObject node in nodes)
{
node.GetComponent<EssenceNodeController>().FollowPlayer();
}
nodes.Clear();
yield break;
}
2022-03-17 15:24:46 +00:00
2022-03-21 15:52:47 +00:00
GameObject tempNode = Instantiate(node, nodeSpawn, Quaternion.identity);
tempNode.GetComponent<EssenceNodeController>().SetTimer(2f);
2022-03-25 16:03:38 +00:00
tempNode.GetComponent<AudioSource>().pitch = pitch;
nodeSpawn = nodeSpawn + right * rightDistance + Random.Range(minDown, maxUp) * up;
yield return new WaitForSeconds(spawnDelay);
StartCoroutine(SpawnNode(nodeSpawn, pitch, i + 1));
yield return new WaitForSeconds(despawnTime - spawnDelay);
2022-03-25 16:03:38 +00:00
if (tempNode.GetComponent<EssenceNodeController>().isTouched)
{
nodes.Add(tempNode);
}
2022-03-17 15:24:46 +00:00
}
2022-03-21 15:52:47 +00:00
private void Update()
{
2022-03-25 16:03:38 +00:00
transform.Rotate(new Vector3(10f, 10f, 10f) * Time.deltaTime);
2022-03-21 15:52:47 +00:00
}
2022-03-17 15:24:46 +00:00
}