コード例 #1
0
ファイル: DamageWorker.cs プロジェクト: xywf221/RimThreaded
        public static void ExplosionDamageThing(DamageWorker __instance, Explosion explosion, Thing t, List <Thing> damagedThings, List <Thing> ignoredThings, IntVec3 cell)
        {
            if (t.def.category == ThingCategory.Mote || t.def.category == ThingCategory.Ethereal || damagedThings.Contains(t))
            {
                return;
            }

            damagedThings.Add(t);
            if (ignoredThings != null && ignoredThings.Contains(t))
            {
                return;
            }

            if (__instance.def == DamageDefOf.Bomb && t.def == ThingDefOf.Fire && !t.Destroyed)
            {
                t.Destroy();
                return;
            }

            DamageInfo dinfo = new DamageInfo(angle: (!(t.Position == explosion.Position)) ? (t.Position - explosion.Position).AngleFlat : ((float)Rand.RangeInclusive(0, 359)), def: __instance.def, amount: explosion.GetDamageAmountAt(cell), armorPenetration: explosion.GetArmorPenetrationAt(cell), instigator: explosion.instigator, hitPart: null, weapon: explosion.weapon, category: DamageInfo.SourceCategory.ThingOrUnknown, intendedTarget: explosion.intendedTarget);

            if (__instance.def.explosionAffectOutsidePartsOnly)
            {
                dinfo.SetBodyRegion(BodyPartHeight.Undefined, BodyPartDepth.Outside);
            }

            BattleLogEntry_ExplosionImpact battleLogEntry_ExplosionImpact = null;
            Pawn pawn = t as Pawn;

            if (pawn != null)
            {
                battleLogEntry_ExplosionImpact = new BattleLogEntry_ExplosionImpact(explosion.instigator, t, explosion.weapon, explosion.projectile, __instance.def);
                Find.BattleLog.Add(battleLogEntry_ExplosionImpact);
            }

            DamageResult damageResult = t.TakeDamage(dinfo);

            damageResult.AssociateWithLog(battleLogEntry_ExplosionImpact);
            if (pawn != null && damageResult.wounded && pawn.stances != null)
            {
                pawn.stances.StaggerFor(95);
            }
        }
コード例 #2
0
 protected virtual void ExplosionDamageThing(Explosion explosion, Thing t, List <Thing> damagedThings, IntVec3 cell)
 {
     if (t.def.category != ThingCategory.Mote && t.def.category != ThingCategory.Ethereal && !damagedThings.Contains(t))
     {
         damagedThings.Add(t);
         if (def == DamageDefOf.Bomb && t.def == ThingDefOf.Fire && !t.Destroyed)
         {
             t.Destroy();
         }
         else
         {
             float      num                = (!(t.Position == explosion.Position)) ? (t.Position - explosion.Position).AngleFlat : ((float)Rand.RangeInclusive(0, 359));
             DamageDef  damageDef          = def;
             float      amount             = (float)explosion.GetDamageAmountAt(cell);
             float      armorPenetrationAt = explosion.GetArmorPenetrationAt(cell);
             float      angle              = num;
             Thing      instigator         = explosion.instigator;
             ThingDef   weapon             = explosion.weapon;
             DamageInfo dinfo              = new DamageInfo(damageDef, amount, armorPenetrationAt, angle, instigator, null, weapon, DamageInfo.SourceCategory.ThingOrUnknown, explosion.intendedTarget);
             if (def.explosionAffectOutsidePartsOnly)
             {
                 dinfo.SetBodyRegion(BodyPartHeight.Undefined, BodyPartDepth.Outside);
             }
             BattleLogEntry_ExplosionImpact battleLogEntry_ExplosionImpact = null;
             Pawn pawn = t as Pawn;
             if (pawn != null)
             {
                 battleLogEntry_ExplosionImpact = new BattleLogEntry_ExplosionImpact(explosion.instigator, t, explosion.weapon, explosion.projectile, def);
                 Find.BattleLog.Add(battleLogEntry_ExplosionImpact);
             }
             DamageResult damageResult = t.TakeDamage(dinfo);
             damageResult.AssociateWithLog(battleLogEntry_ExplosionImpact);
             if (pawn != null && damageResult.wounded && pawn.stances != null)
             {
                 pawn.stances.StaggerFor(95);
             }
         }
     }
 }