Another quick fix for markings (#7966)

This commit is contained in:
Flipp Syder
2022-05-05 22:25:59 -07:00
committed by GitHub
parent 856df8921a
commit e1b7abe2d9
3 changed files with 22 additions and 14 deletions

View File

@@ -74,7 +74,7 @@ namespace Content.Client.Markings
// if the given marking isn't correctly formed, we need to
// instead just allocate a new marking based on the old one
// with the correct sprite count
if (marking.MarkingColors.Count != markingPrototype.Sprites.Count)
{
marking = new Marking(marking.MarkingId, markingPrototype.Sprites.Count);

View File

@@ -175,7 +175,6 @@ namespace Content.Server.Database
// ReSharper disable once ConditionalAccessQualifierIsNonNullableAccordingToAPIContract
var markingsRaw = profile.Markings?.Deserialize<List<string>>();
profile.Markings?.Dispose();
List<Marking> markings = new();
if (markingsRaw != null)

View File

@@ -124,25 +124,34 @@ public class MarkingsSet : IEnumerable, IEquatable<MarkingsSet>
// Ensures that all markings in a set are valid.
public static MarkingsSet EnsureValid(MarkingsSet set, MarkingManager? manager = null)
{
if (manager == null)
IoCManager.Resolve(ref manager);
for (var i = set._markings.Count - 1; i >= 0; i--)
{
manager = IoCManager.Resolve<MarkingManager>();
var marking = set._markings[i];
if (manager.IsValidMarking(marking, out var markingProto))
{
if (marking.MarkingColors.Count != markingProto.Sprites.Count)
{
set._markings[i] = new Marking(marking.MarkingId, markingProto.Sprites.Count);
}
}
else
{
set._markings.RemoveAt(i);
}
}
var newList = set._markings.Where(marking => manager.Markings().ContainsKey(marking.MarkingId)).ToList();
set._markings = newList;
return set;
}
// Filters out markings based on species.
public static MarkingsSet FilterSpecies(MarkingsSet set, string species)
public static MarkingsSet FilterSpecies(MarkingsSet set, string species, MarkingManager? manager = null)
{
var _markingsManager = IoCManager.Resolve<MarkingManager>();
IoCManager.Resolve(ref manager);
var newList = set._markings.Where(marking =>
{
if (!_markingsManager.Markings().TryGetValue(marking.MarkingId, out MarkingPrototype? prototype))
if (!manager.Markings().TryGetValue(marking.MarkingId, out MarkingPrototype? prototype))
{
return false;
}
@@ -164,14 +173,14 @@ public class MarkingsSet : IEnumerable, IEquatable<MarkingsSet>
}
// Processes a MarkingsSet using the given dictionary of MarkingPoints.
public static MarkingsSet ProcessPoints(MarkingsSet set, Dictionary<MarkingCategories, MarkingPoints> points)
public static MarkingsSet ProcessPoints(MarkingsSet set, Dictionary<MarkingCategories, MarkingPoints> points, MarkingManager? manager = null)
{
IoCManager.Resolve(ref manager);
var finalSet = new List<Marking>();
var _markingsManager = IoCManager.Resolve<MarkingManager>();
foreach (var marking in set)
{
if (_markingsManager.Markings().TryGetValue(marking.MarkingId, out MarkingPrototype? markingPrototype))
if (manager.Markings().TryGetValue(marking.MarkingId, out MarkingPrototype? markingPrototype))
{
if (points.TryGetValue(markingPrototype.MarkingCategory, out var pointsRemaining))
{