private void InteraccionPersonajeYMesh() { //Interacuar con meshes var objetoInteractuable = this.objetosInteractuables.OrderBy(mesh => this.DistanciaA(mesh)).First(); if ((objetoInteractuable is Escondite || objetoInteractuable is Escalera) && this.DistanciaA(objetoInteractuable) < 300) { objetoInteractuable.Interactuar(personaje); } else { if (this.DistanciaA(objetoInteractuable) < 300) { objetosInteractuables.Remove(objetoInteractuable); objetoInteractuable.Interactuar(personaje); } if (personaje.Entre((int)personaje.getPosition().X, -1300, -800) && personaje.Entre((int)personaje.getPosition().Z, -8100, -6800)) { Puerta unaPuerta = new Puerta(escenario.tgcScene.Meshes[0]);// esto es para que sea polimorfico nomas unaPuerta.Interactuar(personaje); } } }
public override void Update() { PreUpdate(); bool caminar = false; //Capturar Input teclado if (Input.keyPressed(Key.F)) { BoundingBox = !BoundingBox; } if (personaje.LockMouse) { if (Input.keyDown(Key.W)) { //Le digo al wachin que vaya para adelante personaje.MoverPersonaje('W', ElapsedTime, Input, escenario, monster); caminar = true; } if (Input.keyDown(Key.A)) { //Le digo al wachin que vaya para la izquierda personaje.MoverPersonaje('A', ElapsedTime, Input, escenario, monster); caminar = true; } if (Input.keyDown(Key.S)) { //Le digo al wachin que vaya a para atras personaje.MoverPersonaje('S', ElapsedTime, Input, escenario, monster); caminar = true; } if (Input.keyDown(Key.D)) { //Le digo al wachin que vaya para la derecha personaje.MoverPersonaje('D', ElapsedTime, Input, escenario, monster); caminar = true; } if (Input.keyDown(Key.Space)) { //Le digo al wachin que vaya para la derecha personaje.MoverPersonaje(' ', ElapsedTime, Input, escenario, monster); caminar = true; } personaje.MoverPersonaje('x', ElapsedTime, Input, escenario, monster); if (Input.keyPressed(Key.E)) { //Interacuar con meshes Console.WriteLine("x: {0} \ny: {1} \nz: {2}", personaje.getPosition().X, personaje.getPosition().Y, personaje.getPosition().Z); var objetoInteractuable = this.objetosInteractuables.OrderBy(mesh => this.DistanciaA(mesh)).First(); if (objetoInteractuable is Escondite && this.DistanciaA(objetoInteractuable) < 400) { objetoInteractuable.Interactuar(personaje); } else { if (this.DistanciaA(objetoInteractuable) < 300) { objetosInteractuables.Remove(objetoInteractuable); objetoInteractuable.Interactuar(personaje); } if (personaje.Entre((int)personaje.getPosition().X, -1300, -800) && personaje.Entre((int)personaje.getPosition().Z, -8100, -6800)) { Puerta unaPuerta = new Puerta(escenario.tgcScene.Meshes[0]);// esto es para que sea polimorfico nomas unaPuerta.Interactuar(personaje); } } } if (Input.keyPressed(Key.F)) { //Prende/apaga la luz de la linterna if (personaje.getItemEnMano() is Linterna) { personaje.getItemEnMano().Usar(personaje); } } if (Input.keyPressed(Key.R)) { //Recargar las pilas de la linterna var pila = (Pila)personaje.objetosInteractuables.Find(objeto => objeto is Pila); pila.Usar(personaje); } if (Input.keyPressed(Key.Q)) { //Cambiar entre vela y linterna (si hubiere) if ((personaje.getItemEnMano() is Linterna || personaje.getItemEnMano() is ItemVacioDefault) && personaje.objetosInteractuables.Any(objeto => objeto is Vela)) { var vela = (Vela)personaje.objetosInteractuables.Find(objeto => objeto is Vela); personaje.setItemEnMano(vela); } if ((personaje.getItemEnMano() is Vela || personaje.getItemEnMano() is ItemVacioDefault) && personaje.objetosInteractuables.Any(objeto => objeto is Linterna)) { var linterna = (Linterna)personaje.objetosInteractuables.Find(objeto => objeto is Linterna); personaje.setItemEnMano(linterna); } } if (Input.keyPressed(Key.H)) { personaje.tieneLuz = !personaje.tieneLuz; } } personaje.updateCamera(ElapsedTime, Input); personaje.aumentarTiempoSinLuz(); if (personaje.tieneLuz) { monster.Desaparecer(); } if (personaje.TieneItemEnMano()) { personaje.getItemEnMano().DisminuirDuracion(); if (personaje.getItemEnMano().getDuracion() <= 0) { personaje.getItemEnMano().FinDuracion(personaje); } } bool loAtrapo = monster.Aparecer(personaje); if (loAtrapo) { personaje.GameOver(); } personaje.YouWin(); PostUpdate(); }