public MainForm() { InitializeComponent(); OnTimer.Stop(); PointPersona = PrimeraPersonaPictureBox.Location; PointAscensor = AscensorPictureBox.Location; AgregarImagenes(PrimeraPersonaPictureBox, "Piso1", 9); AgregarImagenes(SegundaPersonaPictureBox, "Piso2", 4); AgregarImagenes(TerceraPersonaPictureBox, "Piso3", 4); AgregarImagenes(CuartaPersonaPictureBox, "Piso4", 4); ImagenPersona imagenPersona = new ImagenPersona { PictureBox = PrimeraPersonaPictureBox, PisoOrigen = Pisos.PrimerPiso, Id = Lista.Count() + 1, Peso = ObtenerPesoRandom() }; Lista.Add(imagenPersona); imagenPersona = new ImagenPersona { PictureBox = SegundaPersonaPictureBox, PisoOrigen = Pisos.SegundoPiso, Id = Lista.Count() + 1, Peso = ObtenerPesoRandom() }; Lista.Add(imagenPersona); imagenPersona = new ImagenPersona { PictureBox = TerceraPersonaPictureBox, PisoOrigen = Pisos.TercerPiso, Id = Lista.Count() + 1, Peso = ObtenerPesoRandom() }; Lista.Add(imagenPersona); imagenPersona = new ImagenPersona { PictureBox = CuartaPersonaPictureBox, PisoOrigen = Pisos.CuartoPiso, Id = Lista.Count() + 1, Peso = ObtenerPesoRandom() }; Lista.Add(imagenPersona); ListaBotones.Add(PrimerPisoButton); ListaBotones.Add(SegundoPisoButton); ListaBotones.Add(TercerPisoButton); ListaBotones.Add(CuartoPisoButton); }
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(); }