// Update is called once per frame void Update() { float deltaTime = Time.deltaTime; float stepDistance = _speed * deltaTime; truck.AddDeltaY(-stepDistance * (warp ? 3 : 1)); if (warp) { warpTime += deltaTime; if (warpTime >= WARP_DURATION) { warp = false; truck.WarpProgress(0); blocks.GenerateNextWall(); createRandomFruit(); if (nextFruitScore > 15) { createRandomFruit(); nextFruitScore = 0; } } else { truck.WarpProgress(warpTime / WARP_DURATION); } return; } if (blocks.IsStopped()) { if (truck.IsBounce()) { //wait for bounce finish } else { if (onWallCollision()) { if (truck.Hit()) { score++; dest += blocks.IsPositiveHit() ? 1 : -1; updateStatistics(); } else //game over { SceneManager.LoadScene(0); } } else { warp = true; warpTime = 0; } } } }