public override EstadoNPC OnDaniadoPor(Thing thing)
        {
            if (thing is ThingNave)
            {
                ThingNave naveAtacante = (ThingNave)thing;

                Faccion.RelacionConOtraFaccionEnum relacionConFaccionAtacante = nave.Faccion.GetRelacion(naveAtacante.Faccion);

                switch (nave.Faccion.TipoFaccion)
                {
                case Faccion.TipoFaccionEnum.Agresiva:
                    //Si la nave atacada pertenece a una facción agresiva, ataca de vuelta siempre! (al menos que sea de la misma facción)
                    return(new EstadoNPCAtacar(nave, naveAtacante));

                case Faccion.TipoFaccionEnum.Neutral:
                    //Si la nave atacada pertenece a una facción neutral, solo devuelve el ataque si la relación con esa facción es agresiva
                    if (nave.Faccion.GetRelacion(naveAtacante.Faccion) == Faccion.RelacionConOtraFaccionEnum.Agresiva)
                    {
                        return(new EstadoNPCAtacar(nave, naveAtacante));
                    }
                    else
                    {
                        return(new EstadoNPCHuir(nave, naveAtacante));
                    }

                case Faccion.TipoFaccionEnum.Pavisa:
                case Faccion.TipoFaccionEnum.Recolectora:
                    //Finalmente, si la nave atacada pertenece a una facción pasiva o recolectora, comienza a huir!
                    return(new EstadoNPCHuir(nave, naveAtacante));
                }
            }

            return(this);
        }
Exemple #2
0
        public override EstadoNPC OnDaniadoPor(Thing thing)
        {
            if (thing is ThingNave)
            {
                ThingNave naveAtacante = (ThingNave)thing;

                if (naveAtacante.Faccion != nave.Faccion &&
                    naveAtacante.Faccion != null)
                {
                    Faccion.RelacionConOtraFaccionEnum relacionConFaccionAtacante = nave.Faccion.GetRelacion(naveAtacante.Faccion);

                    if (relacionConFaccionAtacante != Faccion.RelacionConOtraFaccionEnum.Amigable)
                    {
                        //Si la relación con la facción a la que pertenece la nave que me ataca es distinta a amigable, la empiezo a atacar

                        thingAAtacar = naveAtacante;
                    }
                }
            }

            return(this);
        }