Clean up property names + defaults of smudge smoke

This commit is contained in:
reaperrr
2020-08-23 13:13:34 +02:00
committed by abcdefg30
parent 7395a3ed2d
commit 6337067032
8 changed files with 89 additions and 21 deletions

View File

@@ -32,13 +32,15 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Sprite sequence name")]
public readonly string Sequence = "scorch";
public readonly int SmokePercentage = 25;
[Desc("Chance of smoke rising from the ground")]
public readonly int SmokeChance = 0;
[Desc("Sprite sequence name")]
public readonly string SmokeType = "smoke_m";
[Desc("Smoke sprite image name")]
public readonly string SmokeImage = null;
[SequenceReference(nameof(SmokeType))]
public readonly string SmokeSequence = "idle";
[SequenceReference(nameof(SmokeImage))]
[Desc("Smoke sprite sequences randomly chosen from")]
public readonly string[] SmokeSequences = { };
[PaletteReference]
public readonly string SmokePalette = "effect";
@@ -89,6 +91,7 @@ namespace OpenRA.Mods.Common.Traits
readonly Dictionary<CPos, Smudge> dirty = new Dictionary<CPos, Smudge>();
readonly Dictionary<string, ISpriteSequence> smudges = new Dictionary<string, ISpriteSequence>();
readonly World world;
readonly bool hasSmoke;
TerrainSpriteLayer render;
bool disposed;
@@ -97,6 +100,7 @@ namespace OpenRA.Mods.Common.Traits
{
Info = info;
world = self.World;
hasSmoke = !string.IsNullOrEmpty(info.SmokeImage) && info.SmokeSequences.Any();
var sequenceProvider = world.Map.Rules.Sequences;
var types = sequenceProvider.Sequences(Info.Sequence);
@@ -144,8 +148,9 @@ namespace OpenRA.Mods.Common.Traits
if (!world.Map.Contains(loc))
return;
if (Game.CosmeticRandom.Next(0, 100) <= Info.SmokePercentage)
world.AddFrameEndTask(w => w.Add(new SpriteEffect(world.Map.CenterOfCell(loc), w, Info.SmokeType, Info.SmokeSequence, Info.SmokePalette)));
if (hasSmoke && Game.CosmeticRandom.Next(0, 100) <= Info.SmokeChance)
world.AddFrameEndTask(w => w.Add(new SpriteEffect(
w.Map.CenterOfCell(loc), w, Info.SmokeImage, Info.SmokeSequences.Random(w.SharedRandom), Info.SmokePalette)));
// A null Sequence indicates a deleted smudge.
if ((!dirty.ContainsKey(loc) || dirty[loc].Sequence == null) && !tiles.ContainsKey(loc))

View File

@@ -0,0 +1,54 @@
#region Copyright & License Information
/*
* Copyright 2007-2020 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version. For more
* information, see COPYING.
*/
#endregion
using System.Collections.Generic;
namespace OpenRA.Mods.Common.UpdateRules.Rules
{
public class RenameSmudgeSmokeFields : UpdateRule
{
public override string Name { get { return "Renamed smoke-related properties on SmudgeLayer."; } }
public override string Description
{
get
{
return "Renamed smoke-related properties on SmudgeLayer to be in line with comparable properties.\n" +
"Additionally, set the *Chance, *Image and *Sequences defaults to null.";
}
}
public override IEnumerable<string> UpdateActorNode(ModData modData, MiniYamlNode actorNode)
{
foreach (var layer in actorNode.ChildrenMatching("SmudgeLayer"))
{
var chance = layer.LastChildMatching("SmokePercentage");
if (chance != null)
chance.RenameKey("SmokeChance");
else
layer.AddNode("SmokeChance", FieldSaver.FormatValue("25"));
var image = layer.LastChildMatching("SmokeType");
if (image != null)
image.RenameKey("SmokeImage");
else
layer.AddNode("SmokeImage", FieldSaver.FormatValue("smoke_m"));
var sequences = layer.LastChildMatching("SmokeSequence");
if (sequences != null)
sequences.RenameKey("SmokeSequences");
else
layer.AddNode("SmokeSequences", FieldSaver.FormatValue("idle"));
}
yield break;
}
}
}

View File

@@ -74,6 +74,7 @@ namespace OpenRA.Mods.Common.UpdateRules
new ReplaceBurns(),
new RemoveMuzzleSplitFacings(),
new RemoveTurnToDock(),
new RenameSmudgeSmokeFields(),
})
};