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 // if the given marking isn't correctly formed, we need to
// instead just allocate a new marking based on the old one // instead just allocate a new marking based on the old one
// with the correct sprite count
if (marking.MarkingColors.Count != markingPrototype.Sprites.Count) if (marking.MarkingColors.Count != markingPrototype.Sprites.Count)
{ {
marking = new Marking(marking.MarkingId, 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 // ReSharper disable once ConditionalAccessQualifierIsNonNullableAccordingToAPIContract
var markingsRaw = profile.Markings?.Deserialize<List<string>>(); var markingsRaw = profile.Markings?.Deserialize<List<string>>();
profile.Markings?.Dispose();
List<Marking> markings = new(); List<Marking> markings = new();
if (markingsRaw != null) if (markingsRaw != null)

View File

@@ -124,25 +124,34 @@ public class MarkingsSet : IEnumerable, IEquatable<MarkingsSet>
// Ensures that all markings in a set are valid. // Ensures that all markings in a set are valid.
public static MarkingsSet EnsureValid(MarkingsSet set, MarkingManager? manager = null) 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; return set;
} }
// Filters out markings based on species. // 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 => 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; return false;
} }
@@ -164,14 +173,14 @@ public class MarkingsSet : IEnumerable, IEquatable<MarkingsSet>
} }
// Processes a MarkingsSet using the given dictionary of MarkingPoints. // 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 finalSet = new List<Marking>();
var _markingsManager = IoCManager.Resolve<MarkingManager>();
foreach (var marking in set) 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)) if (points.TryGetValue(markingPrototype.MarkingCategory, out var pointsRemaining))
{ {