Exemplo n.º 1
0
    // Handle the sequence of events for travelling to a new planet
    IEnumerator TravelToPlanet(GameObject planetObj)
    {
        // Tween Distance Planet offscreen to the right
        float planetTweenTime = 0.5f;
        float halfPlanetWidth = GameController.defaultScale * ppu * 0.5f;
        Tween movePlanetX     = transform.DOMoveX(Screen.width + halfPlanetWidth, planetTweenTime).SetEase(Ease.InCirc);

        // Get the stats from each planet
        PlanetImport planetInfo    = GetComponent <PlanetImport>();
        PlanetImport planetInfoNew = planetObj.GetComponent <PlanetImport>();

        // Get the distance from sun of the two planets
        var oldKmFromSun = planetInfo.kmFromSun;
        var newKmFromSun = planetInfoNew.kmFromSun;
        // Initialize time variables
        float  minTraveltime   = planetTweenTime * 2;
        double timeScaleFactor = 1e3d;
        // Calculate the distance between new planet and old planet
        double travelKm = Math.Abs(newKmFromSun - oldKmFromSun);
        // Calculate wait time based on distance
        float travelTime = (float)(travelKm / timeScaleFactor);

        travelTime = Mathf.Max(minTraveltime, travelTime);

        // Distance Counter
        // Get reference to Distance Controller script
        DistanceController kmControl = DistanceController.Instance;

        // Enable and Reset counter text
        kmControl.ActivateCounter();
        kmControl.ResetCounter();

        // Accelerate counting over time from 0 -> calculated distance
        DOTween.To(() => CountDistance.kmCounter, x => CountDistance.kmCounter = x,
                   travelKm, travelTime).SetEase(Ease.InOutQuart);

        // Set counter scale to tween to (weighted by travel time)
        float counterScale = 0.8f + 0.1f * travelTime;

        // Scale up counter over time
        DOTween.To(() => CountDistance.myScale, x => CountDistance.myScale = x,
                   counterScale, travelTime).SetEase(Ease.OutBack);


        // Enable and Reset journey display
        kmControl.ActivateJourneyDisplay();
        kmControl.SetJourneyDisplay(planetInfo.planet.name, planetInfoNew.planet.name);

        // Scale tween in the Journey Display
        float journeyScale = 1f;

        DOTween.To(() => JourneyDisplay.myScale, x => JourneyDisplay.myScale = x,
                   journeyScale, planetTweenTime).SetEase(Ease.OutElastic);

        // Play travel to planet sound
        if (travelKm < 1800d)
        {
            audioObj.PlaySfx(AudioController.audioTravelShort);
        }
        else
        {
            audioObj.PlaySfx(AudioController.audioTravelLong);
        }

        yield return(movePlanetX.WaitForCompletion());

        // Change to new planet
        planetInfo.planet = planetInfoNew.planet;
        planetInfo.ImportThisPlanet();

        // Put Distance Planet off left of screen
        gameObject.transform.position = new Vector3(-1000, transform.position.y, 0);

        yield return(new WaitForSeconds(travelTime - (2 * planetTweenTime)));

        // Tween new Distance Planet onscreen from the left.
        movePlanetX = transform.DOMoveX(Screen.width * 0.5f, planetTweenTime).SetEase(Ease.OutCirc);

        // Fade out travel sound
        if (audioObj.sfxPlayer.clip == AudioController.audioTravelLong)
        {
            audioObj.FadeOutVol(audioObj.sfxPlayer, 1.5f);
        }

        yield return(movePlanetX.WaitForCompletion());

        GameController.planetIsMoving = false;
    }