コード例 #1
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);
            }
        }
コード例 #2
0
        public static MapComponent_Ability GetOrCreate()
        {
            MapComponent_Ability ret = Find.Map.components.OfType<MapComponent_Ability>().FirstOrDefault();
            if (ret == null)
            {
                ret = new MapComponent_Ability();
                Find.Map.components.Add(ret);
            }

            return ret;
        }
コード例 #3
0
        public static MapComponent_Ability GetOrCreate()
        {
            MapComponent_Ability ret = Find.Map.components.OfType <MapComponent_Ability>().FirstOrDefault();

            if (ret == null)
            {
                ret = new MapComponent_Ability();
                Find.Map.components.Add(ret);
            }

            return(ret);
        }
コード例 #4
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);
        }
コード例 #5
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;
            }
        }
コード例 #6
0
        protected override IEnumerable <Toil> MakeNewToils()
        {
            Saveable_Caster caster = MapComponent_Ability.GetOrCreate().GetPawnHabilty(this.pawn);

            return(caster.currentAbility.effect.MakeNewToils(this, caster, caster.Targets, caster.effectState));
        }
コード例 #7
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);
                //    }
                //}
            }
        }
コード例 #8
0
 public void AddMote(Saveable_Mote mote)
 {
     mote.InitializeMote(ref mote.mote);
     this.currentMotes.Add(mote);
     MapComponent_Ability.GetOrCreate().completingMotes.Add(mote);
 }