From 608266e6144b592055523874468237f25674932a Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Wed, 20 Aug 2025 14:33:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/WulaFallenEmpire.dll | Bin 228352 -> 227840 bytes 1.6/1.6/Defs/Effects/Mote_Wula.xml | 24 + ...n_Homing_Examples_Bullet_CruiseMissile.xml | 127 ---- ...A_Weapon_Homing_Examples_Bullet_Homing.xml | 42 +- ...Homing_Examples_Bullet_HomingExplosive.xml | 51 +- .../EventDef_WULA_FE_Spiritualist.xml | 2 +- .../WulaFallenEmpire/HomingProjectileDef.cs | 26 +- Source/WulaFallenEmpire/Projectile_Homing.cs | 595 +++++++++--------- .../WulaFallenEmpire/Projectile_WulaBeam.cs | 45 +- .../Projectile_WulaPenetrating.cs | 2 +- .../WulaFallenEmpire/Verb/Trackingbullet.cs | 320 ++-------- 11 files changed, 474 insertions(+), 760 deletions(-) delete mode 100644 1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_CruiseMissile.xml diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll index dd6f78242329a28be87cfaa76623db0ac41b6cbf..5993a73fc134fe3f62bdb3d9e749e9577aa440f3 100644 GIT binary patch delta 88310 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 + + + Mote_WULA_RW_Penetrating_Beam + MoteDualAttached + MoteOverhead + + 0.1 + 0.1 + 0.1 + True + True + + true + + Things/Projectile/ChargeLanceShot + Graphic_MoteWithAgeSecs + MoteBeam + + <_ScrollSpeedA>0 + <_ScrollSpeedB>0 + <_Intensity>2 + + + \ No newline at end of file diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_CruiseMissile.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_CruiseMissile.xml deleted file mode 100644 index 1a6ef9d4..00000000 --- a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_CruiseMissile.xml +++ /dev/null @@ -1,127 +0,0 @@ - - - - Weapon_ExampleCruiseMissileLauncher - - A heavy launcher designed for cruise missiles, capable of long-range precision strikes and area bombardment. - Spacer - - Things/Item/Weapon/Launcher - Graphic_Single - - 1 - Interact_ChargeRifle - -
  • LongShots
  • -
  • RangedHeavy
  • -
    - - -
  • WULA_Cube_Productor_BIO
  • -
  • WULA_Cube_Productor_Energy
  • -
    - WULA_Synth_Weapon_Technology - UnfinishedWeapon -
    - - 2500 - 6.0 - 0.3 - 0.5 - 0.6 - 0.7 - 4.0 - - - 180 - 10 - 40 - 15 - - -
  • - Verb_LaunchProjectile - true - Bullet_ExampleCruiseMissile - 3.0 - 60 - 1 - Shot_ChargeLance - GunTail_Heavy - 15 - - true - - false -
  • -
    - -
  • Wula_Weapon_Init
  • -
  • CruiseMissileLauncher
  • -
    - -
  • RewardStandardQualitySuper
  • -
    -
    - - - Bullet_ExampleCruiseMissile - - - Things/Projectile/Bullet_Big - Graphic_Single - - WulaFallenEmpire.Projectile_CruiseMissile - - 30 - Bomb - 20 - 2.5 - 0.8 - Explosion_Bomb - Impact_Metal - true - 1.0 - 4.0 - Filth_Rubble - 1.0 - 5 - 120 - 1.5 - true - 1.0 - 8 - 0.7 - true - true - -
  • - Bomb - 25 - 3.5 - Explosion_Bomb - true - 5 - 2.0 - 15 - 7.0 - Bomb - Explosion_Bomb - WULA_GunTail_Smoke - 0.05 - 15 - - 180 - 300 - - 0.001 - - 10 - 20 - - 1.5 -
  • -
    -
    -
    -
    \ No newline at end of file diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_Homing.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_Homing.xml index 60360de1..0fdfeb62 100644 --- a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_Homing.xml +++ b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_Homing.xml @@ -6,8 +6,9 @@ A rifle designed to fire homing projectiles. It can track targets and adjust its trajectory in real-time. Spacer - Things/Item/Weapon/Rifle + Wula/Weapon/WULA_RW_Plasm_AR Graphic_Single + 1.4 1 Interact_Rifle @@ -45,7 +46,7 @@ 1.0 35 1 - Shot_ChargeRifle + Shot_ChargeRifle GunTail_Medium 9 @@ -63,7 +64,7 @@ Bullet_ExampleHoming - Things/Projectile/Bullet_Big + Things/Projectile/Bullet_Big Graphic_Single WulaFallenEmpire.Projectile_Homing @@ -78,9 +79,6 @@ false 0.5 0.5 - Filth_Rubble - 0.5 - 1 0 0.5 false @@ -89,22 +87,22 @@ 0.1 true true - -
  • - 10 - 0.05 - 60 - 1.5 - 0.8 - Bullet_ExampleHoming - 0.05 - - 20 - 40 - - WULA_GunTail_Smoke -
  • -
    + +
  • + 10 + 0.05 + 60 + 1.5 + 0.8 + Bullet_ExampleHoming + 0.05 + + 20 + 40 + + WULA_GunTail_Smoke +
  • +
    \ No newline at end of file diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_HomingExplosive.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_HomingExplosive.xml index b9314b46..153f8455 100644 --- a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_HomingExplosive.xml +++ b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_HomingExplosive.xml @@ -6,8 +6,9 @@ A powerful launcher that fires homing projectiles with explosive payloads. Ideal for area denial and heavy damage. Spacer - Things/Item/Weapon/Launcher + Wula/Weapon/WULA_RW_Plasm_AR Graphic_Single + 1.4 0.8 Interact_ChargeRifle @@ -79,10 +80,6 @@ true 0.8 3.0 - Filth_Rubble - 1.0 - 3 - 60 1.0 true 1.0 @@ -90,34 +87,22 @@ 0.5 true true - -
  • - 5 - 0.03 - 90 - 2.0 - 0.7 - Bullet_ExampleHomingExplosive - 0.03 - - 20 - 30 - - WULA_GunTail_Smoke -
  • -
  • - 30 - 5 - 3 - Bullet_ShotgunPellet - 5 - - 1 - 3 - - true -
  • -
    + +
  • + 5 + 0.03 + 90 + 2.0 + 0.7 + Bullet_ExampleHomingExplosive + 0.03 + + 20 + 30 + + WULA_GunTail_Smoke +
  • +
    \ No newline at end of file diff --git a/1.6/Anomaly/Defs/EventDefs/EventDef_WULA_FE_Spiritualist.xml b/1.6/Anomaly/Defs/EventDefs/EventDef_WULA_FE_Spiritualist.xml index 4392bb17..a3f0a9e8 100644 --- a/1.6/Anomaly/Defs/EventDefs/EventDef_WULA_FE_Spiritualist.xml +++ b/1.6/Anomaly/Defs/EventDefs/EventDef_WULA_FE_Spiritualist.xml @@ -302,7 +302,7 @@ - Wula_UI_FE_Spiritualist_10 + Wula_UI_FE_Spiritualist_11 Wula/Events/Portraits/WULA_FE_Spiritualist_1 帝国修女 diff --git a/Source/WulaFallenEmpire/HomingProjectileDef.cs b/Source/WulaFallenEmpire/HomingProjectileDef.cs index 65ba2ff1..69a279d1 100644 --- a/Source/WulaFallenEmpire/HomingProjectileDef.cs +++ b/Source/WulaFallenEmpire/HomingProjectileDef.cs @@ -5,21 +5,8 @@ namespace WulaFallenEmpire { public class HomingProjectileDef : DefModExtension { - public float SpeedChangeTilesPerTickOverride - { - get - { - return this.speedChangePerTick / 100f; - } - } - - public FloatRange SpeedRangeTilesPerTickOverride - { - get - { - return this.speedRangeOverride.Value * 0.01f; - } - } + public float SpeedChangeTilesPerTickOverride; + public FloatRange SpeedRangeTilesPerTickOverride; public float hitChance = 0.5f; @@ -27,7 +14,7 @@ namespace WulaFallenEmpire public float initRotateAngle = 30f; - public float proximityFuseRange = 0f; + public float proximityFuseRange = 0.5f; // 调整默认值,使其在接近目标时能正确触发引信 public IntRange destroyTicksAfterLosingTrack = new IntRange(60, 120); @@ -37,5 +24,12 @@ namespace WulaFallenEmpire public FloatRange? speedRangeOverride; public FleckDef tailFleckDef; + // 拖尾特效的详细配置参数 + public int fleckMakeFleckTickMax = 1; + public IntRange fleckMakeFleckNum = new IntRange(1, 1); + public FloatRange fleckAngle = new FloatRange(-180f, 180f); + public FloatRange fleckScale = new FloatRange(1f, 1f); + public FloatRange fleckSpeed = new FloatRange(0f, 0f); + public FloatRange fleckRotation = new FloatRange(-180f, 180f); } } \ No newline at end of file diff --git a/Source/WulaFallenEmpire/Projectile_Homing.cs b/Source/WulaFallenEmpire/Projectile_Homing.cs index 93f38c22..9243a528 100644 --- a/Source/WulaFallenEmpire/Projectile_Homing.cs +++ b/Source/WulaFallenEmpire/Projectile_Homing.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using System.Reflection; using RimWorld; @@ -9,317 +8,319 @@ using Verse.Sound; namespace WulaFallenEmpire { - public class Projectile_Homing : Bullet - { - public HomingProjectileDef HomingDef - { - get - { - bool flag = this.homingDefInt == null; - if (flag) - { - this.homingDefInt = this.def.GetModExtension(); - } - return this.homingDefInt; - } - } + public class Projectile_Homing : Bullet + { + private HomingProjectileDef homingDefInt; - public override void Launch(Thing launcher, Vector3 origin, LocalTargetInfo usedTarget, LocalTargetInfo intendedTarget, ProjectileHitFlags hitFlags, bool preventFriendlyFire = false, Thing equipment = null, ThingDef targetCoverDef = null) - { - bool flag = false; - bool flag2 = usedTarget.HasThing && usedTarget.Thing is IAttackTarget; - if (flag2) - { - bool flag3 = Rand.Chance(this.GetHitChance(usedTarget.Thing)); - if (flag3) - { - hitFlags |= ProjectileHitFlags.IntendedTarget; - intendedTarget = usedTarget; - flag = true; - } - } - else - { - bool flag4 = Rand.Chance(this.GetHitChance(intendedTarget.Thing)); - if (flag4) - { - hitFlags |= ProjectileHitFlags.IntendedTarget; - usedTarget = intendedTarget; - flag = true; - } - } - bool flag5 = flag; - if (flag5) - { - hitFlags &= ~ProjectileHitFlags.IntendedTarget; - } - base.Launch(launcher, origin, usedTarget, intendedTarget, hitFlags, preventFriendlyFire, equipment, targetCoverDef); - this.exactPositionInt = origin.Yto0() + Vector3.up * this.def.Altitude; - Vector3 normalized = (this.destination - origin).Yto0().normalized; - float degrees = Rand.Range(-this.HomingDef.initRotateAngle, this.HomingDef.initRotateAngle); - Vector2 vector = new Vector2(normalized.x, normalized.z); - vector = vector.RotatedBy(degrees); - Vector3 a = new Vector3(vector.x, 0f, vector.y); - bool flag6 = this.HomingDef.speedRangeOverride == null; - if (flag6) - { - this.curSpeed = a * this.def.projectile.SpeedTilesPerTick; - } - else - { - this.curSpeed = a * this.HomingDef.SpeedRangeTilesPerTickOverride.RandomInRange; - } - this.ticksToImpact = int.MaxValue; - this.lifetime = int.MaxValue; - this.ReflectInit(); - } + private Sustainer ambientSustainer; - protected void ReflectInit() - { - bool flag = !this.def.projectile.soundAmbient.NullOrUndefined(); - if (flag) - { - this.ambientSustainer = (Sustainer)NonPublicFields.Projectile_AmbientSustainer.GetValue(this); - } - this.comps = (List)NonPublicFields.ThingWithComps_comps.GetValue(this); - } + private List comps; - public float GetHitChance(Thing thing) - { - float num = this.HomingDef.hitChance; - bool flag = thing == null; - float result; - if (flag) - { - result = num; - } - else - { - Pawn pawn = thing as Pawn; - bool flag2 = pawn != null; - if (flag2) - { - num *= Mathf.Clamp(pawn.BodySize, 0.5f, 1.5f); - bool flag3 = pawn.GetPosture() > PawnPosture.Standing; - if (flag3) - { - num *= 0.5f; - } - float num2 = 1f; - switch (this.equipmentQuality) - { - case QualityCategory.Awful: - num2 = 0.5f; - goto IL_DD; - case QualityCategory.Poor: - num2 = 0.75f; - goto IL_DD; - case QualityCategory.Normal: - num2 = 1f; - goto IL_DD; - case QualityCategory.Excellent: - num2 = 1.1f; - goto IL_DD; - case QualityCategory.Masterwork: - num2 = 1.2f; - goto IL_DD; - case QualityCategory.Legendary: - num2 = 1.3f; - goto IL_DD; - } - Log.Message("Unknown QualityCategory, returning default qualityFactor = 1"); - IL_DD: - num *= num2; - } - else - { - num *= 1.5f * thing.def.fillPercent; - } - result = Mathf.Clamp(num, 0f, 1f); - } - return result; - } + protected Vector3 exactPositionInt; - public override Vector3 ExactPosition - { - get - { - return this.exactPositionInt; - } - } + public Vector3 curSpeed; - public override Quaternion ExactRotation - { - get - { - return Quaternion.LookRotation(this.curSpeed); - } - } + public bool homing = true; + private int Fleck_MakeFleckTick; // 拖尾特效的计时器 + private Vector3 lastTickPosition; // 记录上一帧的位置,用于计算移动方向 - public virtual void MovementTick() - { - Vector3 vect = this.ExactPosition + this.curSpeed; - ShootLine shootLine = new ShootLine(this.ExactPosition.ToIntVec3(), vect.ToIntVec3()); - Vector3 vector = (this.intendedTarget.Cell.ToVector3() - this.ExactPosition).Yto0(); - bool flag = this.homing; - if (flag) - { - Vector3 a = vector.normalized - this.curSpeed.normalized; - bool flag2 = a.sqrMagnitude >= 1.414f; - if (flag2) - { - this.homing = false; - this.lifetime = this.HomingDef.destroyTicksAfterLosingTrack.RandomInRange; - this.ticksToImpact = this.lifetime; - base.HitFlags &= ~ProjectileHitFlags.IntendedTarget; - base.HitFlags |= ProjectileHitFlags.NonTargetPawns; - base.HitFlags |= ProjectileHitFlags.NonTargetWorld; - } - else - { - this.curSpeed += a * this.HomingDef.homingSpeed * this.curSpeed.magnitude; - } - } - foreach (IntVec3 b in shootLine.Points()) - { - bool flag3 = (this.intendedTarget.Cell - b).SqrMagnitude <= this.HomingDef.proximityFuseRange * this.HomingDef.proximityFuseRange; - if (flag3) - { - this.homing = false; - this.lifetime = this.HomingDef.destroyTicksAfterLosingTrack.RandomInRange; - bool flag4 = (base.HitFlags & ProjectileHitFlags.IntendedTarget) == ProjectileHitFlags.IntendedTarget || this.HomingDef.proximityFuseRange > 0f; - if (flag4) - { - this.lifetime = 0; - this.ticksToImpact = 0; - vect = b.ToVector3(); - bool flag5 = Find.TickManager.CurTimeSpeed == TimeSpeed.Normal && this.def.projectile.soundImpactAnticipate != null; - if (flag5) - { - this.def.projectile.soundImpactAnticipate.PlayOneShot(this); - } - } - } - } - this.exactPositionInt = vect; - this.curSpeed *= (this.curSpeed.magnitude + this.HomingDef.SpeedChangeTilesPerTickOverride) / this.curSpeed.magnitude; - } + private static class NonPublicFields + { + public static FieldInfo Projectile_AmbientSustainer = typeof(Projectile).GetField("ambientSustainer", BindingFlags.Instance | BindingFlags.NonPublic); + public static FieldInfo ThingWithComps_comps = typeof(ThingWithComps).GetField("comps", BindingFlags.Instance | BindingFlags.NonPublic); + public static MethodInfo ProjectileCheckForFreeInterceptBetween = typeof(Projectile).GetMethod("CheckForFreeInterceptBetween", BindingFlags.Instance | BindingFlags.NonPublic); + } - protected override void Tick() - { - this.ThingWithCompsTick(); - this.lifetime--; - if (this.HomingDef.tailFleckDef != null) - { - FleckMaker.Static(this.ExactPosition, base.Map, this.HomingDef.tailFleckDef, 1f); - } - bool landed = this.landed; - if (!landed) - { - Vector3 exactPosition = this.ExactPosition; - this.ticksToImpact--; - this.MovementTick(); - bool flag = !this.ExactPosition.InBounds(base.Map); - if (flag) - { - base.Position = exactPosition.ToIntVec3(); - this.Destroy(DestroyMode.Vanish); - } - else - { - Vector3 exactPosition2 = this.ExactPosition; - object[] parameters = new object[] - { - exactPosition, - exactPosition2 - }; - bool flag2 = (bool)Projectile_Homing.ProjectileCheckForFreeInterceptBetween.Invoke(this, parameters); - if (!flag2) - { - base.Position = this.ExactPosition.ToIntVec3(); - bool flag3 = this.ticksToImpact == 60 && Find.TickManager.CurTimeSpeed == TimeSpeed.Normal && this.def.projectile.soundImpactAnticipate != null; - if (flag3) - { - this.def.projectile.soundImpactAnticipate.PlayOneShot(this); - } - bool flag4 = this.ticksToImpact <= 0; - if (flag4) - { - this.ImpactSomething(); - } - else - { - bool flag5 = this.ambientSustainer != null; - if (flag5) - { - this.ambientSustainer.Maintain(); - } - } - } - } - } - } + public HomingProjectileDef HomingDef + { + get + { + if (homingDefInt == null) + { + homingDefInt = def.GetModExtension(); + if (homingDefInt == null) + { + Log.ErrorOnce($"HomingProjectileDef for {this.def.defName} is null. Creating a default instance.", this.thingIDNumber ^ 0x12345678); + this.homingDefInt = new HomingProjectileDef(); + } + } + return homingDefInt; + } + } - private void ThingWithCompsTick() - { - bool flag = this.comps != null; - if (flag) - { - int i = 0; - int count = this.comps.Count; - while (i < count) - { - this.comps[i].CompTick(); - i++; - } - } - } + public override Vector3 ExactPosition => exactPositionInt; - protected override void Impact(Thing hitThing, bool blockedByShield = false) - { - Map map = base.Map; - IntVec3 position = base.Position; - base.Impact(hitThing, blockedByShield); - bool flag = this.HomingDef.extraProjectile != null; - if (flag) - { - bool flag2 = hitThing != null && hitThing.Spawned; - if (flag2) - { - ((Projectile)GenSpawn.Spawn(this.HomingDef.extraProjectile, base.Position, map, WipeMode.Vanish)).Launch(this.launcher, this.ExactPosition, hitThing, hitThing, ProjectileHitFlags.All, false, null, null); - } - else - { - ((Projectile)GenSpawn.Spawn(this.HomingDef.extraProjectile, base.Position, map, WipeMode.Vanish)).Launch(this.launcher, this.ExactPosition, position, position, ProjectileHitFlags.All, false, null, null); - } - } - } + public override Quaternion ExactRotation => Quaternion.LookRotation(curSpeed); - public override void ExposeData() - { - base.ExposeData(); - Scribe_Values.Look(ref this.exactPositionInt, "exactPosition", default(Vector3), false); - Scribe_Values.Look(ref this.curSpeed, "curSpeed", default(Vector3), false); - Scribe_Values.Look(ref this.homing, "homing", false, false); - bool flag = Scribe.mode == LoadSaveMode.PostLoadInit; - if (flag) - { - this.ReflectInit(); - } - } + public override void Launch(Thing launcher, Vector3 origin, LocalTargetInfo usedTarget, LocalTargetInfo intendedTarget, ProjectileHitFlags hitFlags, bool preventFriendlyFire = false, Thing equipment = null, ThingDef targetCoverDef = null) + { + bool flag = false; + if (usedTarget.HasThing && usedTarget.Thing is IAttackTarget) + { + if (Rand.Chance(GetHitChance(usedTarget.Thing))) + { + hitFlags |= ProjectileHitFlags.IntendedTarget; + intendedTarget = usedTarget; + flag = true; + } + } + else if (Rand.Chance(GetHitChance(intendedTarget.Thing))) + { + hitFlags |= ProjectileHitFlags.IntendedTarget; + usedTarget = intendedTarget; + flag = true; + } + if (flag) + { + hitFlags &= ~ProjectileHitFlags.IntendedTarget; + } + base.Launch(launcher, origin, usedTarget, intendedTarget, hitFlags, preventFriendlyFire, equipment, targetCoverDef); + exactPositionInt = origin.Yto0() + Vector3.up * def.Altitude; + lastTickPosition = origin; // 初始化 lastTickPosition + Vector3 normalized = (destination - origin).Yto0().normalized; + float degrees = Rand.Range(0f - HomingDef.initRotateAngle, HomingDef.initRotateAngle); + Vector2 v = new Vector2(normalized.x, normalized.z); + v = v.RotatedBy(degrees); + Vector3 vector = new Vector3(v.x, 0f, v.y); + // 检查 HomingDef.speedRangeOverride 是否有值 + if (!HomingDef.speedRangeOverride.HasValue) + { + curSpeed = vector * def.projectile.SpeedTilesPerTick; + } + else + { + curSpeed = vector * HomingDef.SpeedRangeTilesPerTickOverride.RandomInRange; + } + ticksToImpact = int.MaxValue; + lifetime = int.MaxValue; + ReflectInit(); + } - private HomingProjectileDef homingDefInt; + protected void ReflectInit() + { + if (!def.projectile.soundAmbient.NullOrUndefined()) + { + ambientSustainer = (Sustainer)NonPublicFields.Projectile_AmbientSustainer.GetValue(this); + } + comps = (List)NonPublicFields.ThingWithComps_comps.GetValue(this); + } - private Sustainer ambientSustainer; + public float GetHitChance(Thing thing) + { + if (this.HomingDef == null) + { + Log.ErrorOnce("HomingDef is null for projectile " + this.def.defName + ". Returning default hitChance.", this.thingIDNumber ^ 0x12345678); + return 0.7f; + } - private List comps; + float hitChance = HomingDef.hitChance; + if (thing == null) + { + return hitChance; + } + if (thing is Pawn pawn) + { + hitChance *= Mathf.Clamp(pawn.BodySize, 0.5f, 1.5f); + if (pawn.GetPosture() != 0) + { + hitChance *= 0.5f; + } + float num = 1f; + switch (equipmentQuality) + { + case QualityCategory.Awful: + num = 0.5f; + break; + case QualityCategory.Poor: + num = 0.75f; + break; + case QualityCategory.Normal: + num = 1f; + break; + case QualityCategory.Excellent: + num = 1.1f; + break; + case QualityCategory.Masterwork: + num = 1.2f; + break; + case QualityCategory.Legendary: + num = 1.3f; + break; + default: + Log.Message("Unknown QualityCategory, returning default qualityFactor = 1"); + break; + } + hitChance *= num; + } + else + { + hitChance *= 1.5f * thing.def.fillPercent; + } + return Mathf.Clamp(hitChance, 0f, 1f); + } - protected Vector3 exactPositionInt; + public virtual void MovementTick() + { + Vector3 vect = ExactPosition + curSpeed; + ShootLine shootLine = new ShootLine(ExactPosition.ToIntVec3(), vect.ToIntVec3()); + Vector3 vector = (intendedTarget.Cell.ToVector3() - ExactPosition).Yto0(); + if (homing) + { + Vector3 vector2 = vector.normalized - curSpeed.normalized; + if (vector2.sqrMagnitude >= 1.414f) + { + homing = false; + lifetime = HomingDef.destroyTicksAfterLosingTrack.RandomInRange; + ticksToImpact = lifetime; + base.HitFlags &= ~ProjectileHitFlags.IntendedTarget; + base.HitFlags |= ProjectileHitFlags.NonTargetPawns; + base.HitFlags |= ProjectileHitFlags.NonTargetWorld; + } + else + { + curSpeed += vector2 * HomingDef.homingSpeed * curSpeed.magnitude; + } + } + foreach (IntVec3 item in shootLine.Points()) + { + if (!((intendedTarget.Cell - item).SqrMagnitude <= HomingDef.proximityFuseRange * HomingDef.proximityFuseRange)) + { + continue; + } + homing = false; + lifetime = HomingDef.destroyTicksAfterLosingTrack.RandomInRange; + if ((base.HitFlags & ProjectileHitFlags.IntendedTarget) == ProjectileHitFlags.IntendedTarget || HomingDef.proximityFuseRange > 0f) + { + lifetime = 0; + ticksToImpact = 0; + vect = item.ToVector3(); + if (Find.TickManager.CurTimeSpeed == TimeSpeed.Normal && def.projectile.soundImpactAnticipate != null) + { + def.projectile.soundImpactAnticipate.PlayOneShot(this); + } + } + } + exactPositionInt = vect; + curSpeed *= (curSpeed.magnitude + HomingDef.SpeedChangeTilesPerTickOverride) / curSpeed.magnitude; + } - public Vector3 curSpeed; + protected override void Tick() + { + ThingWithCompsTick(); + lifetime--; + + // 处理拖尾特效 + if (HomingDef != null && HomingDef.tailFleckDef != null) + { + Fleck_MakeFleckTick++; + if (Fleck_MakeFleckTick >= HomingDef.fleckMakeFleckTickMax) + { + Fleck_MakeFleckTick = 0; + Map map = base.Map; + int randomInRange = HomingDef.fleckMakeFleckNum.RandomInRange; + Vector3 currentPosition = ExactPosition; + Vector3 previousPosition = lastTickPosition; - public bool homing = true; + for (int i = 0; i < randomInRange; i++) + { + float num = (currentPosition - previousPosition).AngleFlat(); + float velocityAngle = HomingDef.fleckAngle.RandomInRange + num; + float randomInRange2 = HomingDef.fleckScale.RandomInRange; + float randomInRange3 = HomingDef.fleckSpeed.RandomInRange; + + FleckCreationData dataStatic = FleckMaker.GetDataStatic(currentPosition, map, HomingDef.tailFleckDef, randomInRange2); + dataStatic.rotation = (currentPosition - previousPosition).AngleFlat(); + dataStatic.rotationRate = HomingDef.fleckRotation.RandomInRange; + dataStatic.velocityAngle = velocityAngle; + dataStatic.velocitySpeed = randomInRange3; + map.flecks.CreateFleck(dataStatic); + } + } + } + lastTickPosition = ExactPosition; // 更新上一帧位置 - private static MethodInfo ProjectileCheckForFreeInterceptBetween = typeof(Projectile).GetMethod("CheckForFreeInterceptBetween", BindingFlags.Instance | BindingFlags.NonPublic); - } + if (landed) + { + return; + } + Vector3 exactPosition = ExactPosition; + ticksToImpact--; + MovementTick(); + if (!ExactPosition.InBounds(base.Map)) + { + base.Position = exactPosition.ToIntVec3(); + Destroy(); + return; + } + Vector3 exactPosition2 = ExactPosition; + object[] parameters = new object[2] { exactPosition, exactPosition2 }; + if (!(bool)NonPublicFields.ProjectileCheckForFreeInterceptBetween.Invoke(this, parameters)) + { + base.Position = ExactPosition.ToIntVec3(); + if (ticksToImpact == 60 && Find.TickManager.CurTimeSpeed == TimeSpeed.Normal && def.projectile.soundImpactAnticipate != null) + { + def.projectile.soundImpactAnticipate.PlayOneShot(this); + } + if (ticksToImpact <= 0) + { + ImpactSomething(); + } + else if (ambientSustainer != null) + { + ambientSustainer.Maintain(); + } + } + } + + private void ThingWithCompsTick() + { + if (comps != null) + { + int i = 0; + for (int count = comps.Count; i < count; i++) + { + comps[i].CompTick(); + } + } + } + + protected override void Impact(Thing hitThing, bool blockedByShield = false) + { + Map map = base.Map; + IntVec3 position = base.Position; + base.Impact(hitThing, blockedByShield); + if (HomingDef.extraProjectile != null) + { + if (hitThing != null && hitThing.Spawned) + { + ((Projectile)GenSpawn.Spawn(HomingDef.extraProjectile, base.Position, map, WipeMode.Vanish)).Launch(launcher, ExactPosition, hitThing, hitThing, ProjectileHitFlags.All, false, null, null); + } + else + { + ((Projectile)GenSpawn.Spawn(HomingDef.extraProjectile, base.Position, map, WipeMode.Vanish)).Launch(launcher, ExactPosition, position, position, ProjectileHitFlags.All, false, null, null); + } + } + } + + public override void ExposeData() + { + base.ExposeData(); + Scribe_Values.Look(ref exactPositionInt, "exactPosition"); + Scribe_Values.Look(ref curSpeed, "curSpeed"); + Scribe_Values.Look(ref homing, "homing", defaultValue: false); + if (Scribe.mode == LoadSaveMode.PostLoadInit) + { + ReflectInit(); + if (this.homingDefInt == null) + { + this.homingDefInt = this.def.GetModExtension(); + if (this.homingDefInt == null) + { + Log.ErrorOnce($"HomingProjectileDef is null for projectile {this.def.defName} after PostLoadInit. Creating a default instance.", this.thingIDNumber ^ 0x12345678); + this.homingDefInt = new HomingProjectileDef(); + } + } + } + } + } } \ No newline at end of file diff --git a/Source/WulaFallenEmpire/Projectile_WulaBeam.cs b/Source/WulaFallenEmpire/Projectile_WulaBeam.cs index ff6d1fd8..b8d22d11 100644 --- a/Source/WulaFallenEmpire/Projectile_WulaBeam.cs +++ b/Source/WulaFallenEmpire/Projectile_WulaBeam.cs @@ -84,19 +84,32 @@ namespace WulaFallenEmpire { if (!infinitePenetration && hitCounter >= maxHits) break; - if (thing is Pawn pawn && pawn != launcher && !alreadyDamaged.Contains(pawn)) + // 统一处理 Pawn 和 Building 的伤害逻辑 + // 确保 Thing 未被伤害过且不是发射者 + if (thing != launcher && !alreadyDamaged.Contains(thing)) { bool shouldDamage = false; - if (intendedTarget.Thing == pawn) shouldDamage = true; - else if (pawn.HostileTo(launcher)) shouldDamage = true; - else if (!shouldPreventFriendlyFire) shouldDamage = true; + Pawn pawn = thing as Pawn; + Building building = thing as Building; + + if (pawn != null) // 如果是 Pawn + { + if (intendedTarget.Thing == pawn) shouldDamage = true; + else if (pawn.HostileTo(launcher)) shouldDamage = true; + else if (!shouldPreventFriendlyFire) shouldDamage = true; + } + else if (building != null) // 如果是 Building + { + shouldDamage = true; // 默认对 Building 造成伤害 + } if (shouldDamage) { - ApplyPathDamage(pawn, props); + ApplyPathDamage(thing, props); // 传递 Thing } } - else if (thing.def.Fillage == FillCategory.Full && thing.def.blockLight) + // 只有当遇到完全阻挡的 Thing 且不是 Pawn 或 Building 时才停止穿透 + else if (thing.def.Fillage == FillCategory.Full && thing.def.blockLight && !(thing is Pawn) && !(thing is Building)) { break; } @@ -105,9 +118,15 @@ namespace WulaFallenEmpire this.Destroy(DestroyMode.Vanish); } - private void ApplyPathDamage(Pawn pawn, Wula_BeamPierce_Extension props) + private void ApplyPathDamage(Thing targetThing, Wula_BeamPierce_Extension props) // 接受 Thing 参数 { - float damageMultiplier = Mathf.Pow(1f - props.damageFalloff, hitCounter); + float damageMultiplier = 1f; + if (targetThing is Pawn) // 只有 Pawn 才计算穿透衰减 + { + damageMultiplier = Mathf.Pow(1f - props.damageFalloff, hitCounter); + } + // Building 不受穿透衰减影响,或者 Building 的穿透衰减始终为 1 (不衰减) + int damageAmount = (int)(this.DamageAmount * damageMultiplier); if (damageAmount <= 0) return; @@ -123,9 +142,13 @@ namespace WulaFallenEmpire DamageInfo.SourceCategory.ThingOrUnknown, this.intendedTarget.Thing); - pawn.TakeDamage(dinfo); - alreadyDamaged.Add(pawn); - hitCounter++; + targetThing.TakeDamage(dinfo); // 对 targetThing 造成伤害 + alreadyDamaged.Add(targetThing); + + if (targetThing is Pawn) // 只有 Pawn 才增加 hitCounter + { + hitCounter++; + } } protected override void Tick() { } diff --git a/Source/WulaFallenEmpire/Projectile_WulaPenetrating.cs b/Source/WulaFallenEmpire/Projectile_WulaPenetrating.cs index 2f3b1df4..ed182f5e 100644 --- a/Source/WulaFallenEmpire/Projectile_WulaPenetrating.cs +++ b/Source/WulaFallenEmpire/Projectile_WulaPenetrating.cs @@ -17,7 +17,7 @@ namespace WulaFallenEmpire public FleckDef tailFleckDef; // 用于配置拖尾特效的 FleckDef } - public class Projectile_WulaLineAttack : Projectile + public class Projectile_WulaLineAttack : Bullet { private int hitCounter = 0; private List alreadyDamaged = new List(); diff --git a/Source/WulaFallenEmpire/Verb/Trackingbullet.cs b/Source/WulaFallenEmpire/Verb/Trackingbullet.cs index f49445ca..a74d6794 100644 --- a/Source/WulaFallenEmpire/Verb/Trackingbullet.cs +++ b/Source/WulaFallenEmpire/Verb/Trackingbullet.cs @@ -1,8 +1,6 @@ using RimWorld; using System.Collections.Generic; -using Verse.Sound; using System.Linq; -using System.Reflection; using UnityEngine; using Verse; @@ -22,150 +20,74 @@ namespace WulaFallenEmpire public float subExplosionSpread = 6f; public DamageDef subDamageDef; public SoundDef subSoundExplode; - public FleckDef tailFleckDef; // 用于配置拖尾特效的 FleckDef - public float homingSpeed = 0.1f; - public float initRotateAngle = 30f; - public IntRange destroyTicksAfterLosingTrack = new IntRange(60, 120); - public float speedChangePerTick; - public FloatRange? speedRangeOverride; - public float proximityFuseRange = 0f; + + // 新增的弹道配置参数 + public float bezierArcHeightFactor = 0.05f; // 贝塞尔曲线高度因子 + public float bezierMinArcHeight = 2f; // 贝塞尔曲线最小高度 + public float bezierMaxArcHeight = 6f; // 贝塞尔曲线最大高度 + public float bezierHorizontalOffsetFactor = 0.1f; // 贝塞尔曲线水平偏移因子 + public float bezierSideOffsetFactor = 0.2f; // 贝塞尔曲线侧向偏移因子 + public float bezierRandomOffsetScale = 0.5f; // 贝塞尔曲线随机偏移缩放 + } public class Projectile_CruiseMissile : Projectile_Explosive { private CruiseMissileProperties settings; - protected Vector3 exactPositionInt; - public Vector3 curSpeed; - public bool homing = true; - private Sustainer ambientSustainer; - private List comps; - private int ticksToDestroy = -1; - - // Launch 方法的参数作为字段 - - // 拖尾特效相关字段 - private int Fleck_MakeFleckTick; - public int Fleck_MakeFleckTickMax = 1; - public IntRange Fleck_MakeFleckNum = new IntRange(1, 1); - public FloatRange Fleck_Angle = new FloatRange(-180f, 180f); - public FloatRange Fleck_Scale = new FloatRange(1f, 1f); - public FloatRange Fleck_Speed = new FloatRange(0f, 0f); - public FloatRange Fleck_Rotation = new FloatRange(-180f, 180f); + private bool flag2; + private Vector3 Randdd; + private Vector3 position2; + public Vector3 ExPos; public override void SpawnSetup(Map map, bool respawningAfterLoad) { base.SpawnSetup(map, respawningAfterLoad); settings = def.GetModExtension() ?? new CruiseMissileProperties(); - this.ReflectInit(); } - public override void Launch(Thing launcherParam, Vector3 originParam, LocalTargetInfo usedTargetParam, LocalTargetInfo intendedTargetParam, ProjectileHitFlags hitFlagsParam, bool preventFriendlyFireParam = false, Thing equipmentParam = null, ThingDef targetCoverDefParam = null) + private void RandFactor() { - this.launcher = launcherParam; - this.origin = originParam; - this.usedTarget = usedTargetParam; - this.intendedTarget = intendedTargetParam; - this.HitFlags = hitFlagsParam; - this.preventFriendlyFire = preventFriendlyFireParam; - this.equipment = equipmentParam; - this.targetCoverDef = targetCoverDefParam; - - this.exactPositionInt = origin.Yto0() + Vector3.up * this.def.Altitude; - Vector3 normalized = (this.destination - origin).Yto0().normalized; - float degrees = Rand.Range(-this.settings.initRotateAngle, this.settings.initRotateAngle); - Vector2 vector = new Vector2(normalized.x, normalized.z); - vector = vector.RotatedBy(degrees); - Vector3 a = new Vector3(vector.x, 0f, vector.y); - bool flag6 = this.settings.speedRangeOverride == null; - if (flag6) - { - this.curSpeed = a * this.def.projectile.SpeedTilesPerTick; - } - else - { - this.curSpeed = a * this.settings.speedRangeOverride.Value.RandomInRange; - } - this.ticksToImpact = int.MaxValue; - this.lifetime = int.MaxValue; + // 调整随机范围,用于控制C形弹道的随机偏移 + Randdd = new Vector3( + Rand.Range(-settings.bezierRandomOffsetScale, settings.bezierRandomOffsetScale), // X轴的随机偏移 + Rand.Range(0f, 0f), // Y轴(高度)不进行随机,保持平稳 + Rand.Range(-settings.bezierRandomOffsetScale, settings.bezierRandomOffsetScale) // Z轴的随机偏移 + ); + flag2 = true; } - protected void ReflectInit() + public Vector3 BPos(float t) { - if (NonPublicFields.Projectile_AmbientSustainer == null) - { - NonPublicFields.Projectile_AmbientSustainer = typeof(Projectile).GetField("ambientSustainer", BindingFlags.Instance | BindingFlags.NonPublic); - } - if (NonPublicFields.ThingWithComps_comps == null) - { - NonPublicFields.ThingWithComps_comps = typeof(ThingWithComps).GetField("comps", BindingFlags.Instance | BindingFlags.NonPublic); - } - if (NonPublicFields.ProjectileCheckForFreeInterceptBetween == null) - { - NonPublicFields.ProjectileCheckForFreeInterceptBetween = typeof(Projectile).GetMethod("CheckForFreeInterceptBetween", BindingFlags.Instance | BindingFlags.NonPublic); - } + if (!flag2) RandFactor(); - bool flag = !this.def.projectile.soundAmbient.NullOrUndefined(); - if (flag) - { - this.ambientSustainer = (Sustainer)NonPublicFields.Projectile_AmbientSustainer.GetValue(this); - } - this.comps = (List)NonPublicFields.ThingWithComps_comps.GetValue(this); + // 计算水平距离 + float horizontalDistance = Vector3.Distance(new Vector3(origin.x, 0, origin.z), + new Vector3(destination.x, 0, destination.z)); + + // 动态调整控制点高度,使其更扁平,使用XML配置的高度因子 + float arcHeight = Mathf.Clamp(horizontalDistance * settings.bezierArcHeightFactor, settings.bezierMinArcHeight, settings.bezierMaxArcHeight); + + // 计算从起点到终点的方向向量 + Vector3 direction = (destination - origin).normalized; + // 计算垂直于方向向量的水平向量(用于侧向偏移),确保C形弯曲方向一致 + Vector3 perpendicularDirection = Vector3.Cross(direction, Vector3.up).normalized; + + // 调整控制点以形成扁平 C 形,使用XML配置的偏移因子 + // P1: 在起点附近,向前偏移,向上偏移,并向一侧偏移 + Vector3 p1 = origin + direction * horizontalDistance * settings.bezierHorizontalOffsetFactor + Vector3.up * arcHeight + perpendicularDirection * horizontalDistance * settings.bezierSideOffsetFactor + Randdd; + // P2: 在终点附近,向后偏移,向上偏移,并向同一侧偏移 + Vector3 p2 = destination - direction * horizontalDistance * settings.bezierHorizontalOffsetFactor + Vector3.up * arcHeight + perpendicularDirection * horizontalDistance * settings.bezierSideOffsetFactor + Randdd; + + return BezierCurve(origin, p1, p2, destination, t); } - public float GetHitChance(Thing thing) + private Vector3 BezierCurve(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t) { - float num = this.settings.homingSpeed; - bool flag = thing == null; - float result; - if (flag) - { - result = num; - } - else - { - Pawn pawn = thing as Pawn; - bool flag2 = pawn != null; - if (flag2) - { - num *= Mathf.Clamp(pawn.BodySize, 0.5f, 1.5f); - bool flag3 = pawn.GetPosture() > PawnPosture.Standing; - if (flag3) - { - num *= 0.5f; - } - float num2 = 1f; - switch (this.equipmentQuality) - { - case QualityCategory.Awful: - num2 = 0.5f; - goto IL_DD; - case QualityCategory.Poor: - num2 = 0.75f; - goto IL_DD; - case QualityCategory.Normal: - num2 = 1f; - goto IL_DD; - case QualityCategory.Excellent: - num2 = 1.1f; - goto IL_DD; - case QualityCategory.Masterwork: - num2 = 1.2f; - goto IL_DD; - case QualityCategory.Legendary: - num2 = 1.3f; - goto IL_DD; - } - Log.Message("Unknown QualityCategory, returning default qualityFactor = 1"); - IL_DD: - num *= num2; - } - else - { - num *= 1.5f * thing.def.fillPercent; - } - result = Mathf.Clamp(num, 0f, 1f); - } - return result; + float u = 1 - t; + return u * u * u * p0 + + 3 * u * u * t * p1 + + 3 * u * t * t * p2 + + t * t * t * p3; } private IEnumerable GetValidCells(Map map) @@ -230,149 +152,43 @@ namespace WulaFallenEmpire ); } - public override Quaternion ExactRotation + protected override void DrawAt(Vector3 position, bool flip = false) { - get - { - return Quaternion.LookRotation(this.curSpeed); - } - } - public override Vector3 ExactPosition - { - get - { - return this.exactPositionInt; - } + position2 = BPos(DistanceCoveredFraction - 0.01f); + ExPos = position = BPos(DistanceCoveredFraction); + base.DrawAt(position, flip); } protected override void Tick() { - this.ThingWithCompsTick(); - this.lifetime--; - if (this.settings.tailFleckDef != null) + if (intendedTarget.Thing is Pawn pawn && pawn.Spawned && !pawn.Destroyed) { - this.Fleck_MakeFleckTick++; - if (this.Fleck_MakeFleckTick >= this.Fleck_MakeFleckTickMax) + if ((pawn.Dead || pawn.Downed) && DistanceCoveredFraction < 0.6f) { - this.Fleck_MakeFleckTick = 0; - for (int i = 0; i < this.Fleck_MakeFleckNum.RandomInRange; i++) - { - FleckMaker.Static(this.ExactPosition + Gen.RandomHorizontalVector(this.Fleck_Scale.RandomInRange / 2f), base.Map, this.settings.tailFleckDef, this.Fleck_Scale.RandomInRange); - } - } - } - - bool landed = this.landed; - if (!landed) - { - Vector3 exactPosition = this.ExactPosition; - this.ticksToImpact--; - this.MovementTick(); - bool flag = !this.ExactPosition.InBounds(base.Map); - if (flag) - { - base.Position = exactPosition.ToIntVec3(); - this.Destroy(DestroyMode.Vanish); - } - else - { - Vector3 exactPosition2 = this.ExactPosition; - object[] parameters = new object[] - { - exactPosition, - exactPosition2 - }; - bool flag2 = (bool)NonPublicFields.ProjectileCheckForFreeInterceptBetween.Invoke(this, parameters); - if (!flag2) - { - base.Position = this.ExactPosition.ToIntVec3(); - bool flag3 = this.ticksToImpact == 60 && Find.TickManager.CurTimeSpeed == TimeSpeed.Normal && this.def.projectile.soundImpactAnticipate != null; - if (flag3) - { - this.def.projectile.soundImpactAnticipate.PlayOneShot(this); - } - bool flag4 = this.ticksToImpact <= 0; - if (flag4) - { - this.Impact(null); - } - else - { - bool flag5 = this.ambientSustainer != null; - if (flag5) - { - this.ambientSustainer.Maintain(); - } - } - } + FindNextTarget(pawn.DrawPos); } + destination = pawn.DrawPos; } + base.Tick(); } - private void MovementTick() + private void FindNextTarget(Vector3 center) { - if (this.homing) + var map = base.Map; + if (map == null) return; + + foreach (IntVec3 cell in GenRadial.RadialCellsAround(IntVec3.FromVector3(center), 7f, true)) { - if (this.intendedTarget != null && this.intendedTarget.Thing != null) + if (!cell.InBounds(map)) continue; + + Pawn target = cell.GetFirstPawn(map); + if (target != null && target.Faction.HostileTo(launcher?.Faction)) { - Vector3 vector = (this.intendedTarget.Thing.DrawPos - this.exactPositionInt).normalized; - this.curSpeed = Vector3.RotateTowards(this.curSpeed, vector * this.curSpeed.magnitude, this.settings.homingSpeed, 0f); - } - else if (this.ticksToDestroy == -1) - { - this.ticksToDestroy = this.settings.destroyTicksAfterLosingTrack.RandomInRange; - } - } - if (this.ticksToDestroy > 0) - { - this.ticksToDestroy--; - if (this.ticksToDestroy == 0) - { - this.Destroy(DestroyMode.Vanish); + intendedTarget = target; return; } } - if (this.settings.speedChangePerTick != 0f) - { - this.curSpeed = this.curSpeed.normalized * (this.curSpeed.magnitude + this.settings.speedChangePerTick); - } - if (this.settings.proximityFuseRange > 0f) - { - if (this.intendedTarget != null && this.intendedTarget.Thing != null && (this.intendedTarget.Thing.DrawPos - this.exactPositionInt).magnitude < this.settings.proximityFuseRange) - { - this.Impact(null); - return; - } - } - - this.exactPositionInt += this.curSpeed; + intendedTarget = CellRect.CenteredOn(IntVec3.FromVector3(center), 7).RandomCell; } - - protected void ThingWithCompsTick() - { - if (this.comps != null) - { - for (int i = 0; i < this.comps.Count; i++) - { - this.comps[i].CompTick(); - } - } - } - - public override void ExposeData() - { - base.ExposeData(); - Scribe_Values.Look(ref this.exactPositionInt, "exactPosition", default(Vector3), false); - Scribe_Values.Look(ref this.curSpeed, "curSpeed", default(Vector3), false); - Scribe_Values.Look(ref this.homing, "homing", true, false); - Scribe_Values.Look(ref this.ticksToDestroy, "ticksToDestroy", -1, false); - } - } - - public static class NonPublicFields - { - public static FieldInfo Projectile_AmbientSustainer; - public static FieldInfo ThingWithComps_comps; - public static MethodInfo ProjectileCheckForFreeInterceptBetween; } } \ No newline at end of file