public void UruchomAplikacje(string Nazwa, bool poSkonczeniuObecnej = false, bool zapetlic = false) { Animacja a = null; foreach (Animacja x in Animacje) { if (string.Equals(Nazwa, x.Nazwa)) { a = x; break; } } if (a == null) { return; //jak nie znalazlem takiej animacji to nic nie rob } if (poSkonczeniuObecnej && wykonujAnimcaje) //Czekam na skonczenie obecnej animacji (dodanie do kolejki) { NastepnaAnimacja = a; zapetlNastepnaAnimacje = zapetlic; } else //jesli mam natychmiast rozpoczac ta animacje lub i tak nic innego nie animuje { AnulujAnimacje(); ObecnaAnimacja = a; zapetlObecnaAnimacje = zapetlic; czasOstatnijKlatki = DateTime.Now; nrObecnejKlatki = 0; wykonujAnimcaje = true; } }
public override void Start() { if (Animacje.Count > 0 && wykonujAnimcaje == false) { ObecnaAnimacja = Animacje.First(); // Zwraca pierwszy element z Listy Animacje nrObecnejKlatki = 0; } }
public void AnulujAnimacje() { if (wykonujAnimcaje) { nrObecnejKlatki = (ObecnaAnimacja.KonczNaPierwszejKlatca ? 0 : ObecnaAnimacja.IleKlatek - 1); } wykonujAnimcaje = false; NastepnaAnimacja = null; }
/******************** Metody ******************/ public override void Aktualizuj(float dt) { if (!wykonujAnimcaje) { return; //Wyjdź jak nie ma być animacji } if ((DateTime.Now - czasOstatnijKlatki).TotalSeconds < ObecnaAnimacja.CzasNaKlatke) { return; //wyjdź jeżeli czas, który upłynął jest mniejszy niż czas wykonywania klatki } if (nrObecnejKlatki < ObecnaAnimacja.IleKlatek - 1) //Dajemy -1, z tego powodu, że jak jest 10 klatek i jesteśmy na 8, wchodzimy do petli i DAJEMY 9 klatke, czyli przedostatnią. Na ostatnią kaltke jest inny if { nrObecnejKlatki++; //przejdź do nastepnej klatki czasOstatnijKlatki = DateTime.Now; //ustaw czas wykonywania klatki } else { ZakonczonoAnimacje?.Invoke(this, ObecnaAnimacja); //Wywołaj event o zakonczeniu animacji (przechodzi ostatnia klatka) if (NastepnaAnimacja == null) //Jeżeli po obecnej animacji nie mamy następnej { if (zapetlObecnaAnimacje) //Opcja 1: Zapetlamy obecna animacje { nrObecnejKlatki = 0; czasOstatnijKlatki = DateTime.Now; } else //Wychodzimy { if (ObecnaAnimacja.KonczNaPierwszejKlatca) { nrObecnejKlatki = 0; //mozemy na koniec wyswietlic pierwsza klatke } wykonujAnimcaje = false; } } else {//Przerzucanie nastęnej klatki na obecną ObecnaAnimacja = NastepnaAnimacja; nrObecnejKlatki = 0; zapetlObecnaAnimacje = zapetlNastepnaAnimacje; NastepnaAnimacja = null; czasOstatnijKlatki = DateTime.Now; } } }