public override bool TryStart(AbilityDef ability, Saveable_Caster caster, ref List <Thing> targets, ref IExposable effectState) { if (!base.TryStart(ability, caster, ref targets, ref effectState)) { return(false); } if (targets == null) { return(false); } targets = targets .OfType <Pawn>() .Where(i => i.MaxHitPoints > 0) .Where(i => i.health.summaryHealth.SummaryHealthPercent < this.healthTrashHold) .Cast <Thing>() .ToList(); if (targets.Any()) { return(true); } else { return(false); } }
public IEnumerable <Thing> Filter(AbilityDef ability, Saveable_Caster pawn) { foreach (Thing thing in this.optionalSource.Targets(ability, pawn)) { Pawn thingPawn = thing as Pawn; if (thingPawn != null) { if (thingPawn.Faction == pawn.pawn.Faction) { yield return(thing); } continue; } Corpse corpsePawn = thing as Corpse; if (corpsePawn != null) { if (corpsePawn.innerPawn.Faction == pawn.pawn.Faction) { yield return(thing); } continue; } } }
public override IEnumerable<Thing> Targets(AbilityDef ability, Saveable_Caster pawn) { if (this.optionalSource == null) return GenAI.PawnTargetsFor(pawn.pawn.Faction).Cast<Thing>(); else return this.Filter(ability, pawn); }
public override IEnumerable<Thing> Targets(AbilityDef ability, Saveable_Caster pawn) { Brain brain = pawn.pawn.GetSquadBrain(); if (brain == null) return AbilityTarget_ThingInCategory.emptyThings; return brain.ownedPawns.OfType<Thing>(); }
public override IEnumerable <Thing> Targets(AbilityDef ability, Saveable_Caster pawn) { foreach (Thing thing in this.target.Targets(ability, pawn)) { Pawn thingPawn = thing as Pawn; if (thingPawn != null) { if (this.races.Contains(thingPawn.def)) { yield return(thing); } continue; } Corpse corpsePawn = thing as Corpse; if (corpsePawn != null) { if (this.races.Contains(corpsePawn.innerPawn.def)) { yield return(thing); } continue; } } }
public override IEnumerable<Thing> Targets(AbilityDef ability, Saveable_Caster pawn) { if (this.optionalSource == null) return Find.ListerPawns.PawnsInFaction(pawn.pawn.Faction).OfType<Thing>(); else return this.Filter(ability, pawn); }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { if (this.target == null) return ability.target.Targets(ability, pawn).Any(); else return this.target.Targets(ability, pawn).Any(); }
public override bool TryStart(AbilityDef ability, Saveable_Caster caster, ref List<Thing> targets, ref IExposable effectState) { AbilityEffect_RandomState state = new AbilityEffect_RandomState(); state.item = Rand.Range(0, this.items.Count); effectState = state; return this.items[state.item].TryStart(ability, caster, ref targets, ref state.effectState); }
public override IEnumerable<Thing> Targets(AbilityDef ability, Saveable_Caster pawn) { IEnumerable<Thing> things = Find.ListerThings.ThingsMatching(new ThingRequest() { group = this.group }); if (things == null) return AbilityTarget_ThingInCategory.emptyThings; else return things; }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { if (this.items == null) return false; foreach (AbilityRequeriment requeriment in this.items) if (requeriment.Sucess(ability, pawn)) return true; return false; }
public override bool TryStart(AbilityDef ability, Saveable_Caster caster, ref List <Thing> targets, ref IExposable effectState) { AbilityEffect_RandomState state = new AbilityEffect_RandomState(); state.item = Rand.Range(0, this.items.Count); effectState = state; return(this.items[state.item].TryStart(ability, caster, ref targets, ref state.effectState)); }
public override IEnumerable <Thing> Targets(AbilityDef ability, Saveable_Caster pawn) { Brain brain = pawn.pawn.GetSquadBrain(); if (brain == null) { return(AbilityTarget_ThingInCategory.emptyThings); } return(brain.ownedPawns.OfType <Thing>()); }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { Saveable_ExecutionLog log = pawn.GetLog(ability); int ticks = this.initial + log.numberOfExecution * this.between; if (this.minimum > 0) ticks = Math.Max(this.minimum, ticks); if (this.maximum > 0) ticks = Math.Min(this.maximum, ticks); return log.ticksSinceExecution >= ticks; }
public void NotifyCompleted(bool sucess) { foreach (Saveable_Mote mote in this.currentMotes) { mote.Completed(this, sucess, i => this.currentMotes.Remove(i)); } this.currentAbility = null; this.currentTargets = null; this.effectState = null; }
public override IEnumerable <Thing> Targets(AbilityDef ability, Saveable_Caster saveablePawn) { float maximumSquared = this.maximumRange * this.maximumRange; float minimumSquared = this.minimumRange * this.minimumRange; if (closestFirst) { List <KeyValuePair <float, Thing> > ranges = new List <KeyValuePair <float, Thing> >(); foreach (Thing thing in this.target.Targets(ability, saveablePawn)) { float lengthHorizontalSquared = (saveablePawn.pawn.Position - thing.Position).LengthHorizontalSquared; if ((maximumSquared > 0) && (maximumSquared < lengthHorizontalSquared)) { continue; } if ((minimumSquared > 0) && (minimumSquared > lengthHorizontalSquared)) { continue; } ranges.Add(new KeyValuePair <float, Thing>(lengthHorizontalSquared, thing)); } ranges.Sort((x, y) => x.Key.CompareTo(y.Key)); foreach (KeyValuePair <float, Thing> t in ranges) { yield return(t.Value); } } else { foreach (Thing thing in this.target.Targets(ability, saveablePawn)) { float lengthHorizontalSquared = (saveablePawn.pawn.Position - thing.Position).LengthHorizontalSquared; if ((maximumSquared > 0) && (maximumSquared < lengthHorizontalSquared)) { continue; } if ((minimumSquared > 0) && (minimumSquared > lengthHorizontalSquared)) { continue; } yield return(thing); } } }
public override IEnumerable <Thing> Targets(AbilityDef ability, Saveable_Caster pawn) { if (this.optionalSource == null) { return(Find.ListerPawns.PawnsInFaction(pawn.pawn.Faction).OfType <Thing>()); } else { return(this.Filter(ability, pawn)); } }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { if (this.target == null) { return(ability.target.Targets(ability, pawn).Any()); } else { return(this.target.Targets(ability, pawn).Any()); } }
public override IEnumerable <Thing> Targets(AbilityDef ability, Saveable_Caster pawn) { if (this.optionalSource == null) { return(GenAI.PawnTargetsFor(pawn.pawn.Faction).Cast <Thing>()); } else { return(this.Filter(ability, pawn)); } }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { Brain squad = pawn.pawn.GetSquadBrain(); if (squad == null) { return(true); } else { return(squad.ownedPawns.Sum(i => i.kindDef.combatPower) * this.squadPowerMultiplier < AbilityRequeriment_ColonyBiggerThan.ColonySize()); } }
public Saveable_ExecutionLog GetLog(AbilityDef ability) { foreach (Saveable_ExecutionLog l in this.executionLogs) { if (l.ability == ability) return l; } Saveable_ExecutionLog newLog = new Saveable_ExecutionLog(); newLog.ability = ability; this.executionLogs.Add(newLog); return newLog; }
private bool TryStartNextAbility(Saveable_Caster value, out AbilityDef ability, out List <Thing> targets, out IExposable effectState) { List <KeyValuePair <int, AbilityDef> > priorities = new List <KeyValuePair <int, AbilityDef> >(); foreach (Saveable_ExecutionLog log in value.executionLogs) { if ((!log.ability.races.Contains(value.pawn.def)) || (log.ability.validity == null) || (!log.ability.validity.Sucess(log.ability, value))) { log.isValid = false; continue; } log.isValid = true; if ((log.ability.requeriment != null) && (!log.ability.requeriment.Sucess(log.ability, value))) { continue; } priorities.Add(new KeyValuePair <int, AbilityDef>(log.ability.priority.GetPriority(log.ability, value.pawn), log.ability)); } if (priorities.Any()) { priorities.Sort((x, y) => y.Key.CompareTo(x.Key)); foreach (KeyValuePair <int, AbilityDef> itm in priorities) { effectState = null; targets = null; if (itm.Value.target != null) { targets = itm.Value.target.Targets(itm.Value, value).ToList(); } if (itm.Value.effect.TryStart(itm.Value, value, ref targets, ref effectState)) { ability = itm.Value; return(true); } } } ability = null; effectState = null; targets = null; return(false); }
public override bool TryStart(AbilityDef ability, Saveable_Caster caster, ref List<Thing> target, ref IExposable effectState) { if (!base.TryStart(ability, caster, ref target, ref effectState)) return false; if ((target == null) || (this.items == null) || (!this.items.Any())) return false; target = target.OfType<Pawn>().Where(i => this.items.SelectMany(j => j.from).Contains(i.def)).OfType<Thing>().ToList(); return target.Any(); }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { if (this.items == null) { return(false); } foreach (AbilityRequeriment requeriment in this.items) { if (!requeriment.Sucess(ability, pawn)) { return(false); } } return(true); }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { Saveable_ExecutionLog log = pawn.GetLog(ability); int ticks = this.initial + log.numberOfExecution * this.between; if (this.minimum > 0) { ticks = Math.Max(this.minimum, ticks); } if (this.maximum > 0) { ticks = Math.Min(this.maximum, ticks); } return(log.ticksSinceExecution >= ticks); }
public Saveable_ExecutionLog GetLog(AbilityDef ability) { foreach (Saveable_ExecutionLog l in this.executionLogs) { if (l.ability == ability) { return(l); } } Saveable_ExecutionLog newLog = new Saveable_ExecutionLog(); newLog.ability = ability; this.executionLogs.Add(newLog); return(newLog); }
public override IEnumerable <Thing> Targets(AbilityDef ability, Saveable_Caster pawn) { IEnumerable <Thing> things = Find.ListerThings.ThingsMatching(new ThingRequest() { group = this.group }); if (things == null) { return(AbilityTarget_ThingInCategory.emptyThings); } else { return(things); } }
public override IEnumerable<Thing> Targets(AbilityDef ability, Saveable_Caster saveablePawn) { float maximumSquared = this.maximumRange * this.maximumRange; float minimumSquared = this.minimumRange * this.minimumRange; if (closestFirst) { List<KeyValuePair<float, Thing>> ranges = new List<KeyValuePair<float, Thing>>(); foreach (Thing thing in this.target.Targets(ability, saveablePawn)) { float lengthHorizontalSquared = (saveablePawn.pawn.Position - thing.Position).LengthHorizontalSquared; if ((maximumSquared > 0) && (maximumSquared < lengthHorizontalSquared)) continue; if ((minimumSquared > 0) && (minimumSquared > lengthHorizontalSquared)) continue; ranges.Add(new KeyValuePair<float, Thing>(lengthHorizontalSquared, thing)); } ranges.Sort((x, y) => x.Key.CompareTo(y.Key)); foreach (KeyValuePair<float, Thing> t in ranges) yield return t.Value; } else { foreach (Thing thing in this.target.Targets(ability, saveablePawn)) { float lengthHorizontalSquared = (saveablePawn.pawn.Position - thing.Position).LengthHorizontalSquared; if ((maximumSquared > 0) && (maximumSquared < lengthHorizontalSquared)) continue; if ((minimumSquared > 0) && (minimumSquared > lengthHorizontalSquared)) continue; yield return thing; } } }
public override bool TryStart(AbilityDef ability, Saveable_Caster caster, ref List <Thing> target, ref IExposable effectState) { if (!base.TryStart(ability, caster, ref target, ref effectState)) { return(false); } if ((target == null) || (this.items == null) || (!this.items.Any())) { return(false); } target = target.OfType <Pawn>().Where(i => this.items.SelectMany(j => j.from).Contains(i.def)).OfType <Thing>().ToList(); return(target.Any()); }
public override bool TryStart(AbilityDef ability, Saveable_Caster caster, ref List<Thing> targets, ref IExposable effectState) { if (!base.TryStart(ability, caster, ref targets, ref effectState)) return false; if (targets == null) return false; targets = targets .OfType<Pawn>() .Where(i => i.MaxHitPoints > 0) .Where(i => i.health.summaryHealth.SummaryHealthPercent < this.healthTrashHold) .Cast<Thing>() .ToList(); if (targets.Any()) return true; else return false; }
public override IEnumerable<Thing> Targets(AbilityDef ability, Saveable_Caster pawn) { foreach (Thing thing in this.target.Targets(ability, pawn)) { Pawn thingPawn = thing as Pawn; if (thingPawn != null) { if (this.races.Contains(thingPawn.def)) yield return thing; continue; } Corpse corpsePawn = thing as Corpse; if (corpsePawn != null) { if (this.races.Contains(corpsePawn.innerPawn.def)) yield return thing; continue; } } }
public IEnumerable<Thing> Filter(AbilityDef ability, Saveable_Caster pawn) { foreach (Thing thing in this.optionalSource.Targets(ability, pawn)) { Pawn thingPawn = thing as Pawn; if (thingPawn != null) { if (thingPawn.Faction == pawn.pawn.Faction) yield return thing; continue; } Corpse corpsePawn = thing as Corpse; if (corpsePawn != null) { if (corpsePawn.innerPawn.Faction == pawn.pawn.Faction) yield return thing; continue; } } }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { Brain brain = pawn.pawn.GetSquadBrain(); if (brain == null) return false; MapComponent_Ability mapComponent = MapComponent_Ability.GetOrCreate(); foreach (Pawn p in brain.ownedPawns) { if (p.def.defName == "Ant_Queen") return false; Saveable_Caster save; if (mapComponent.TryGetPawnHability(p, out save)) { if ((save.currentAbility != null) && (save.currentAbility.defName == "AlienEvolveToPrincessAbility")) return false; } } return true; }
public override bool TryStart(AbilityDef ability, Saveable_Caster caster, ref List <Thing> targets, ref IExposable effectState) { if (!base.TryStart(ability, caster, ref targets, ref effectState)) { return(false); } if (targets == null) { return(false); } List <Thing> corpses = AbilityEffect_Revive.SelectCorpses(targets); if (corpses.Any()) { targets = corpses; return(true); } else { return(false); } }
public abstract int GetPriority(AbilityDef ability, Pawn pawn);
public override bool TryStart(AbilityDef ability, Saveable_Caster caster, ref List<Thing> targets, ref IExposable effectState) { if (!base.TryStart(ability, caster, ref targets, ref effectState)) return false; if (targets == null) return false; List<Thing> corpses = AbilityEffect_Revive.SelectCorpses(targets); if (corpses.Any()) { targets = corpses; return true; } else return false; }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { return(pawn.manaValue >= this.value); }
public override IEnumerable<Thing> Targets(AbilityDef ability, Saveable_Caster pawn) { return this.targets.SelectMany(i => i.Targets(ability, pawn)); }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { return pawn.GetLog(ability).numberOfExecution < this.limit; }
public override int GetPriority(AbilityDef ability, Pawn pawn) { return(this.value); }
public override IEnumerable<Thing> Targets(AbilityDef ability, Saveable_Caster pawn) { yield return pawn.pawn; }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { return AbilityRequeriment_ColonyBiggerThan.ColonySize() >= this.value; }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { return pawn.GetLog(ability).ticksSinceExecution >= this.value; }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { return(AbilityRequeriment_ColonyBiggerThan.ColonySize() >= this.value); }
private bool TryStartNextAbility(Saveable_Caster value, out AbilityDef ability, out List<Thing> targets, out IExposable effectState) { List<KeyValuePair<int, AbilityDef>> priorities = new List<KeyValuePair<int, AbilityDef>>(); foreach (Saveable_ExecutionLog log in value.executionLogs) { if ((!log.ability.races.Contains(value.pawn.def)) || (log.ability.validity == null) || (!log.ability.validity.Sucess(log.ability, value))) { log.isValid = false; continue; } log.isValid = true; if ((log.ability.requeriment != null) && (!log.ability.requeriment.Sucess(log.ability, value))) continue; priorities.Add(new KeyValuePair<int, AbilityDef>(log.ability.priority.GetPriority(log.ability, value.pawn), log.ability)); } if (priorities.Any()) { priorities.Sort((x, y) => y.Key.CompareTo(x.Key)); foreach (KeyValuePair<int, AbilityDef> itm in priorities) { effectState = null; targets = null; if (itm.Value.target != null) targets = itm.Value.target.Targets(itm.Value, value).ToList(); if (itm.Value.effect.TryStart(itm.Value, value, ref targets, ref effectState)) { ability = itm.Value; return true; } } } ability = null; effectState = null; targets = null; return false; }
public abstract IEnumerable<Thing> Targets(AbilityDef ability, Saveable_Caster pawn);
public override bool TryStart(AbilityDef ability, Saveable_Caster caster, ref List <Thing> target, ref IExposable effectState) { return(caster.manaValue >= this.manaCost); }
public abstract bool TryStart(AbilityDef ability, Saveable_Caster caster, ref List <Thing> targets, ref IExposable effectState);
public override int GetPriority(AbilityDef ability, Pawn pawn) { return this.value; }
public override IEnumerable <Thing> Targets(AbilityDef ability, Saveable_Caster pawn) { return(this.targets.SelectMany(i => i.Targets(ability, pawn))); }
public abstract bool Sucess(AbilityDef ability, Saveable_Caster pawn);
public override IEnumerable <Thing> Targets(AbilityDef ability, Saveable_Caster pawn) { yield return(pawn.pawn); }
public abstract bool TryStart(AbilityDef ability, Saveable_Caster caster, ref List<Thing> targets, ref IExposable effectState);
public void NotifyCompleted(bool sucess) { foreach (Saveable_Mote mote in this.currentMotes) mote.Completed(this, sucess, i => this.currentMotes.Remove(i)); this.currentAbility = null; this.currentTargets = null; this.effectState = null; }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { return(Rand.Range(0, this.total) < MapComponent_Ability.longTickOffet * this.accepts); }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { return pawn.manaValue <= this.value; }
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { return(pawn.GetLog(ability).numberOfExecution < this.limit); }
public override IEnumerable<Thing> Targets(AbilityDef ability, Saveable_Caster pawn) { return this.target.Targets(ability, pawn).Take(this.count); }
public abstract IEnumerable <Thing> Targets(AbilityDef ability, Saveable_Caster pawn);
public override bool Sucess(AbilityDef ability, Saveable_Caster pawn) { return Rand.Range(0, this.total) < MapComponent_Ability.longTickOffet * this.accepts; }