Exemple #1
0
    IEnumerator FadeOutCoroutine()
    {
        Time.timeScale    = 0f;
        fadeTimerStart    = Time.unscaledTime;
        fadeTimer         = Time.unscaledTime + fadeDuration;
        fadePanel.enabled = true;
        fadePanel.color   = Color.clear;
        while (true)
        {
            yield return(null);

            if (Time.unscaledTime > fadeTimer)
            {
                fadePanel.color = Color.black;
                break;
            }
            else
            {
                float a = VectorExtras.ReverseLerp(Time.unscaledTime, fadeTimerStart, fadeTimerStart + fadeDuration);
                fadePanel.color = new Color(fadePanel.color.r, fadePanel.color.g, fadePanel.color.b, a);
            }
        }
        //Time.timeScale = 1f;
        if (onFadeDone != null)
        {
            onFadeDone.Invoke();
        }
    }
Exemple #2
0
 IEnumerator FadeInCoroutine()
 {
     Time.timeScale    = 1f;
     fadeTimerStart    = Time.unscaledTime;
     fadeTimer         = Time.unscaledTime + fadeDuration;
     fadePanel.enabled = true;
     fadePanel.color   = Color.black;
     while (true)
     {
         if (Time.unscaledTime > fadeTimer)
         {
             fadePanel.enabled = false;
             break;
         }
         else
         {
             float a = VectorExtras.ReverseLerp(Time.unscaledTime, fadeTimerStart, fadeTimerStart + fadeDuration);
             a = VectorExtras.MirrorValue(a, 0f, 1f);
             fadePanel.color = new Color(fadePanel.color.r, fadePanel.color.g, fadePanel.color.b, a);
         }
         yield return(null);
     }
     if (onFadeDone != null)
     {
         onFadeDone.Invoke();
     }
 }
Exemple #3
0
    void Update()
    {
        if (initalized == false)
        {
            return;
        }

        int index = TerrainController.Singleton.ClosestSegmentIndexToPoint(head.transform.position);

        index = Mathf.Min(index + 1, TerrainController.Singleton.path.Count - 1);

        Vector3 target;

        if (Vector3.Distance(head.position, PlayerController.Singleton.transform.position) < chasePlayerDistance)
        {
            target = PlayerController.Singleton.transform.position;
        }
        else
        {
            target = TerrainController.Singleton.path[index] + (Vector2)TerrainController.Singleton.transform.position;
        }

        float myDistance     = TerrainController.Singleton.PointDistanceAlongPathTotal(head.position);
        float playerDistance = TerrainController.Singleton.PointDistanceAlongPathTotal(PlayerController.Singleton.transform.position);

        distToPlayer = playerDistance - myDistance;

        float percent = VectorExtras.ReverseLerp(distToPlayer, minSpeedDistance, maxSpeedDistance);
        float curve   = speedCurve.Evaluate(percent) * (maxSpeed - minSpeed);

        speed = curve + minSpeed; //VectorExtras.Remap( minSpeedDistance, maxSpeedDistance, minSpeed, maxSpeed, diff );


        head.position = Vector3.MoveTowards(head.position, target, speed * Time.deltaTime);

        float a = VectorExtras.VectorToDegrees(VectorExtras.Direction(head.position, target));

        headAngle = Mathf.MoveTowardsAngle(headAngle, a, headRotateSpeed * Time.deltaTime);
        head.transform.rotation = Quaternion.AngleAxis(headAngle, Vector3.forward);

        Debug.DrawLine(head.position, target, Color.cyan);
    }
Exemple #4
0
    IEnumerator MineStartDelay()
    {
        float targetTime = 0f;

        while (true)
        {
            miningDirection = (GameManager.InputToEdge() & _lastContacts) & ~Edges.None; // & ~Edges.none removes bit None from calculation

            if (isMining == true)                                                        //Are we trying to start mining?
            {
                float startTime = Time.time;                                             //'targetTime' is not used here since we would like to track progress of our timer
                float endime    = Time.time + miningTime;
                minerVisual.visible = true;
                minerVisual.SetTile(miningTile);

                GameManager.inputEnabled = false;
                mover.isSimulating       = false;           //Disable player controller so we can move the player manually.

                Vector3 playerStart = transform.position;
                Vector3 playerEnd   = new Vector3(miningTile.x + 0.5f, miningTile.y + 0.5f, 0f);

                while (true)
                {
                    float progress = VectorExtras.ReverseLerp(Time.time, startTime, endime);

                    transform.position = Vector3.Lerp(playerStart, playerEnd, progress);



                    minerVisual.Set(progress);
                    if (Time.time >= endime)
                    {
                        GameManager.singleton.level.blocks[miningTile.x, miningTile.y] = 0;
                        GameManager.singleton.level.UpdateMap();
                        transform.position      = playerEnd;
                        mover.movement.position = new Vector2(playerEnd.x, playerEnd.y);
                        break;
                    }

                    yield return(null);
                }
                GameManager.inputEnabled = true;
                mover.isSimulating       = true;

                minerVisual.visible = false;
                miningTile          = new Vector2Int(-1, -1);

                yield return(null);
            }
            else
            {
                if ((int)(miningDirection & ~Edges.None) != 0 && isOnGround && mover.movement.velocity.magnitude < stopMiningVel)                  //Check for any direction OTHER than none
                {
                    Edges startingMine = miningDirection;
                    while (true)
                    {
                        miningDirection = (GameManager.InputToEdge() & _lastContacts) & ~Edges.None;                                     // & ~Edges.none removes bit None from calculation

                        if (miningDirection != startingMine || isOnGround == false || mover.movement.velocity.magnitude > stopMiningVel) //Check if we should stop beginning to mine
                        {
                            targetTime   = miningStartDelay;
                            startingMine = Edges.None;
                            miningTile   = GameManager.EdgeToDirection(Edges.None);                             //Set no tile
                            break;
                        }
                        else
                        {                          //As long as the starting inputs are held, countdown our timer before actually starting to mine.
                            targetTime -= Time.deltaTime;
                            if (targetTime <= 0f)
                            {
                                targetTime = miningTime;
                                miningTile = tileCoord + GameManager.EdgeToDirection(miningDirection);                                   //Set the adjacent tile to be mined.
                                break;
                            }
                        }
                        yield return(null);
                    }
                }
            }

            yield return(null);
        }
    }