essence minigame improvements
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user