示例#1
0
 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));
 }
示例#2
0
 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();
        }
    }
示例#4
0
 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);
 }