예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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();
        }