public bool MoverAscensorAbajo(Pisos piso) { PictureBox PisoParada = NivelEdificio(piso); if (AscensorPictureBox.Location.Y >= PisoParada.Location.Y) { ImagenPersona ImagenInterna = Lista.Find(x => x.PisoDireccion == piso) ?? new ImagenPersona(); PointAscensor.Y = PisoParada.Location.Y; AscensorPictureBox.Location = PointAscensor; MoverAscensor = false; if (ImagenInterna.Id > 0) { StateTextBox.AppendText($"Salieron {ListaSalida.Where(x => x.PisoDireccion == piso).ToList().Count() } personas del elevador{Environment.NewLine}"); EliminarControles(ListaSalida.Where(x => x.PisoDireccion == piso).ToList()); } Lista.Remove(Lista.Find(x => x.PisoDireccion == piso)); PisoActual = piso; ListaSalida.RemoveAll(x => x.PisoDireccion == piso); ListaSalida.RemoveAll(x => x.PisoDireccion == Pisos.SinPiso); CambiarLabel("Esperando que seleccione un piso", Color.White, Color.Green); CantidadPersonasLabel.Text = ListaSalida.Count(x => x.Peso > 0).ToString(); PesoElevadorLabel.Text = ListaSalida.Sum(x => x.Peso).ToString(); return(true); } return(false); }
private void OnTimer_Tick(object sender, EventArgs e) { if (Lista.Sum(x => x.Peso) <= 0) { OnTimer.Stop(); } if (CapturarGente) { PesoTotalAcumulado = ListaSalida.Sum(x => x.Peso); PersonaGlobal = ObtenerImagenPorPisoControles(PisoActual) ?? new ImagenPersona(); if (PesoTotalAcumulado + PersonaGlobal.Peso >= PesoTotal) { StateTextBox.AppendText($"La persona que intento ingresar tenia {PersonaGlobal.Peso} sobrepasando el limite con {(PesoTotalAcumulado + PersonaGlobal.Peso) - PesoTotal} {Environment.NewLine}"); CambiarLabel("Ascensor Lleno.", Color.White, Color.Red); CapturarGente = false; MoverAscensor = true; ListaBotones.ForEach(x => x.Enabled = true); ObtenerButton(PisoActual).Enabled = false; } else { PersonaGlobal.PisoDireccion = AquePiso; if (PersonaGlobal.Id != 0) { if (!ListaSalida.Exists(x => x.Id == PersonaGlobal.Id)) { ListaSalida.Add(PersonaGlobal); } } else { ListaSalida.Add(new ImagenPersona() { PisoDireccion = AquePiso, Peso = 0 }); } StateTextBox.AppendText($"Peso Agregado {PersonaGlobal.Peso} {Environment.NewLine}"); CantidadPersonasLabel.Text = ListaSalida.Count(x => x.Peso > 0).ToString(); PesoElevadorLabel.Text = ListaSalida.Sum(x => x.Peso).ToString(); CapturarGente = false; MoverPersonas = true; MoverAscensor = false; CambiarLabel("Esperando que seleccione un piso", Color.White, Color.Green); } } if (MoverPersonas) { AnimarImagen(PersonaGlobal.PictureBox); if (MoverPersonaHorizontal(PersonaGlobal.PictureBox, 25)) { AsignarPosicionPersona(PersonaGlobal.PictureBox); if (PesoTotalAcumulado <= PesoTotal) { CapturarGente = false; MoverPersonas = false; if (ListaSalida.Count(x => x.PisoOrigen == PisoActual) == Lista.Count(x => x.PisoOrigen == PisoActual)) { MoverPersonas = false; MoverAscensor = true; } else { ListaBotones.ForEach(x => x.Enabled = true); ObtenerButton(PisoActual).Enabled = false; } CambiarLabel("Esperando que seleccione un piso", Color.White, Color.Green); } else { MoverPersonas = false; MoverAscensor = true; } } else { CambiarLabel("Persona en movimiento", Color.Black, Color.Yellow); } } if (MoverAscensor) { if ((int)PisoActual <= (int)AquePiso) { Pisos ppp; if (ListaSalida.Count == 0) { ppp = AquePiso; } else { ppp = ListaSalida.FirstOrDefault().PisoDireccion; } if (!MoverAscensorArriba(ppp)) { MoverPersonaVertical(ListaSalida, DecrementoEnY); MoverAscensorVertical(DecrementoEnY); CambiarLabel("Ascensor en movimiento, no presione nada", Color.White, Color.Red); } else { ListaBotones.ForEach(x => x.Enabled = true); ObtenerButton(PisoActual).Enabled = false; CambiarLabel("Esperando que seleccione un piso", Color.White, Color.Green); } } else { Pisos ppp; if (ListaSalida.Count == 0) { ppp = AquePiso; } else { ppp = ListaSalida.FirstOrDefault().PisoDireccion; } if (!MoverAscensorAbajo(ppp)) { MoverPersonaVertical(ListaSalida, DecrementoEnY); MoverAscensorVertical(DecrementoEnY); CambiarLabel("Ascensor en movimiento, no presione nada", Color.White, Color.Red); } else { ListaBotones.ForEach(x => x.Enabled = true); ObtenerButton(PisoActual).Enabled = false; CambiarLabel("Esperando que seleccione un piso", Color.White, Color.Green); } } } Invalidate(); }