Exemplo n.º 1
0
        /******************** Metody******************/

        public override void Aktualizuj(float dt)
        {
            //sprawdz klizje z kazdym z moich i rzuc event jesli zachodzi
            foreach (Kolider x in SilnikGry.ObecnaScena.DajKomponent(Nazwa)) //Sprawdz kolizje dla kazdego aktywnego komponentu na senie
            {
                Kolider kol1 = (Kolider)x;                                   //Rzutowanie komponentu na klasę kolidera
                if (kol1.warstwaFizyczna != warstwaFizyczna || kol1 == this)
                {
                    continue;                                                          //tylko kolidery w tej samej warstwie mogą kolidowac
                }
                if (SprawdzKolizje(kol1))
                {
                    InformujOKolizji(kol1, true);      //informuje siebie o kolizji
                    kol1.InformujOKolizji(this, true); //informuje drugi obiekt o kolizji
                }
                else
                {
                    InformujOKolizji(kol1, false);      //informuje siebie o braku kolizji
                    kol1.InformujOKolizji(this, false); //informuje drugi obiekt o braku kolizji
                }

                for (int i = 0; i < KolidujaceKolidery.Count; i++)
                {
                    Kolider kol2 = KolidujaceKolidery[i];
                    if (kol2.ObiektyGryKomponentu == null || !kol2.Aktywny)
                    {
                        KolidujaceKolidery.Remove(kol2);
                        i--;
                        WyjscieZKolizji?.Invoke(this, kol2);
                    }
                }
            }
        }
Exemplo n.º 2
0
 /******************** Informacje o kolizji******************/
 private void InformujOKolizji(Kolider zKim, bool czyZderzenie)
 {
     if (czyZderzenie)                            //Jezlei zderzenie jest na true
     {
         if (!KolidujaceKolidery.Contains(zKim))  //Sprawdzamy, czy wczesniej nie kolidował
         {
             KolidujaceKolidery.Add(zKim);        //Dodajemy obiekt do listy koliderów
             WejscieWKolizje?.Invoke(this, zKim); //event mówiący o wejsciu w kolizje
         }
     }
     else //Jezeli nie ma kolizji obiektów
     {
         if (KolidujaceKolidery.Contains(zKim)) //sprawdzamy czy kolider znajduje się w liście Kolidującyhc
         {
             KolidujaceKolidery.Remove(zKim);     //Usuwamy kolidera, bo to oznacza, że juz przestał koilidować
             WyjscieZKolizji?.Invoke(this, zKim); //event o wyjściu z kolizji
         }
     }
 }