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); }
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); }