예제 #1
0
        public void Ejecutar(SuvirvalCraft contexto, float elapsedTime)
        {
            float alcance     = 0;
            float fuerzaGolpe = 0;

            BuscarColisionConGolpe(contexto);

            if (GolpeActual.Equals(Patear))
            {
                if (elementoEnColision != null)
                {
                    contexto.sonidoGolpePatada.play(false);
                    elementoEnColision.GenerarVibracion(contexto.tiempo);
                }
                contexto.personaje.mesh.playAnimation("Patear", true);
                alcance     = contexto.personaje.alcancePatada();
                fuerzaGolpe = contexto.personaje.fuerzaPatada();
            }

            if (GolpeActual.Equals(Pegar))
            {
                if (elementoEnColision != null)
                {
                    contexto.sonidoGolpe.play(false);
                    elementoEnColision.GenerarVibracion(contexto.tiempo);
                }
                contexto.personaje.mesh.playAnimation("Pegar", true);
                alcance     = contexto.personaje.alcanceGolpe();
                fuerzaGolpe = contexto.personaje.fuerzaGolpe();
            }

            //Si golpeo un obstáculo deberé esperar 2 segundos para poder golpearlo nuevamente
            if (PuedeGolpear(contexto.tiempo) && elementoEnColision != null)
            {
                //Buscamos si esta al alcance alguno de los obstáculos
                //foreach (Elemento elem in contexto.optimizador.ElementosColision)
                //{
                //if (ControladorColisiones.EsferaColisionaCuadrado(contexto.personaje.GetAlcanceInteraccionEsfera(), elem.BoundingBox()))
                //{
                //Si golpeo actualizamos el tiempo local
                momentoUltimoGolpe = contexto.tiempo;
                elementoEnColision.recibirDanio(fuerzaGolpe, contexto.tiempo);
                if (elementoEnColision.estaDestruido())
                {
                    if (!elementoEnColision.destruccionTotal())
                    {
                        foreach (var obs in elementoEnColision.elementosQueContiene())
                        {
                            //TODO. Aplicar algun algoritmo de dispersion copado
                            obs.posicion(elementoEnColision.posicion());
                            contexto.elementos.Add(obs);
                        }
                    }
                    elementoEnColision.liberar();
                    contexto.elementos.Remove(elementoEnColision);
                    contexto.optimizador.ForzarActualizacionElementosColision();
                }

                //En principio solo se puede golpear un obstaculo a la vez.
                // break;
                //}
                //}
            }
        }