using Verse; using RimWorld; using System.Collections.Generic; namespace ArachnaeSwarm { /// /// ��������ڶ��������XML�� �ڵ������õ��Զ������ԡ� /// public class ProjectileProperties_ConfigurableHellsphereCannon : ProjectileProperties { // --- �������֣������� explosionChanceToStartFire --- // ʹ�� 'new' �ؼ��������ز��滻�����ͬ���ֶ� public new float explosionRadius = 4.9f; public new float explosionChanceToStartFire = 0f; // <--- �������У�ʹ�����XML������ public new bool applyDamageToExplosionCellsNeighbors = false; public new ThingDef preExplosionSpawnThingDef = null; public new float preExplosionSpawnChance = 0f; public new int preExplosionSpawnThingCount = 1; public new ThingDef postExplosionSpawnThingDef = null; public new float postExplosionSpawnChance = 0f; public new int postExplosionSpawnThingCount = 1; public new GasType? postExplosionGasType = null; public new float screenShakeFactor = 1f; public new ThingDef postExplosionSpawnThingDefWater = null; public new ThingDef postExplosionSpawnSingleThingDef = null; public new ThingDef preExplosionSpawnSingleThingDef = null; // ��Щ�������ӵ�ȫ���ֶΣ�����Ҫ 'new' �ؼ��� public SoundDef explosionSound = null; public bool damageFalloff = false; public bool doVisualEffects = true; public bool doSoundEffects = true; public float? postExplosionGasRadiusOverride = null; public int postExplosionGasAmount = 255; public float? direction = null; public FloatRange? affectedAngle = null; public float excludeRadius = 0f; public SimpleCurve flammabilityChanceCurve = null; } /// /// ����Ͷ����ĺ����߼��࣬��XML�е� ָ���� /// public class Projectile_ConfigurableHellsphereCannon : Projectile { public ProjectileProperties_ConfigurableHellsphereCannon Props => (ProjectileProperties_ConfigurableHellsphereCannon)def.projectile; protected override void Impact(Thing hitThing, bool blockedByShield = false) { Map map = base.Map; base.Impact(hitThing, blockedByShield); GenExplosion.DoExplosion( center: base.Position, map: map, radius: Props.explosionRadius, damType: base.DamageDef, instigator: launcher, damAmount: DamageAmount, armorPenetration: ArmorPenetration, explosionSound: Props.explosionSound, weapon: equipmentDef, projectile: def, intendedTarget: intendedTarget.Thing, postExplosionSpawnThingDef: Props.postExplosionSpawnThingDef, postExplosionSpawnChance: Props.postExplosionSpawnChance, postExplosionSpawnThingCount: Props.postExplosionSpawnThingCount, postExplosionGasType: Props.postExplosionGasType, postExplosionGasRadiusOverride: Props.postExplosionGasRadiusOverride, postExplosionGasAmount: Props.postExplosionGasAmount, applyDamageToExplosionCellsNeighbors: Props.applyDamageToExplosionCellsNeighbors, preExplosionSpawnThingDef: Props.preExplosionSpawnThingDef, preExplosionSpawnChance: Props.preExplosionSpawnChance, preExplosionSpawnThingCount: Props.preExplosionSpawnThingCount, // --- �������֣�ʹ������ȷ���ֶ� --- chanceToStartFire: Props.explosionChanceToStartFire, // <--- �����˴��� damageFalloff: Props.damageFalloff, direction: Props.direction, affectedAngle: Props.affectedAngle, doVisualEffects: Props.doVisualEffects, propagationSpeed: base.DamageDef.expolosionPropagationSpeed, excludeRadius: Props.excludeRadius, doSoundEffects: Props.doSoundEffects, postExplosionSpawnThingDefWater: Props.postExplosionSpawnThingDefWater, screenShakeFactor: Props.screenShakeFactor, flammabilityChanceCurve: Props.flammabilityChanceCurve, postExplosionSpawnSingleThingDef: Props.postExplosionSpawnSingleThingDef, preExplosionSpawnSingleThingDef: Props.preExplosionSpawnSingleThingDef ); } } }