From acfc078f91484ce50a2083986bdbb18ef984d63e Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Sun, 7 Sep 2025 18:10:03 +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/ArachnaeSwarm.dll | Bin 93696 -> 92672 bytes .../AbilityDefs/Abilities_TrackingCharge.xml | 5 +- .../CompProperties_TrackingCharge.cs | 2 - .../Abilities/PawnFlyer_TrackingCharge.cs | 117 ++++++++---------- .../Verb_CastAbilityTrackingCharge.cs | 8 +- 5 files changed, 62 insertions(+), 70 deletions(-) diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index e6c77194a5856e68f92917dcede0f64db651053b..e2e49d2e066f4fa7d49e3900638a534fd9e9a53b 100644 GIT binary patch delta 23947 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 delta 24874 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 Blunt ARA_Flyer_TrackingCharge - 600 2.5 Pawn_Melee_BigBash_HitPawn +
  • + WarTrumpet + 20 +
  • diff --git a/Source/ArachnaeSwarm/Abilities/CompProperties_TrackingCharge.cs b/Source/ArachnaeSwarm/Abilities/CompProperties_TrackingCharge.cs index f770f25..2ab22a9 100644 --- a/Source/ArachnaeSwarm/Abilities/CompProperties_TrackingCharge.cs +++ b/Source/ArachnaeSwarm/Abilities/CompProperties_TrackingCharge.cs @@ -11,10 +11,8 @@ namespace ArachnaeSwarm public float inertiaDistance = 3f; public DamageDef collisionDamageDef; public ThingDef flyerDef; - public int maxFlightTicks = 300; // Default 5 seconds timeout public float collisionRadius = 1.5f; public SoundDef impactSound; - public CompProperties_TrackingCharge() { this.compClass = typeof(CompAbilityEffect_TrackingCharge); diff --git a/Source/ArachnaeSwarm/Abilities/PawnFlyer_TrackingCharge.cs b/Source/ArachnaeSwarm/Abilities/PawnFlyer_TrackingCharge.cs index 2edbe83..197e2be 100644 --- a/Source/ArachnaeSwarm/Abilities/PawnFlyer_TrackingCharge.cs +++ b/Source/ArachnaeSwarm/Abilities/PawnFlyer_TrackingCharge.cs @@ -23,12 +23,9 @@ namespace ArachnaeSwarm public SoundDef impactSound; // --- Internal state --- - private Vector3 currentSpeed; - private float distanceTraveled = 0f; private bool homing = true; - private int inertiaTicks = -1; - private Vector3 exactPosition; private bool hasHitPrimaryTarget = false; + private Vector3 exactPosition; // --- Reflection Fields --- private static FieldInfo TicksFlyingInfo; @@ -83,88 +80,76 @@ namespace ArachnaeSwarm protected override void Tick() { - int ticksFlying = (int)TicksFlyingInfo.GetValue(this); + // --- THE CORRECT APPROACH --- + // Let the base class handle all flight mechanics (position, timing, etc.) + // We only intervene to do two things: + // 1. Continuously update the destination to "steer" the flyer. + // 2. Perform our own collision check. - if (ticksFlying == 0) + if (homing && primaryTarget.HasThing && primaryTarget.Thing.Spawned) { - Vector3 startVec = (Vector3)StartVecInfo.GetValue(this); - IntVec3 destCell = (IntVec3)DestCellInfo.GetValue(this); - Vector3 destinationPos = GenThing.TrueCenter(destCell, Rot4.North, this.FlyingThing.def.size, this.def.Altitude); - Vector3 direction = (destinationPos - startVec).normalized; - this.currentSpeed = direction * this.def.pawnFlyer.flightSpeed; + // Steer the flyer by constantly updating its destination cell. + DestCellInfo.SetValue(this, primaryTarget.Thing.Position); } - - this.exactPosition += this.currentSpeed; - this.distanceTraveled += this.currentSpeed.magnitude; - if (inertiaTicks > 0) + // Perform our custom collision check. + if (!hasHitPrimaryTarget && primaryTarget.HasThing && primaryTarget.Thing.Spawned) { - inertiaTicks--; - if (inertiaTicks <= 0) { Land(); return; } - } - else - { - if (homing && primaryTarget.HasThing && primaryTarget.Thing.Spawned) - { - Vector3 desiredDirection = (primaryTarget.Thing.DrawPos - this.exactPosition).normalized; - this.currentSpeed = Vector3.RotateTowards(this.currentSpeed, desiredDirection, this.homingSpeed * 0.017f, 999f).normalized * this.def.pawnFlyer.flightSpeed; - } - else - { - homing = false; - } - - float calculatedDamage = this.initialDamage + (this.distanceTraveled * this.damagePerTile); - var dinfo = new DamageInfo(this.collisionDamageDef, calculatedDamage, 1f, -1, this.FlyingPawn); - - if (!hasHitPrimaryTarget && homing && primaryTarget.HasThing && primaryTarget.Thing.Spawned && (this.exactPosition - primaryTarget.Thing.DrawPos).sqrMagnitude < this.collisionRadius * this.collisionRadius) + // Use DrawPos for accurate distance checking, not Position. + if ((this.DrawPos - primaryTarget.Thing.DrawPos).sqrMagnitude < this.collisionRadius * this.collisionRadius) { + // --- Impact! --- if (this.impactSound != null) { - SoundStarter.PlayOneShot(this.impactSound, new TargetInfo(this.exactPosition.ToIntVec3(), this.Map)); + SoundStarter.PlayOneShot(this.impactSound, new TargetInfo(this.Position, this.Map)); } - hasHitPrimaryTarget = true; // Mark as hit to prevent re-triggering + + // Calculate damage based on distance traveled so far. + // We need to get the distance from the base class now. + Vector3 startPosition = (Vector3)StartVecInfo.GetValue(this); + float distance = (this.DrawPos - startPosition).magnitude; + float calculatedDamage = this.initialDamage + (distance * this.damagePerTile); + var dinfo = new DamageInfo(this.collisionDamageDef, calculatedDamage, 1f, -1, this.FlyingPawn); + primaryTarget.Thing.TakeDamage(dinfo); - homing = false; - this.inertiaTicks = (int)(this.inertiaDistance / this.currentSpeed.magnitude); - } - - foreach (var thing in GenRadial.RadialDistinctThingsAround(this.exactPosition.ToIntVec3(), this.Map, 1.0f, false)) - { - // Avoid damaging self or the primary target (which is handled above) - if (thing == this.FlyingPawn || thing == this || (hasHitPrimaryTarget && thing == primaryTarget.Thing)) continue; + hasHitPrimaryTarget = true; - if (thing is Pawn pawn && !pawn.Downed && pawn.HostileTo(this.FlyingPawn)) pawn.TakeDamage(dinfo); - else if (thing.def.destroyable && thing.def.building != null) thing.TakeDamage(dinfo); + // Stop homing. The flyer will now continue to its last set destination. + homing = false; + + // To create the "inertia" effect, we now set the destination to be a point + // past the target. + Vector3 direction = (this.DrawPos - startPosition).normalized; + IntVec3 inertiaEndPos = (this.DrawPos + (direction * this.inertiaDistance)).ToIntVec3(); + DestCellInfo.SetValue(this, inertiaEndPos); } } - try + // --- AOE Damage Logic --- + // Damage other hostiles in the path. + float aoeDamage = this.initialDamage + (((Vector3)StartVecInfo.GetValue(this) - this.DrawPos).magnitude * this.damagePerTile); + var aoeDinfo = new DamageInfo(this.collisionDamageDef, aoeDamage, 1f, -1, this.FlyingPawn); + foreach (var thing in GenRadial.RadialDistinctThingsAround(this.Position, this.Map, 1.0f, false)) { - // We still need to update the destination for the base flyer logic to work correctly - DestCellInfo.SetValue(this, this.exactPosition.ToIntVec3()); - // --- FIX for infinite flight --- - // The old TicksFlightTimeInfo update logic is removed. - } - catch (System.Exception ex) - { - Log.ErrorOnce($"Exception during reflection in PawnFlyer_TrackingCharge: {ex}", this.thingIDNumber); - } - - TicksFlyingInfo.SetValue(this, ticksFlying + 1); - - // --- RELIABLE TIMEOUT & BOUNDS CHECK --- - if (ticksFlying > this.maxFlightTicks || !this.exactPosition.ToIntVec3().InBounds(this.Map)) - { - Land(); + if (thing != this.FlyingPawn && thing != this && thing != primaryTarget.Thing) + { + if (thing is Pawn pawn && !pawn.Downed && pawn.HostileTo(this.FlyingPawn)) + { + pawn.TakeDamage(aoeDinfo); + } + } } + + // Let the base class do its thing. This is crucial. + // It will handle the movement, timing, and eventual landing based on its calculated ticksFlightTime. + base.Tick(); } - private void Land() + protected override void RespawnPawn() { - if (this.Destroyed) return; + // This is the correct place to call the base method. + // The base class's TickInterval will call this method before destroying the flyer. base.RespawnPawn(); - this.Destroy(); } } } \ No newline at end of file diff --git a/Source/ArachnaeSwarm/Abilities/Verb_CastAbilityTrackingCharge.cs b/Source/ArachnaeSwarm/Abilities/Verb_CastAbilityTrackingCharge.cs index 2c07dce..e69a855 100644 --- a/Source/ArachnaeSwarm/Abilities/Verb_CastAbilityTrackingCharge.cs +++ b/Source/ArachnaeSwarm/Abilities/Verb_CastAbilityTrackingCharge.cs @@ -46,7 +46,6 @@ namespace ArachnaeSwarm trackingCharge.inertiaDistance = props.inertiaDistance; trackingCharge.collisionDamageDef = props.collisionDamageDef; trackingCharge.primaryTarget = this.currentTarget; - trackingCharge.maxFlightTicks = props.maxFlightTicks; trackingCharge.collisionRadius = props.collisionRadius; trackingCharge.impactSound = props.impactSound; @@ -54,6 +53,13 @@ namespace ArachnaeSwarm trackingCharge.StartFlight(this.CasterPawn, this.currentTarget.Cell); GenSpawn.Spawn(trackingCharge, this.CasterPawn.Position, map); // Use the cached map + // --- FIX for Comp Effects --- + // --- The Standard Pattern to trigger Comps like EffecterOnCaster --- + // After our custom verb logic (spawning the flyer) is done, + // we call the ability's Activate method with invalid targets. + // This triggers the standard Comp cycle without re-casting the verb. + this.ability.Activate(LocalTargetInfo.Invalid, LocalTargetInfo.Invalid); + return true; } }