public void PoruszanieSamochodem()
        {
            if (trasa.Count > 0)
            {
                if (!czyCzekamNaPozwolenie)
                {
                    Punkt <double> przesuniecie;

                    if (trasa[0].TypWierzcholka == TypWierzcholkaSamochodow.Skrzyzowanie)
                    {
                        przesuniecie = ((WejscieNaSkrzyzowanie)trasa[0].ObiektDrogi).Przesuniecie(ObecnaPozycja.Pozycja, trasa[1].Pozycja);
                    }
                    else
                    {
                        przesuniecie = trasa[0].ObiektDrogi.Przesuniecie(ObecnaPozycja.Pozycja);
                    }

                    Geometria geometriaPieszyCel = new Geometria(new Punkt <double>(trasa[0].Pozycja.X * 80 + przesuniecie.X, trasa[0].Pozycja.Y * 80 + przesuniecie.Y),
                                                                 new Punkt <double>(ZwrocPozycje().X + obrazek.Width / 2, ZwrocPozycje().Y + obrazek.Height / 2));

                    if (geometriaPieszyCel.ObliczOdlegloscPomiedzy() >= 2)
                    {
                        UstawPozycje(new Punkt <double>(ZwrocPozycje().X + geometriaPieszyCel.ObliczWektorPrzesuniecia(2).X,
                                                        ZwrocPozycje().Y + geometriaPieszyCel.ObliczWektorPrzesuniecia(2).Y));

                        obrazek.RenderTransform = new RotateTransform(geometriaPieszyCel.ObliczKatPomiedzy());
                    }
                    else
                    {
                        ObecnaPozycja = trasa[0];

                        trasa.RemoveAt(0);
                        czyCzekamNaPozwolenie = true;
                    }
                }

                if (czyCzekamNaPozwolenie && trasa.Count > 0)
                {
                    Cel = trasa.Count >= 2 ? trasa[1] : null;
                    if (trasa[0].CzyMogeWejsc(this))
                    {
                        ObecnaPozycja.Wyjdz(this);
                        czyCzekamNaPozwolenie = false;
                        trasa[0].Wejdz(this);
                    }
                    else if (ObecnaPozycja.TypWierzcholka == TypWierzcholkaSamochodow.Skrzyzowanie)
                    {
                        ((WejscieNaSkrzyzowanie)ObecnaPozycja.ObiektDrogi).ZmienPrzecinanieDrogi(this);
                    }
                }
            }
            else
            {
                ObecnaPozycja.Wyjdz(this);
                Dispose();
            }
        }
예제 #2
0
        public void PoruszaniePostaci()
        {
            if (trasa.Count > 0)
            {
                if (!czyCzekamNaPozwolenie)
                {
                    Geometria geometriaPieszyCel = new Geometria(new Punkt <double>(trasa[0].Pozycja.X * 40 + 20, trasa[0].Pozycja.Y * 40 + 20),
                                                                 new Punkt <double>(ZwrocPozycje().X + obrazek.Width / 2, ZwrocPozycje().Y + obrazek.Height / 2));

                    if (geometriaPieszyCel.ObliczOdlegloscPomiedzy() >= 2)
                    {
                        UstawPozycje(new Punkt <double>(ZwrocPozycje().X + geometriaPieszyCel.ObliczWektorPrzesuniecia(1.5).X,
                                                        ZwrocPozycje().Y + geometriaPieszyCel.ObliczWektorPrzesuniecia(1.5).Y));

                        obrazek.RenderTransform = new RotateTransform(geometriaPieszyCel.ObliczKatPomiedzy());
                    }
                    else
                    {
                        ObecnaPozycja = trasa[0];
                        trasa.RemoveAt(0);
                        czyCzekamNaPozwolenie = true;
                    }
                }

                if (czyCzekamNaPozwolenie && trasa.Count > 0)
                {
                    if (trasa[0].CzyMogeWejsc(this))
                    {
                        ObecnaPozycja.Wyjdz(this);
                        czyCzekamNaPozwolenie = false;
                        trasa[0].Wejdz(this);
                    }
                }
            }
            else
            {
                Dispose();
            }
        }