public Effecter(EffecterDef def)
 {
     this.def = def;
     for (int i = 0; i < def.children.Count; i++)
     {
         children.Add(def.children[i].Spawn(this));
     }
 }
Beispiel #2
0
        private void AddOrMaintain(EffecterDef def)
        {
            for (int i = 0; i < this.pairs.Count; i++)
            {
                if (this.pairs[i].def == def)
                {
                    this.pairs[i].Maintain();
                    return;
                }
            }
            PawnStatusEffecters.LiveEffecter liveEffecter = FullPool <PawnStatusEffecters.LiveEffecter> .Get();

            liveEffecter.def = def;
            liveEffecter.Maintain();
            this.pairs.Add(liveEffecter);
        }
Beispiel #3
0
        private void AddOrMaintain(EffecterDef def)
        {
            for (int i = 0; i < pairs.Count; i++)
            {
                if (pairs[i].def == def)
                {
                    pairs[i].Maintain();
                    return;
                }
            }
            LiveEffecter liveEffecter = FullPool <LiveEffecter> .Get();

            liveEffecter.def = def;
            liveEffecter.Maintain();
            pairs.Add(liveEffecter);
        }
        private static void TriggerEffecter()
        {
            List <DebugMenuOption> list = new List <DebugMenuOption>();
            List <EffecterDef>     allDefsListForReading = DefDatabase <EffecterDef> .AllDefsListForReading;

            for (int i = 0; i < allDefsListForReading.Count; i++)
            {
                EffecterDef localDef = allDefsListForReading[i];
                list.Add(new DebugMenuOption(localDef.defName, DebugMenuOptionMode.Tool, delegate
                {
                    Effecter effecter = localDef.Spawn();
                    effecter.Trigger(new TargetInfo(UI.MouseCell(), Find.CurrentMap), new TargetInfo(UI.MouseCell(), Find.CurrentMap));
                    effecter.Cleanup();
                }));
            }
            Find.WindowStack.Add(new Dialog_DebugOptionListLister(list));
        }
Beispiel #5
0
        public void EffectersTick()
        {
            List <Hediff> hediffs = this.pawn.health.hediffSet.hediffs;

            for (int i = 0; i < hediffs.Count; i++)
            {
                HediffComp_Effecter hediffComp_Effecter = hediffs[i].TryGetComp <HediffComp_Effecter>();
                if (hediffComp_Effecter != null)
                {
                    EffecterDef effecterDef = hediffComp_Effecter.CurrentStateEffecter();
                    if (effecterDef != null)
                    {
                        this.AddOrMaintain(effecterDef);
                    }
                }
            }
            if (this.pawn.mindState.mentalStateHandler.CurState != null)
            {
                EffecterDef effecterDef2 = this.pawn.mindState.mentalStateHandler.CurState.CurrentStateEffecter();
                if (effecterDef2 != null)
                {
                    this.AddOrMaintain(effecterDef2);
                }
            }
            for (int j = this.pairs.Count - 1; j >= 0; j--)
            {
                if (this.pairs[j].Expired)
                {
                    this.pairs[j].Cleanup();
                    this.pairs.RemoveAt(j);
                }
                else
                {
                    this.pairs[j].Tick(this.pawn);
                }
            }
        }
Beispiel #6
0
        public void EffectersTick()
        {
            List <Hediff> hediffs = pawn.health.hediffSet.hediffs;

            for (int i = 0; i < hediffs.Count; i++)
            {
                HediffComp_Effecter hediffComp_Effecter = hediffs[i].TryGetComp <HediffComp_Effecter>();
                if (hediffComp_Effecter != null)
                {
                    EffecterDef effecterDef = hediffComp_Effecter.CurrentStateEffecter();
                    if (effecterDef != null)
                    {
                        AddOrMaintain(effecterDef);
                    }
                }
            }
            if (pawn.mindState.mentalStateHandler.CurState != null)
            {
                EffecterDef effecterDef2 = pawn.mindState.mentalStateHandler.CurState.CurrentStateEffecter();
                if (effecterDef2 != null)
                {
                    AddOrMaintain(effecterDef2);
                }
            }
            for (int num = pairs.Count - 1; num >= 0; num--)
            {
                if (pairs[num].Expired)
                {
                    pairs[num].Cleanup();
                    pairs.RemoveAt(num);
                }
                else
                {
                    pairs[num].Tick(pawn);
                }
            }
        }
Beispiel #7
0
        private DamageResult ApplyToPawn(DamageInfo dinfo, Pawn pawn)
        {
            DamageResult damageResult = new DamageResult();

            if (dinfo.Amount <= 0f)
            {
                return(damageResult);
            }
            if (!DebugSettings.enablePlayerDamage && pawn.Faction == Faction.OfPlayer)
            {
                return(damageResult);
            }
            Map  mapHeld = pawn.MapHeld;
            bool spawnedOrAnyParentSpawned = pawn.SpawnedOrAnyParentSpawned;

            if (dinfo.AllowDamagePropagation && dinfo.Amount >= (float)dinfo.Def.minDamageToFragment)
            {
                int num = Rand.RangeInclusive(2, 4);
                for (int i = 0; i < num; i++)
                {
                    DamageInfo dinfo2 = dinfo;
                    dinfo2.SetAmount(dinfo.Amount / (float)num);
                    ApplyDamageToPart(dinfo2, pawn, damageResult);
                }
            }
            else
            {
                ApplyDamageToPart(dinfo, pawn, damageResult);
                ApplySmallPawnDamagePropagation(dinfo, pawn, damageResult);
            }
            if (damageResult.wounded)
            {
                PlayWoundedVoiceSound(dinfo, pawn);
                pawn.Drawer.Notify_DamageApplied(dinfo);
            }
            if (damageResult.headshot && pawn.Spawned)
            {
                IntVec3 position  = pawn.Position;
                float   x         = (float)position.x + 1f;
                IntVec3 position2 = pawn.Position;
                float   y         = (float)position2.y;
                IntVec3 position3 = pawn.Position;
                MoteMaker.ThrowText(new Vector3(x, y, (float)position3.z + 1f), pawn.Map, "Headshot".Translate(), Color.white);
                if (dinfo.Instigator != null)
                {
                    (dinfo.Instigator as Pawn)?.records.Increment(RecordDefOf.Headshots);
                }
            }
            if ((damageResult.deflected || damageResult.diminished) && spawnedOrAnyParentSpawned)
            {
                EffecterDef effecterDef = damageResult.deflected ? ((damageResult.deflectedByMetalArmor && dinfo.Def.canUseDeflectMetalEffect) ? ((dinfo.Def != DamageDefOf.Bullet) ? EffecterDefOf.Deflect_Metal : EffecterDefOf.Deflect_Metal_Bullet) : ((dinfo.Def != DamageDefOf.Bullet) ? EffecterDefOf.Deflect_General : EffecterDefOf.Deflect_General_Bullet)) : ((!damageResult.diminishedByMetalArmor) ? EffecterDefOf.DamageDiminished_General : EffecterDefOf.DamageDiminished_Metal);
                if (pawn.health.deflectionEffecter == null || pawn.health.deflectionEffecter.def != effecterDef)
                {
                    if (pawn.health.deflectionEffecter != null)
                    {
                        pawn.health.deflectionEffecter.Cleanup();
                        pawn.health.deflectionEffecter = null;
                    }
                    pawn.health.deflectionEffecter = effecterDef.Spawn();
                }
                pawn.health.deflectionEffecter.Trigger(pawn, dinfo.Instigator ?? pawn);
                if (damageResult.deflected)
                {
                    pawn.Drawer.Notify_DamageDeflected(dinfo);
                }
            }
            if (!damageResult.deflected && spawnedOrAnyParentSpawned)
            {
                ImpactSoundUtility.PlayImpactSound(pawn, dinfo.Def.impactSoundType, mapHeld);
            }
            return(damageResult);
        }
Beispiel #8
0
 public void Reset()
 {
     this.def              = null;
     this.effecter         = null;
     this.lastMaintainTick = -1;
 }
Beispiel #9
0
 public void Reset()
 {
     def              = null;
     effecter         = null;
     lastMaintainTick = -1;
 }