public void StartTransition(GameObject newDestination = null, GameObject newDestinationOrigin = null, GameObject newOrigin = null, float time = 0) { Start(); destinationOrigin = newDestinationOrigin; origin = newOrigin; if (newDestination != null) { destination = newDestination; //destinationCheck = destination; } if (currentCoroutine != null) { StopCoroutine(currentCoroutine); } VoxelTransitionManager.addTransitVoxel(); if (randomCurveMultiplier) { curveMultiplier = new Vector3(Random.Range(curveMultiplierMin.x, curveMultiplierMax.x), Random.Range(curveMultiplierMin.y, curveMultiplierMax.y), Random.Range(curveMultiplierMin.z, curveMultiplierMax.z)); } if (randomTransitionTime) { transitionTime = Random.Range(transitionTimeMin, transitionTimeMax); } currentCoroutine = StartCoroutine(transite(time)); }
private IEnumerator transite(float time) { if (time > 0) { yield return(new WaitForSeconds(time)); } setVoxelOrientation(destinationOrigin); // update the director vector gameObject.GetComponent <BoxCollider>().enabled = false; while (destination != null && transition < 1) { transform.position = Vector3.Lerp(initialPosition, destination.transform.position, transition); transform.localScale = Vector3.Lerp(initialScale, destination.transform.localScale, transition); transform.position = new Vector3(initialPosition.x + (transform.position.x - initialPosition.x) + (curveDirection.transform.localPosition.x * (curve.Evaluate(transition) * curveMultiplier.x)), initialPosition.y + (transform.position.y - initialPosition.y) + (curveDirection.transform.localPosition.y * (curve.Evaluate(transition) * curveMultiplier.y)), initialPosition.z + (transform.position.z - initialPosition.z) + (curveDirection.transform.localPosition.z * (curve.Evaluate(transition) * curveMultiplier.z))); transition += Time.deltaTime / transitionTime; yield return(new WaitForFixedUpdate()); } transform.position = destination.transform.position; gameObject.GetComponent <BoxCollider>().enabled = true; if (destination.GetComponent <AnchorPoint>() != null) { destination.GetComponent <AnchorPoint>().Anchoring(this); } else if (destination.name == "DeadEnd") { Destroy(this.gameObject); } VoxelTransitionManager.delTransitVoxel(); yield return(0); }
private IEnumerator InstantiateBlock(int iterator) { List <GameObject> pointList = voxelGenerator.GetPointList(); voxelGenerator.setConstructionEstimation(pointList.Count); for (int point = 0; point < pointList.Count - iterator; ++point) { while (!VoxelTransitionManager.voxelCanTransit() && !coroutineLimiter.calculeAutorisation()) { yield return(new WaitForFixedUpdate()); } Voxel _voxel = Instantiate(voxel); if (changeVoxelSpeed) { voxel.SetTransitionTime(voxelSpeed); voxel.SetTransitionTimeMin(voxelSpeedMin); voxel.SetTransitionTimeMax(voxelSpeedMax); } voxel.gameObject.transform.position = gameObject.transform.position; _voxel.StartTransition(pointList[point + iterator], voxelGenerator.gameObject, gameObject); if (fadding) { _voxel.startFading(false, 2.0f, voxelGenerator); } //yield return new WaitForFixedUpdate(); } }
private IEnumerator DislockMesh(int iterator) { if (voxelGenerator != null) { List <GameObject> destinatationPointList = voxelGenerator.GetPointList(); voxelGenerator.setConstructionEstimation(iterator + pointList.Count); if (useInstantiator) { voxelInstantiator.StartInstantiateBlock(voxelGenerator); voxelGenerator.setConstructionEstimation(destinatationPointList.Count); } for (int point = 0; point < pointList.Count; ++point) { while (!coroutineLimiter.calculeAutorisation()) { yield return(new WaitForFixedUpdate()); } if (pointList[point].GetComponent <AnchorPoint>().AnchoredVoxel != null) { while (!VoxelTransitionManager.voxelCanTransit()) { yield return(new WaitForFixedUpdate()); } if (point < destinatationPointList.Count - iterator) { pointList[point].GetComponent <AnchorPoint>().Disanchoring(destinatationPointList[point + iterator], gameObject); } else if (voxelGenerator.GetDeadEnd() != null) { pointList[point].GetComponent <AnchorPoint>().Disanchoring(voxelGenerator.GetDeadEnd(), gameObject); } else { pointList[point].GetComponent <AnchorPoint>().DeleteVoxel(); } //yield return new WaitForFixedUpdate(); } } } else { for (int point = 0; point < pointList.Count; ++point) { pointList[point].GetComponent <AnchorPoint>().DeleteVoxel(); } } attachedVertex = 0; voxelConstructionEstimation = 0; anchoredVoxelNBR = 0; if (fading) { startFading(false, 2.0f); } yield return(0); }