This commit is contained in:
2025-08-20 15:48:55 +08:00
parent b43ad04985
commit dec619663d
9 changed files with 251 additions and 60 deletions

View File

@@ -0,0 +1,77 @@
using RimWorld;
using UnityEngine;
using Verse;
using Verse.Sound;
namespace WulaFallenEmpire
{
public class Projectile_ExplosiveTrackingBullet : Projectile_TrackingBullet
{
private ExplosiveTrackingBulletDef explosiveDefInt;
public ExplosiveTrackingBulletDef ExplosiveDef
{
get
{
if (explosiveDefInt == null)
{
explosiveDefInt = def.GetModExtension<ExplosiveTrackingBulletDef>();
if (explosiveDefInt == null)
{
Log.ErrorOnce($"ExplosiveTrackingBulletDef for {this.def.defName} is null. Creating a default instance.", this.thingIDNumber ^ 0x12345679);
this.explosiveDefInt = new ExplosiveTrackingBulletDef();
}
}
return explosiveDefInt;
}
}
protected override void Impact(Thing hitThing, bool blockedByShield = false)
{
base.Impact(hitThing, blockedByShield); // 调用基类的Impact逻辑
if (ExplosiveDef.explosionRadius > 0f)
{
// 爆炸逻辑
GenExplosion.DoExplosion(
center: Position, // 爆炸中心
map: Map, // 地图
radius: ExplosiveDef.explosionRadius, // 爆炸半径
damType: ExplosiveDef.damageDef ?? DamageDefOf.Bomb, // 伤害类型如果未配置则默认为Bomb
instigator: launcher, // 制造者
damAmount: this.DamageAmount, // 伤害量,使用子弹当前的伤害量
armorPenetration: this.ArmorPenetration, // 护甲穿透,使用子弹当前的护甲穿透
explosionSound: ExplosiveDef.soundExplode, // 爆炸音效
weapon: equipmentDef, // 武器
projectile: def, // 弹药定义
intendedTarget: intendedTarget.Thing, // 预期目标
postExplosionSpawnThingDef: ExplosiveDef.postExplosionSpawnThingDef, // 爆炸后生成物
postExplosionSpawnChance: ExplosiveDef.postExplosionSpawnChance, // 爆炸后生成几率
postExplosionSpawnThingCount: ExplosiveDef.postExplosionSpawnThingCount, // 爆炸后生成数量
postExplosionGasType: ExplosiveDef.gasType, // 气体类型 (注意参数名已修正)
postExplosionGasRadiusOverride: null, // 爆炸气体半径覆盖 (我没有定义这个参数)
postExplosionGasAmount: 255, // 爆炸气体数量 (默认值)
applyDamageToExplosionCellsNeighbors: ExplosiveDef.applyDamageToExplosionCellsNeighbors, // 是否对爆炸单元格邻居造成伤害
preExplosionSpawnThingDef: null, // 爆炸前生成物 (我没有定义这个参数)
preExplosionSpawnChance: 0f, // 爆炸前生成几率 (默认值)
preExplosionSpawnThingCount: 0, // 爆炸前生成数量 (默认值)
chanceToStartFire: ExplosiveDef.explosionChanceToStartFire, // 是否有几率点燃 (注意参数名已修正)
damageFalloff: ExplosiveDef.explosionDamageFalloff, // 爆炸伤害衰减
direction: null, // 方向 (我没有定义这个参数)
ignoredThings: null, // 忽略的物体 (我没有定义这个参数)
affectedAngle: null, // 受影响角度 (我没有定义这个参数)
doVisualEffects: ExplosiveDef.doExplosionVFX, // 是否显示视觉效果
propagationSpeed: 1f, // 传播速度 (默认值)
excludeRadius: 0f, // 排除半径 (默认值)
doSoundEffects: true, // 是否播放音效 (默认值)
postExplosionSpawnThingDefWater: null, // 爆炸后在水中生成物 (我没有定义这个参数)
screenShakeFactor: 1f, // 屏幕震动因子 (默认值)
flammabilityChanceCurve: null, // 易燃性几率曲线 (我没有定义这个参数)
overrideCells: null, // 覆盖单元格 (我没有定义这个参数)
postExplosionSpawnSingleThingDef: null, // 爆炸后生成单个物体 (我没有定义这个参数)
preExplosionSpawnSingleThingDef: null // 爆炸前生成单个物体 (我没有定义这个参数)
);
}
}
}
}