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(); } }
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(); } }
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); }
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); } }