private void OnTransit(Transit transit, Transit.TransitState state, float progress) { if (state == Transit.TransitState.Finished) { // trigger at next update nextTime = Time.time; waiting = false; Destroy(tunnel); tunnel = null; if (currentReef != null) { Destroy(currentReef); } currentReef = nextReef; nextReef = null; } else { // TODO: When should the next reef be instantiated and old one destroyed? Immediately? Part way through the tunnel? if (nextReef == null) { // put reef in wrapper object positioned relative to transit destination nextReef = new GameObject("Reef Wrapper"); nextReef.transform.parent = reefs.transform; GameObject reef = Instantiate(ReefPrefabs[ReefVisitIndex]); ReefVisitIndex = (ReefVisitIndex + 1) % ReefPrefabs.Length; ReefVisitCount++; reef.transform.parent = nextReef.transform; /*MeshRenderer renderer = reef.GetComponent<MeshRenderer>(); * if (renderer != null) { * renderer.material.color = new Color(Random.value, Random.value, Random.value, 1.0f); * }*/ activeStages.Clear(); IReefVisitor[] visitors = reef.GetComponentsInChildren <IReefVisitor>(); for (int i = 0, n = visitors.Length; i < n; i++) { ReefStage stage = new ReefStage(this, activeStages); activeStages.Add(stage); visitors[i].visitingReef(stage); } // Place reef a bit past where transit will end Vector3 dir = transit.FinalPosition - transit.ExitPosition; dir.Normalize(); Vector3 pos = transit.FinalPosition + 4 * dir; nextReef.transform.position = pos; // TODO: Rotate reef so it's facing the player } } }
public void visitingReef(ReefStage stage) { this.stage = stage; }