Esempio n. 1
0
        public Cruzamento(Rua norte, Rua sul, Rua leste = null, Rua oeste = null, bool possuiSemaforo = true)
        {
            Ruas = new List <Rua>();

            Ruas.Add(norte);
            Ruas.Add(sul);

            if (leste != null)
            {
                Ruas.Add(leste);
            }

            if (oeste != null)
            {
                Ruas.Add(oeste);
            }

            if (!possuiSemaforo)
            {
                foreach (Rua r in Ruas)
                {
                    r.Semaforo = null; // Remove o semáforo da rua
                }
            }
        }
Esempio n. 2
0
        public void Mover()
        {
            if (Caminho.RuaAtual == null || isIniciado == false)
            {
                return;
            }


            if (Posicao <= Caminho.RuaAtual.Tamanho)
            {
                AtualizarPosicao();
            }
            else
            {
                _velocidade = 0;

                if (Caminho.RuaAtual.Semaforo == null || Caminho.RuaAtual.Semaforo.Estado == EstadoSemaforo.Aberto)
                {
                    Rua anterior = Caminho.RuaAtual;

                    if (Caminho.Avancar())
                    {
                        anterior.CarrosNaRua.Remove(this);      // tira o carro da rua anterior
                        Caminho.RuaAtual.CarrosNaRua.Add(this); // coloca o carro na rua atual

                        if (TrocaDeRua != null)
                        {
                            TrocaDeRua(this, anterior, Caminho.RuaAtual);
                        }
                        Posicao = 0;

                        this.Status = StatusCarroEnum.EmMovimento;
                        this.Dados.instantesTrocaRua.Add(TempoDoSistema.Valor);
                    }
                    else
                    {
                        anterior.CarrosNaRua.Remove(this); // tira o carro da rua anterior
                        if (TerminoCaminho != null)
                        {
                            TerminoCaminho(this);
                        }

                        this.Status = StatusCarroEnum.CaminhoConcluido;
                        this.Dados.instanteSaidaSistema = TempoDoSistema.Valor;
                    }
                }
                else
                {
                    // O carro está parado
                    tempoInicio = -1;

                    if (AguardandoSemaforo != null)
                    {
                        AguardandoSemaforo(this);
                    }

                    this.Status = StatusCarroEnum.ParadoSemaforo;
                    this.Dados.tempoSemaforo += 1;
                }
            }
        }