Add support for multiple explosions to CreateEffectWarhead
Have the engine pick one explosion at random from the provided list.
This commit is contained in:
@@ -3432,6 +3432,18 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
||||
node.Value.Nodes.RemoveAll(x => x.Key == "Charges");
|
||||
}
|
||||
|
||||
// Enhance CreateEffectWarhead
|
||||
if (engineVersion < 20160131)
|
||||
{
|
||||
if (node.Key.StartsWith("Warhead") && node.Value.Value == "CreateEffect")
|
||||
{
|
||||
// Add support for multiple explosions to CreateEffectWarhead
|
||||
var explosionNode = node.Value.Nodes.FirstOrDefault(x => x.Key == "Explosion");
|
||||
if (explosionNode != null)
|
||||
explosionNode.Key = "Explosions";
|
||||
}
|
||||
}
|
||||
|
||||
UpgradeWeaponRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,11 +17,11 @@ namespace OpenRA.Mods.Common.Warheads
|
||||
{
|
||||
public class CreateEffectWarhead : Warhead
|
||||
{
|
||||
[Desc("Explosion effect to use.")]
|
||||
public readonly string Explosion = null;
|
||||
[Desc("List of explosion effects that can be used.")]
|
||||
public readonly string[] Explosions = new string[0];
|
||||
|
||||
[Desc("Palette to use for explosion effect.")]
|
||||
[PaletteReference("UsePlayerPalette")] public readonly string ExplosionPalette = "effect";
|
||||
[Desc("Palette to use for explosion effect."), PaletteReference("UsePlayerPalette")]
|
||||
public readonly string ExplosionPalette = "effect";
|
||||
|
||||
[Desc("Remap explosion effect to player color, if art supports it.")]
|
||||
public readonly bool UsePlayerPalette = false;
|
||||
@@ -99,8 +99,9 @@ namespace OpenRA.Mods.Common.Warheads
|
||||
if (UsePlayerPalette)
|
||||
palette += firedBy.Owner.InternalName;
|
||||
|
||||
if (Explosion != null)
|
||||
world.AddFrameEndTask(w => w.Add(new Explosion(w, pos, Explosion, palette)));
|
||||
var explosion = Explosions.RandomOrDefault(Game.CosmeticRandom);
|
||||
if (explosion != null)
|
||||
world.AddFrameEndTask(w => w.Add(new Explosion(w, pos, explosion, palette)));
|
||||
|
||||
if (ImpactSound != null)
|
||||
Game.Sound.Play(ImpactSound, pos);
|
||||
|
||||
Reference in New Issue
Block a user