43 lines
1.6 KiB
C#
43 lines
1.6 KiB
C#
namespace Features.Fire.Harmony
|
|
{
|
|
// Allows the spread of the particles to catch things on fire.
|
|
[HarmonyPatch(typeof(Explosion))]
|
|
[HarmonyPatch("AttackBlocks")]
|
|
public class SCoreExplosionattackBlocks
|
|
{
|
|
public static void Postfix(Explosion __instance, int _entityThatCausedExplosion, ExplosionData ___explosionData)
|
|
{
|
|
if (FireManager.Instance == null) return;
|
|
if (FireManager.Instance.Enabled == false) return;
|
|
|
|
// BlockDamage set to 0 does nothing.
|
|
if (___explosionData.BlockDamage == 0) return;
|
|
if (___explosionData.ParticleIndex == 0) return;
|
|
|
|
var entityAlive = GameManager.Instance.World.GetEntity(_entityThatCausedExplosion) as EntityAlive;
|
|
if (entityAlive != null)
|
|
{
|
|
if (entityAlive.EntityClass.Properties.Contains("SpreadFire"))
|
|
{
|
|
if (entityAlive.EntityClass.Properties.GetBool("SpreadFire") == false)
|
|
return;
|
|
}
|
|
|
|
if (entityAlive.Buffs.HasCustomVar("SpreadFire"))
|
|
{
|
|
var spreadFire = entityAlive.Buffs.GetCustomVar("SpreadFire");
|
|
if (spreadFire == -1f) return;
|
|
}
|
|
}
|
|
|
|
foreach (var position in __instance.ChangedBlockPositions)
|
|
{
|
|
// Negative block damages extinguishes
|
|
if (___explosionData.BlockDamage < 0f)
|
|
FireManager.Instance.Extinguish(position.Key);
|
|
else
|
|
FireManager.Instance.Add(position.Key);
|
|
}
|
|
}
|
|
}
|
|
} |