/// <summary> /// Try to initialize the needed components. Returns true if initialized, false if not. /// If this function returns true, you're guaranteed that burn vector and the needed GUI /// text objects are available and non-null. /// </summary> /// <returns></returns> private bool AttemptInitialize() { if (isInitialized) { return(true); // already initialized } DateTime now = DateTime.Now; if (lastUpdate + UPDATE_INTERVAL > now) { return(false); // too soon to try again } lastUpdate = now; // Try to get the navball's burn vector. This check is needed because it turns // out that the timing of when this object becomes available isn't super reliable, // so various MonoBehaviour implementations in the mod can't just initialize at // Start() time and use it. NavBallBurnVector theBurnVector = GameObject.FindObjectOfType <NavBallBurnVector>(); if (theBurnVector == null) { return(false); // nope, couldn't get it yet! } // Make sure the burn vector components that we need are there if (theBurnVector.ebtText == null) { return(false); } if (theBurnVector.TdnText == null) { return(false); } TextMeshProUGUI theClonedDurationText = CloneBehaviour(theBurnVector.ebtText); if (theClonedDurationText == null) { return(false); } TextMeshProUGUI theClonedTimeUntilText = CloneBehaviour(theBurnVector.TdnText); if (theClonedTimeUntilText == null) { Destroy(theClonedDurationText); return(false); } TextMeshProUGUI theCountdownText = CloneBehaviour(theBurnVector.ebtText); if (theCountdownText == null) { Destroy(theClonedDurationText); Destroy(theClonedTimeUntilText); return(false); } theCountdownText.enabled = false; theCountdownText.transform.position = Interpolate( theBurnVector.TdnText.transform.position, theBurnVector.ebtText.transform.position, 2.0F); // Got everything we need! burnVector = theBurnVector; originalDurationText = SafeText.of(burnVector.ebtText); originalTimeUntilText = SafeText.of(burnVector.TdnText); alternateDurationText = SafeText.of(theClonedDurationText); alternateTimeUntilText = SafeText.of(theClonedTimeUntilText); countdownText = SafeText.of(theCountdownText); isInitialized = true; return(true); }