示例#1
0
        // Token: 0x06000004 RID: 4 RVA: 0x00002458 File Offset: 0x00000658
        internal static void ProximityHediffEffect(Thing thing, Pawn pawn)
        {
            if (pawn.RaceProps.IsMechanoid)
            {
                return;
            }

            var text          = ProximityGet.GetProxHediff(thing.def) ?? "";
            var proxHediffSev = ProximityGet.GetProxHediffSev(thing.def);
            var proxRange     = ProximityGet.GetProxRange(thing.def);

            if (proxHediffSev == 0f || text == "" || !NearThingInRange(thing, pawn, proxRange))
            {
                return;
            }

            var named = DefDatabase <HediffDef> .GetNamed(text, false);

            if (named == null || ProxImmuneTo(pawn, named))
            {
                return;
            }

            var    health = pawn.health;
            Hediff hediff;

            if (health == null)
            {
                hediff = null;
            }
            else
            {
                var hediffSet = health.hediffSet;
                hediff = hediffSet?.GetFirstHediffOfDef(named);
            }

            var hediff2 = hediff;

            if (hediff2 != null)
            {
                hediff2.Severity += proxHediffSev;
                return;
            }

            var hediff3 = HediffMaker.MakeHediff(named, pawn);

            hediff3.Severity = proxHediffSev;
            pawn.health.AddHediff(hediff3);
        }
示例#2
0
        // Token: 0x06000017 RID: 23 RVA: 0x000030FC File Offset: 0x000012FC
        public override void CompTick()
        {
            if (Find.TickManager.TicksGame <= ProxTick)
            {
                return;
            }

            ProximityStatReset(Pawn);
            if (Pawn.Map != null)
            {
                var list = GenRadial
                           .RadialDistinctThingsAround(Pawn.Position, Pawn.Map, ProxGlobals.closeRange, true).ToList();
                if (list.Count > 0)
                {
                    foreach (var thing in list)
                    {
                        if (!ProxGlobals.IsNearThingValid(thing, Pawn) || !ProxGlobals.NearThingEffects(thing, Pawn))
                        {
                            continue;
                        }

                        var proxRange = ProximityGet.GetProxRange(thing.def);
                        if (!ProxGlobals.NearThingInRange(thing, Pawn, proxRange))
                        {
                            continue;
                        }

                        ProxGlobals.ProximityHediffEffect(thing, Pawn);
                        ProximityStatSet(thing, Pawn);
                    }
                }

                if (ProxGlobals.UseTerrain)
                {
                    var list2 = GenRadial.RadialCellsAround(Pawn.Position, ProxGlobals.closeRange, true).ToList();
                    if (list2.Count > 0)
                    {
                        for (var j = 0; j < list2.Count; j++)
                        {
                            var terrainDef = list2[j].InBounds(Pawn.Map) ? list2[j].GetTerrain(Pawn.Map) : null;
                            if (terrainDef == null || !list2[j].InBounds(Pawn.Map) ||
                                !ProxGlobals.IsTerrainValid(terrainDef, Pawn) ||
                                !ProxGlobals.TerrainEffects(terrainDef, list2[j], Pawn))
                            {
                                continue;
                            }

                            var tproxRange = ProximityGet.GetTProxRange(terrainDef);
                            if (!ProxGlobals.TerrainInRange(terrainDef, list2[j], Pawn, tproxRange))
                            {
                                continue;
                            }

                            ProxGlobals.ProximityTerrainHediffEffect(terrainDef, list2[j], Pawn);
                            ProximityTStatSet(terrainDef, list2[j], Pawn);
                        }
                    }
                }
            }

            ProxTick = Find.TickManager.TicksGame + ProxGlobals.ExtendTicks();
        }