70 lines
2.1 KiB
C#
70 lines
2.1 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class WellController : MonoBehaviour
|
|
{
|
|
public GameObject node;
|
|
public int numberOfNodes = 5;
|
|
private List<GameObject> nodes = new List<GameObject>();
|
|
|
|
public float spawnDelay;
|
|
public float despawnTime;
|
|
|
|
|
|
private Transform player;
|
|
|
|
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
|
|
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;
|
|
StartCoroutine(SpawnNode(nodeSpawn, 0.5f, 0));
|
|
}
|
|
|
|
IEnumerator SpawnNode(Vector3 nodeSpawn, float pitch, int i)
|
|
{
|
|
if(i == numberOfNodes)
|
|
{
|
|
yield return new WaitForSeconds((despawnTime - spawnDelay) * 2); //Wait for all of the nodes to despawn
|
|
foreach(GameObject node in nodes)
|
|
{
|
|
node.GetComponent<EssenceNodeController>().FollowPlayer();
|
|
}
|
|
nodes.Clear();
|
|
|
|
yield break;
|
|
}
|
|
|
|
GameObject tempNode = Instantiate(node, nodeSpawn, Quaternion.identity);
|
|
tempNode.GetComponent<EssenceNodeController>().SetTimer(2f);
|
|
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);
|
|
if (tempNode.GetComponent<EssenceNodeController>().isTouched)
|
|
{
|
|
nodes.Add(tempNode);
|
|
}
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
transform.Rotate(new Vector3(10f, 10f, 10f) * Time.deltaTime);
|
|
}
|
|
}
|