essence minigame improvements

This commit is contained in:
joonasp
2022-03-25 18:03:38 +02:00
parent f0649da5d3
commit 851b7ae0da
5 changed files with 84 additions and 17 deletions

View File

@@ -7,15 +7,49 @@ public class EssenceNodeController : MonoBehaviour
{
[SerializeField]
private AudioSource chime;
public bool isTouched;
private bool followPlayer = false;
private Transform player;
public void Touched()
{
GetComponent<Renderer>().material.color = Color.cyan;
chime.Play();
if (!isTouched)
{
GetComponent<Renderer>().material.color = Color.cyan;
chime.Play();
isTouched = true;
}
}
public void FollowPlayer()
{
followPlayer = true;
player = GameObject.FindGameObjectWithTag("MainCamera").transform;
StartCoroutine(Despawn());
}
public void SetPitch(float value)
{
chime.pitch = value;
}
IEnumerator Despawn()
{
yield return new WaitForSeconds(2f);
//TODO: Update value in player inventory
Destroy(gameObject);
}
private void Update()
{
if (followPlayer)
{
transform.position = Vector3.Lerp(transform.position, new Vector3(player.position.x,player.position.y - 0.5f, player.position.z), Time.deltaTime);
}
}
}

View File

@@ -6,9 +6,17 @@ 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;
@@ -24,22 +32,40 @@ public class WellController : MonoBehaviour
nodeSpawn.y = player.transform.position.y;
up = player.transform.up;
right = player.transform.right;
StartCoroutine(SpawnNode(nodeSpawn, 0));
StartCoroutine(SpawnNode(nodeSpawn, 0.5f, 0));
}
IEnumerator SpawnNode(Vector3 nodeSpawn, int i)
IEnumerator SpawnNode(Vector3 nodeSpawn, float pitch, int i)
{
if(i == numberOfNodes) yield break;
if(i == numberOfNodes)
{
foreach(GameObject node in nodes)
{
node.GetComponent<EssenceNodeController>().FollowPlayer();
}
nodes.Clear();
yield break;
}
GameObject tempNode = Instantiate(node, nodeSpawn, Quaternion.identity);
tempNode.GetComponent<AudioSource>().pitch += (i * (1f / numberOfNodes));
nodeSpawn = nodeSpawn + right * 0.2f + Random.Range(-0.2f, 0.2f) * up;
yield return new WaitForSeconds(2f);
StartCoroutine(SpawnNode(nodeSpawn, i+1));
tempNode.GetComponent<AudioSource>().pitch = pitch;
nodeSpawn = nodeSpawn + right * rightDistance + Random.Range(minDown, maxUp) * up;
yield return new WaitForSeconds(spawnDelay);
if (tempNode.GetComponent<EssenceNodeController>().isTouched)
{
nodes.Add(tempNode);
StartCoroutine(SpawnNode(nodeSpawn, pitch + 0.1f, i + 1));
}
else
{
Destroy(tempNode);
StartCoroutine(SpawnNode(nodeSpawn, pitch, i + 1));
}
}
private void Update()
{
transform.Rotate(0.5f, 0.5f, 0.5f);
transform.Rotate(new Vector3(10f, 10f, 10f) * Time.deltaTime);
}
}