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 } } }
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; } } }