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)
 {
     if (this.optionalSource == null)
         return Find.ListerPawns.PawnsInFaction(pawn.pawn.Faction).OfType<Thing>();
     else
         return this.Filter(ability, pawn);
 }
Example #3
0
        public override void OnSucessfullCast(Saveable_Caster caster, IEnumerable<Thing> targets, IExposable effectState)
        {
            float exceedPower = this.totalPower;
            foreach (Pawn target in targets.OfType<Pawn>())
            {
                float pawnAvailPower = this.targetPower;

                if (pawnAvailPower + exceedPower >= this.treatLocalInjuryPowerUse)
                {
                    foreach (Hediff_Injury toTreat in target.health.hediffSet.GetInjuriesTreatable().OrderByDescending(i => i.Severity))
                    {
                        pawnAvailPower -= this.treatLocalInjuryPowerUse;

                        HediffComp_Tendable hediffComp_Treatable = toTreat.TryGetComp<HediffComp_Tendable>();
                        if (hediffComp_Treatable == null)
                            Log.Error("Tried to treat " + toTreat + " which does not have a HediffComp_Tendable");
                        else
                            hediffComp_Treatable.CompTreated(0.3f, 1);

                        Brain brain = caster.pawn.GetSquadBrain();
                        if ((brain != null) &&
                            (!target.Downed) &&
                            (target.GetSquadBrain() == null))
                            brain.AddPawn(target);

                        if (pawnAvailPower < 0)
                        {
                            exceedPower += pawnAvailPower;
                            pawnAvailPower = 0;
                        }

                        if (pawnAvailPower + exceedPower < this.treatLocalInjuryPowerUse)
                            break;
                    }
                }

                if (pawnAvailPower + exceedPower >= this.healLocalInjuryPowerUse)
                {
                    foreach (Hediff_Injury toHeal in target.health.hediffSet.hediffs.OfType<Hediff_Injury>()
                        .Where(i => i.IsTendedAndHealing() && (i.Severity != 0.0f))
                        .OrderByDescending(i => i.Severity))
                    {
                        float maximum = ((pawnAvailPower + exceedPower) / this.healLocalInjuryPowerUse);
                        maximum = Math.Min(maximum, toHeal.Severity);

                        toHeal.DirectHeal(maximum);

                        pawnAvailPower -= maximum * this.healLocalInjuryPowerUse;
                        if (pawnAvailPower < 0)
                        {
                            exceedPower += pawnAvailPower;
                            pawnAvailPower = 0;
                        }

                        if (pawnAvailPower + exceedPower < this.healLocalInjuryPowerUse)
                            break;
                    }
                }
            }
        }
 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();
 }
Example #5
0
        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);
            }
        }
Example #6
0
        public override void OnSucessfullCast(Saveable_Caster pawn, IEnumerable <Thing> targets, IExposable effectState)
        {
            List <Pawn> newPawns = new List <Pawn>();

            foreach (PawnKindDef pawnKind in this.pawnKinds)
            {
                Pawn    newPawn = PawnGenerator.GeneratePawn(pawnKind, pawn.pawn.Faction);
                IntVec3 loc     = CellFinder.RandomClosewalkCellNear(pawn.pawn.Position, this.range);
                GenSpawn.Spawn(newPawn, loc);
                newPawns.Add(newPawn);

                if (this.spawnedMote != null)
                {
                    this.spawnedMote.AbilityStarted(pawn, newPawn);
                }
            }

            Brain brain = pawn.pawn.GetSquadBrain();

            if (brain == null)
            {
                StateGraph squadBrainStateGraph = GraphMaker.AssaultColonyGraph(pawn.pawn.Faction, false, false);
                newPawns.Insert(0, pawn.pawn);
                BrainMaker.MakeNewBrain(pawn.pawn.Faction, squadBrainStateGraph, newPawns);
            }
            else
            {
                foreach (Pawn newPawn in newPawns)
                {
                    brain.AddPawn(newPawn);
                }
            }
        }
Example #7
0
 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 void OnSucessfullCast(Saveable_Caster caster, IEnumerable <Thing> targets, IExposable effectState)
        {
            MapComponent_Ability component = MapComponent_Ability.GetOrCreate();

            foreach (Pawn target in targets)
            {
                AbilityEffect_UtilityChangeKind evolveItem = this.items.First(i => i.from.Contains(target.def));


                Brain brain = target.GetSquadBrain();
                foreach (PawnKindDef kind in evolveItem.to)
                {
                    Pawn newPawn = AbilityEffect_Revive.Copy(caster.pawn, kind, target.Faction);
                    GenSpawn.Spawn(newPawn, target.Position);

                    if (brain != null)
                    {
                        brain.AddPawn(newPawn);
                    }
                }

                Building building = StoreUtility.StoringBuilding(target);
                if (building != null)
                {
                    ((Building_Storage)building).Notify_LostThing(target);
                }
                target.Destroy(DestroyMode.Vanish);
            }
        }
        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;
                }
            }
        }
Example #10
0
        internal void ReplacePawnAbility(Saveable_Caster oldSavedPawn, Pawn newPawn)
        {
            this.pawnCache.Remove(oldSavedPawn);

            Saveable_Caster newSavedPawn = this.GetPawnHabilty(newPawn);

            foreach (Saveable_ExecutionLog oldLog in oldSavedPawn.executionLogs)
            {
                bool equals = false;
                foreach (Saveable_ExecutionLog newLog in newSavedPawn.executionLogs)
                {
                    if (oldLog.ability == newLog.ability)
                    {
                        equals = true;
                        newLog.numberOfExecution   = oldLog.numberOfExecution;
                        newLog.ticksSinceExecution = oldLog.ticksSinceExecution;
                        break;
                    }
                }

                if (!equals)
                {
                    newSavedPawn.executionLogs.Add(oldLog);
                }
            }
        }
Example #11
0
        public override void OnSucessfullCast(Saveable_Caster pawn, IEnumerable<Thing> targets, IExposable effectState)
        {
            List<Pawn> newPawns = new List<Pawn>();
            foreach (PawnKindDef pawnKind in this.pawnKinds)
            {
                Pawn newPawn = PawnGenerator.GeneratePawn(pawnKind, pawn.pawn.Faction);
                IntVec3 loc = CellFinder.RandomClosewalkCellNear(pawn.pawn.Position, this.range);
                GenSpawn.Spawn(newPawn, loc);
                newPawns.Add(newPawn);

                if (this.spawnedMote != null)
                    this.spawnedMote.AbilityStarted(pawn, newPawn);
            }

            Brain brain = pawn.pawn.GetSquadBrain();
            if (brain == null)
            {
                StateGraph squadBrainStateGraph = GraphMaker.AssaultColonyGraph(pawn.pawn.Faction, false, false);
                newPawns.Insert(0, pawn.pawn);
                BrainMaker.MakeNewBrain(pawn.pawn.Faction, squadBrainStateGraph, newPawns);
            }
            else
                foreach (Pawn newPawn in newPawns)
                    brain.AddPawn(newPawn);
        }
Example #12
0
        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 float Replenish(Saveable_Caster pawn)
 {
     if (pawn.pawn.Dead)
         return this.ammountDead;
     if (pawn.pawn.Downed)
         return this.ammountDowned;
     return this.ammount;
 }
 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;
 }
Example #15
0
        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);
        }
Example #16
0
 public JobDriverHolder(AbilityEffect_Cast owner, JobDriver_AbilityEffect jobDriver, Saveable_Caster caster, IEnumerable <Thing> targets, IExposable effectState)
 {
     this.owner       = owner;
     this.jobDriver   = jobDriver;
     this.effectState = effectState;
     this.caster      = caster;
     this.targets     = targets;
 }
 public override void OnSucessfullCast(Saveable_Caster caster, IEnumerable <Thing> targets, IExposable effectState)
 {
     foreach (Corpse corpse in targets)
     {
         corpse.def.fillPercent = 0.75f;
         Find.CoverGrid.Register(corpse);
     }
 }
Example #18
0
        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 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 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 override bool Visible(Saveable_Caster pawn)
 {
     if (pawn.pawn.Dead)
         return this.ammountDead != 0;
     else
         if (pawn.pawn.Downed)
             return this.ammountDowned != 0;
         else
             return this.ammount != 0;
 }
Example #23
0
        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());
     }
 }
Example #26
0
 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));
     }
 }
Example #27
0
 public override float Replenish(Saveable_Caster pawn)
 {
     if (pawn.pawn.Dead)
     {
         return(this.ammountDead);
     }
     if (pawn.pawn.Downed)
     {
         return(this.ammountDowned);
     }
     return(this.ammount);
 }
Example #28
0
        public override void AbilityStarted(Saveable_Caster caster, Thing target)
        {
            Saveable_Mote_Default mote = new Saveable_Mote_Default();

            mote.target        = target;
            mote.currentColor  = this.color;
            mote.alphaChange   = 0.0f;
            mote.exactAlpha    = 0.5f;
            mote.exactPosition = target.DrawPos;
            mote.exactScale    = new Vector3(1, 1, 1);
            caster.AddMote(mote);
        }
Example #29
0
        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());
            }
        }
Example #30
0
        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);
        }
Example #31
0
 public override void Completed(Saveable_Caster caster, bool sucess, Action <Saveable_Mote> terminated)
 {
     this.terminated  = terminated;
     this.exactAlpha  = 1.0f;
     this.alphaChange = -1.0f / 64.0f;
     if (sucess)
     {
         this.currentColor = Color.green;
     }
     else
     {
         this.currentColor = Color.red;
     }
 }
Example #32
0
        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();
        }
Example #33
0
        public bool TryGetPawnHability(Pawn pawn, out Saveable_Caster value)
        {
            foreach (Saveable_Caster caster in this.pawnCache)
            {
                if (caster.pawn == pawn)
                {
                    value = caster;
                    return(true);
                }
            }

            value = null;
            return(false);
        }
Example #34
0
        public override ThinkResult TryIssueJobPackage(Pawn pawn)
        {
            Saveable_Caster cachePawn = MapComponent_Ability.GetOrCreate().GetPawnHabilty(pawn);

            if (cachePawn.whaitingForThinkNode)
            {
                cachePawn.whaitingForThinkNode = false;
                Saveable_ExecutionLog log = cachePawn.GetLog(cachePawn.currentAbility);
                log.numberOfExecution++;
                log.ticksSinceExecution = 0;
                return(new ThinkResult(new Job(cachePawn.currentAbility.effect.StartJob(cachePawn.effectState)), this));
            }
            return(ThinkResult.NoJob);
        }
 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);
        }
Example #37
0
        public void StartCast(Saveable_Caster caster, IEnumerable <Thing> targets)
        {
            caster.manaValue -= this.manaCost;
            if (this.casterMote != null)
            {
                this.casterMote.AbilityStarted(caster, caster.pawn);
            }

            if (this.targetMote != null)
            {
                foreach (Thing target in targets)
                {
                    this.targetMote.AbilityStarted(caster, target);
                }
            }
        }
        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);
            }
        }
Example #39
0
 public override bool Visible(Saveable_Caster pawn)
 {
     if (pawn.pawn.Dead)
     {
         return(this.ammountDead != 0);
     }
     else
     if (pawn.pawn.Downed)
     {
         return(this.ammountDowned != 0);
     }
     else
     {
         return(this.ammount != 0);
     }
 }
Example #40
0
        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;
                }
            }
        }
Example #41
0
        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());
        }
Example #42
0
        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;
                }
            }
        }
Example #44
0
        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;
                }
            }
        }
Example #45
0
        protected override void FillTab()
        {
            Saveable_Caster pawn = MapComponent_Ability.GetOrCreate().GetPawnHabilty(this.HabilityPawn());
            float           num  = 10;
            Rect            rect;

            Text.Font = GameFont.Small;

            if (this.ShowMana(pawn))
            {
                rect        = new Rect(10, num, this.size.x - 20 - 30, 22);
                Text.Anchor = TextAnchor.MiddleLeft;
                GUI.DrawTexture(rect, BaseContent.BlackTex);
                float mana = pawn.manaValue;
                GUI.DrawTexture(new Rect(rect.xMin, rect.yMin, rect.width * mana / 100, rect.height), ITab_Pawn_Ability.manaColor);
                GUI.Label(new Rect(rect.xMin + 5, rect.yMin, rect.width - 10, rect.height), "AbilityPack.Mana".Translate() + mana.ToString("N1"));
                num += 22 + 10;
            }

            if (this.ShowAbility(pawn))
            {
                rect = new Rect(10, num, this.size.x - 20, this.size.y - 10 - num);

                GUI.color = abilityLabelColor;

                Text.Anchor = TextAnchor.LowerLeft;
                Widgets.Label(new Rect(15, num, this.size.x - 20, 22f), "AbilityPack.Abilities".Translate());
                num += 22;
                this.WriteLine(ref num, "AbilityPack.ExecutionNumber".Translate(), "AbilityPack.TicksSinseExecution".Translate(), "AbilityPack.AbilityName".Translate());

                foreach (Saveable_ExecutionLog log in pawn.executionLogs.Where(i => i.isValid && i.ability.visible))
                {
                    this.WriteLine(ref num, log.numberOfExecution.ToString(), log.ticksSinceExecution.ToString(), log.ability.label);
                }

                Text.Anchor = TextAnchor.UpperLeft;
            }
        }
Example #46
0
        public override void OnSucessfullCast(Saveable_Caster caster, IEnumerable<Thing> targets, IExposable effectState)
        {
            MapComponent_Ability component = MapComponent_Ability.GetOrCreate();
            foreach (Pawn target in targets)
            {
                AbilityEffect_UtilityChangeKind evolveItem = this.items.First(i => i.from.Contains(target.def));

                Brain brain = target.GetSquadBrain();
                foreach (PawnKindDef kind in evolveItem.to)
                {
                    Pawn newPawn = AbilityEffect_Revive.Copy(caster.pawn, kind, target.Faction);
                    GenSpawn.Spawn(newPawn, target.Position);

                    if (brain != null)
                        brain.AddPawn(newPawn);
                }

                Building building = StoreUtility.StoringBuilding(target);
                if (building != null)
                    ((Building_Storage)building).Notify_LostThing(target);
                target.Destroy(DestroyMode.Vanish);
            }
        }
Example #47
0
        public Saveable_Caster GetPawnHabilty(Pawn pawn)
        {
            Saveable_Caster value;

            if (!this.TryGetPawnHability(pawn, out value))
            {
                if (this.manaCache == null)
                {
                    this.manaCache = new Dictionary <ThingDef, ManaDef>();
                    foreach (ManaDef ability in DefDatabase <ManaDef> .AllDefs)
                    {
                        foreach (ThingDef race in ability.races)
                        {
                            this.manaCache.Add(race, ability);
                        }
                    }
                }


                value      = new Saveable_Caster();
                value.pawn = pawn;
                this.pawnCache.Add(value);
                this.InjectTab(pawn.def);

                if (this.manaCache.TryGetValue(pawn.def, out value.manaDef))
                {
                    value.manaValue = value.manaDef.initial;
                }

                foreach (AbilityDef ability in this.GetAllowedAbilities(value.pawn))
                {
                    value.GetLog(ability);
                }
            }

            return(value);
        }
        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;
        }
Example #49
0
        private void NormalTick(Saveable_Caster value)
        {
            Pawn pawn = value.pawn;

            if (value.manaDef != null)
            {
                value.manaValue += value.manaDef.replenish.Replenish(value);
                value.manaValue  = Mathf.Clamp(value.manaValue, 0, 100);
            }

            AbilityDef executingAbility;

            if ((pawn.CurJob != null) &&
                ((pawn.CurJob.def.defName == "AbilityEffect_JobDef") ||
                 (pawn.CurJob.def.defName == "AbilityEffect_JobDef_Interruptable")))
            {
                executingAbility = value.currentAbility;
            }
            else
            {
                executingAbility = null;
            }

            foreach (Saveable_ExecutionLog log in value.executionLogs)
            {
                if (log.ability == executingAbility)
                {
                    log.ticksSinceExecution = 0;
                }
                else
                if (log.isValid)
                {
                    log.ticksSinceExecution++;
                }
            }
        }
Example #50
0
 private bool ShowMana(Saveable_Caster saveable)
 {
     return (saveable.manaDef != null) &&
         (saveable.manaDef.replenish.Visible(saveable));
 }
Example #51
0
 public abstract float Replenish(Saveable_Caster pawn);
Example #52
0
 public override void ExecuteWhileIncapacitated(Saveable_Caster caster, IEnumerable<Thing> targets, IExposable effectState)
 {
     AbilityEffect_RandomState typedState = (AbilityEffect_RandomState)effectState;
     this.items[typedState.item].ExecuteWhileIncapacitated(caster, targets, typedState.effectState);
 }
 public override bool Sucess(AbilityDef ability, Saveable_Caster pawn)
 {
     return pawn.manaValue <= this.value;
 }
Example #54
0
 public override IEnumerable<Thing> Targets(AbilityDef ability, Saveable_Caster pawn)
 {
     return this.target.Targets(ability, pawn).Take(this.count);
 }
Example #55
0
        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;
        }
Example #56
0
        public override void OnSucessfullCast(Saveable_Caster caster, IEnumerable<Thing> targets, IExposable effectState)
        {
            MapComponent_Ability component = MapComponent_Ability.GetOrCreate();

            Brain brain = caster.pawn.GetSquadBrain();

            foreach (Corpse corpse in targets)
            {
                List<PawnKindDef> newKinds = new List<PawnKindDef>();
                if (this.changes != null)
                {
                    AbilityEffect_UtilityChangeKind kind = this.changes.FirstOrDefault(i => i.from.Contains(corpse.innerPawn.def));
                    if (kind != null)
                        newKinds.AddRange(kind.to);
                    else
                        newKinds.Add(corpse.innerPawn.kindDef);
                }
                else
                    newKinds.Add(corpse.innerPawn.kindDef);

                foreach (PawnKindDef kindDef in newKinds)
                {
                    Pawn newPawn = AbilityEffect_Revive.Copy(caster.pawn, kindDef, this.changeFaction ? caster.pawn.Faction : corpse.innerPawn.Faction);

                    if (corpse.innerPawn == caster.pawn)
                        component.ReplacePawnAbility(caster, newPawn);

                    IntVec3 position = corpse.Position;

                    GenSpawn.Spawn(newPawn, position);

                    if ((newPawn.Faction == caster.pawn.Faction) &&
                        (brain != null))
                        brain.AddPawn(newPawn);
                }

                Building building = StoreUtility.StoringBuilding(corpse);
                if (building != null)
                    ((Building_Storage)building).Notify_LostThing(corpse);
                corpse.Destroy(DestroyMode.Vanish);

                //if (this.healUntil > 0)
                //{
                //    HediffSet hediffSet = newPawn.healthTracker.hediffSet;
                //    while ((newPawn.healthTracker.summaryHealth.SummaryHealthPercent >= this.healUntil) &&
                //        (AbilityEffect_Revive.HittablePartsViolence(hediffSet).Any<BodyPartRecord>()))
                //    {
                //        BodyPartRecord bodyPartRecord = AbilityEffect_Revive.HittablePartsViolence(hediffSet).RandomElementByWeight((BodyPartRecord x) => x.absoluteFleshCoverage);
                //        int amount = Rand.RangeInclusive(8, 25);
                //        DamageDef def;
                //        if (bodyPartRecord.depth == BodyPartDepth.Outside)
                //            def = HealthUtility.RandomViolenceDamageType();
                //        else
                //            def = DamageDefOf.Blunt;
                //        DamageInfo dinfo = new DamageInfo(def, amount, null, new BodyPartDamageInfo?(new BodyPartDamageInfo(bodyPartRecord, false, (List<HediffDef>)null)), null);
                //        newPawn.TakeDamage(dinfo);
                //    }
                //}
            }
        }
Example #57
0
 public override IEnumerable<Toil> MakeNewToils(JobDriver_AbilityEffect jobDriver, Saveable_Caster caster, IEnumerable<Thing> targets, IExposable effectState)
 {
     AbilityEffect_RandomState typedState = (AbilityEffect_RandomState)effectState;
     return this.items[typedState.item].MakeNewToils(jobDriver, caster, targets, typedState.effectState);
 }
Example #58
0
 public abstract bool TryStart(AbilityDef ability, Saveable_Caster caster, ref List<Thing> targets, ref IExposable effectState);
Example #59
0
 public abstract bool Visible(Saveable_Caster pawn);
Example #60
0
 private bool ShowAbility(Saveable_Caster saveable)
 {
     return saveable.executionLogs.Where(i => i.isValid && i.ability.visible).Any();
 }