Jump to content
Unity Insider Forum
Sign in to follow this  
dewa

Coroutine Wert verändern

Recommended Posts

Hallo zusammen, ich brauch mal einen kleinen denkanstoß.

Über einer Coroutine lasse ich einen Timer ablaufen. Wenn man bei Android die App verlässt stoppen die Coroutines und laufen weiter wenn man die App wieder öffnet. Es sollen aber auch Sekunden runtergezählt werden wenn man die App verlässt.

Ich bin jetzt soweit das ich bei verlassen der App einen Timestamp speichere und beim öffnen den Aktuellen Timestamp nehme und einfach beide Subtrahiere, läuft auch alles soweit.😁

Nun muss ich nurnoch diesen Wert in der laufenden Coroutine abziehen... Und da liegt das Problem. Wie mache ich das???  😣

Dauer App abwesendheit in Sekunden:

	public void OnApplicationPause(bool paused) {
		if(paused) {

			System.DateTime epochStart = new System.DateTime(1970, 1, 1, 0, 0, 0, System.DateTimeKind.Utc);
			int cur_time = (int)(System.DateTime.UtcNow - epochStart).TotalSeconds;
			PlayerPrefs.SetInt("Time_when_paused", cur_time);
		
		} else {
			TS_paused = PlayerPrefs.GetInt("Time_when_paused");

			System.DateTime epochStart = new System.DateTime(1970, 1, 1, 0, 0, 0, System.DateTimeKind.Utc);
			int cur_time_back = (int)(System.DateTime.UtcNow - epochStart).TotalSeconds;

			TS_diff = cur_time_back -  TS_paused;
		}
	}

COUNTER:

	
...............
{
StartCoroutine(StartCountdown_Kreatin(timer_kreatin,game_paused.TS_diff));
}


public IEnumerator StartCountdown_Kreatin(float timer_kreatin,int x)
	{
		
		currCountdownValue = timer_kreatin;
		while (currCountdownValue > 0)
		{
			TimeSpan kreatin_time = TimeSpan.FromSeconds (timer_kreatin);
			string niceTime =	String.Format ("{0:00}:{1:00}:{2:00}", 
			Math.Truncate (kreatin_time.TotalHours), 
			kreatin_time.Minutes, kreatin_time.Seconds);
			slots.Slot_kreatin_text.text = niceTime;

			//Abwesendheit vom TIMER abziehen
			while (x != 0) {
				timer_kreatin =timer_kreatin - x;
				x = 0;
				yield return null;
			}
				
			yield return new WaitForSeconds(1.0f);
			timer_kreatin--;
		}
	}

Der Counter startet nachdem alle Daten vom Server geladen worden sind.

ich denke das die Coroutine nicht erkennt wenn sich aushalb ein Wert verändert, und somit Trifft der WHILE loop einfach nicht ein...

Ihr könnt mir bestimmt weiter helfen.

 

Share this post


Link to post
Share on other sites

Anstatt durchegehend einen Wert hochzuzählen, könntest du auch konstant die Startzeit speichern. Dann erhöhst du nicht mehr in jedem Update deinen Timer-Wert, sondern rechnest ihn aus, indem du diesen Wert von der aktuellen Zeit abziehst. Dann kann man so oft Pause machen, wie man will, da sich der Wert dadurch nicht ändert.

  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×