示例#1
0
        public override void Procesar(float fDeltaSegundos)
        {
            Thing[] thingsAfectados = Galaxia.GetThingsEnRadio(Centro, radioAccion);

            foreach (Thing thing in thingsAfectados)
            {
                if (thing.Movible)
                {
                    Vector2 distancia = thing.Centro - this.Centro;

                    float velocidad = -velocidadAtraccion * (radioAccion - distancia.Length) / radioAccion;

                    thing.MoverA(distancia.Normalized() * velocidad * fDeltaSegundos, true, true);
                }
            }
        }
示例#2
0
        public override void Procesar(float fDeltaSegundos)
        {
            Rotar(velocidadRotacion * fDeltaSegundos, false, false);

            Thing[] thingsAfectados = Galaxia.GetThingsEnRadio(Centro, radioAccion);

            foreach (Thing thing in thingsAfectados)
            {
                if (thing.Movible)
                {
                    Vector2 distancia = thing.Centro - this.Centro;

                    float velocidad = -velocidadAtraccion * (radioAccion - distancia.Length) / radioAccion;

                    thing.MoverA(distancia.Normalized() * velocidad * fDeltaSegundos, true, true);

                    float anguloDistancia = distancia.AngleInDegress + 180.0f;
                    float anguloThing     = thing.RotacionEnGrados;

                    anguloDistancia = anguloDistancia % 360.0f;
                    if (anguloDistancia < 0)
                    {
                        anguloDistancia += 360.0f;
                    }

                    float separacionRotacion = anguloDistancia - anguloThing;
                    if (separacionRotacion < 0)
                    {
                        separacionRotacion += 360.0f;
                    }

                    if (separacionRotacion > 180.0f)
                    {
                        separacionRotacion = -(separacionRotacion - 180.0f);
                    }

                    float velocidadRotacionAngulo = (radioAccion - distancia.Length) / radioAccion;

                    separacionRotacion *= velocidadRotacionAngulo * fDeltaSegundos;

                    thing.Rotar(separacionRotacion, true, true);
                }
            }
        }
示例#3
0
        public override void Procesar(float fDeltaSegundos)
        {
            duracionTranscurrida += fDeltaSegundos;

            if (duracionTranscurrida > duracionSegundos)
            {
                Eliminar();
            }
            else
            {
                //Daño los nuevos objetos con los que impacto, para lo cual calculo el nuevo radio y solo
                //daño a quellos objetos que se encuentren a una distancia mayor a la del radio viejo, de esta
                //forma no daño 2 veces al mismo objeto! Al menos que se mueva delante de la onda expansiva, en cuyo
                //caso esta bien que lo dañe.
                //Tambien mantengo un vector de los things que fueron afectados, asi me aseguro de afectarlos al menos una vez,
                //ya que existe la posibilidad de que el thing se mueva de forma tal que no lo afecte segun el chequeo anterior.

                float nuevoRadioActual = radioInicial + (radioMaximo - radioInicial) * duracionTranscurrida / duracionSegundos;

                Thing[] thingsImpactados = Galaxia.GetThingsEnRadio(Centro, nuevoRadioActual);

                foreach (Thing thingImpactado in thingsImpactados)
                {
                    if (thingImpactado is ThingDaniable)
                    {
                        float distancia = (thingImpactado.Centro - Centro).Length;

                        if (distancia > radioActual || !thingsAfectados.Contains(thingImpactado))
                        {
                            ((ThingDaniable)thingImpactado).ProcesarDanio(this, danio);
                            thingsAfectados.Add(thingImpactado);
                        }
                    }
                }

                radioActual = nuevoRadioActual;

                SetTamanio(new Vector2(radioActual * 2, radioActual * 2));
            }
        }