Makes humanoid appearance component networked. (#13009)
Fixes https://github.com/space-wizards/space-station-14/issues/12248
This commit is contained in:
@@ -24,6 +24,7 @@ namespace Content.Shared.Humanoid.Markings;
|
||||
/// This is serializable for the admin panel that sets markings on demand for a player.
|
||||
/// Most APIs that accept a set of markings usually use a List of type Marking instead.
|
||||
/// </remarks>
|
||||
[DataDefinition]
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class MarkingSet
|
||||
{
|
||||
@@ -40,16 +41,14 @@ public sealed class MarkingSet
|
||||
/// feature of markings, which is the limit of markings you can put on a
|
||||
/// humanoid.
|
||||
/// </remarks>
|
||||
private Dictionary<MarkingCategories, List<Marking>> _markings = new();
|
||||
|
||||
// why i didn't encapsulate this in the first place, i won't know
|
||||
[DataField("markings")]
|
||||
public Dictionary<MarkingCategories, List<Marking>> Markings = new();
|
||||
|
||||
/// <summary>
|
||||
/// Marking points for each category.
|
||||
/// </summary>
|
||||
private Dictionary<MarkingCategories, MarkingPoints> _points = new();
|
||||
|
||||
public IReadOnlyList<Marking> this[MarkingCategories category] => _markings[category];
|
||||
[DataField("points")]
|
||||
public Dictionary<MarkingCategories, MarkingPoints> Points = new();
|
||||
|
||||
public MarkingSet()
|
||||
{}
|
||||
@@ -71,7 +70,7 @@ public sealed class MarkingSet
|
||||
return;
|
||||
}
|
||||
|
||||
_points = MarkingPoints.CloneMarkingPointDictionary(points.Points);
|
||||
Points = MarkingPoints.CloneMarkingPointDictionary(points.Points);
|
||||
|
||||
foreach (var marking in markings)
|
||||
{
|
||||
@@ -111,7 +110,7 @@ public sealed class MarkingSet
|
||||
/// <param name="other">The other marking set.</param>
|
||||
public MarkingSet(MarkingSet other)
|
||||
{
|
||||
foreach (var (key, list) in other._markings)
|
||||
foreach (var (key, list) in other.Markings)
|
||||
{
|
||||
foreach (var marking in list)
|
||||
{
|
||||
@@ -119,7 +118,7 @@ public sealed class MarkingSet
|
||||
}
|
||||
}
|
||||
|
||||
_points = MarkingPoints.CloneMarkingPointDictionary(other._points);
|
||||
Points = MarkingPoints.CloneMarkingPointDictionary(other.Points);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -137,7 +136,7 @@ public sealed class MarkingSet
|
||||
var speciesProto = prototypeManager.Index<SpeciesPrototype>(species);
|
||||
var onlyWhitelisted = prototypeManager.Index<MarkingPointsPrototype>(speciesProto.MarkingPoints).OnlyWhitelisted;
|
||||
|
||||
foreach (var (category, list) in _markings)
|
||||
foreach (var (category, list) in Markings)
|
||||
{
|
||||
foreach (var marking in list)
|
||||
{
|
||||
@@ -175,7 +174,7 @@ public sealed class MarkingSet
|
||||
IoCManager.Resolve(ref markingManager);
|
||||
|
||||
var toRemove = new List<int>();
|
||||
foreach (var (category, list) in _markings)
|
||||
foreach (var (category, list) in Markings)
|
||||
{
|
||||
for (var i = 0; i < list.Count; i++)
|
||||
{
|
||||
@@ -207,7 +206,7 @@ public sealed class MarkingSet
|
||||
{
|
||||
IoCManager.Resolve(ref markingManager);
|
||||
|
||||
foreach (var (category, points) in _points)
|
||||
foreach (var (category, points) in Points)
|
||||
{
|
||||
if (points.Points <= 0 || points.DefaultMarkings.Count <= 0)
|
||||
{
|
||||
@@ -251,7 +250,7 @@ public sealed class MarkingSet
|
||||
/// <returns>A number equal or greater than zero if the category exists, -1 otherwise.</returns>
|
||||
public int PointsLeft(MarkingCategories category)
|
||||
{
|
||||
if (!_points.TryGetValue(category, out var points))
|
||||
if (!Points.TryGetValue(category, out var points))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
@@ -266,7 +265,7 @@ public sealed class MarkingSet
|
||||
/// <param name="marking">The marking instance in question.</param>
|
||||
public void AddFront(MarkingCategories category, Marking marking)
|
||||
{
|
||||
if (!marking.Forced && _points.TryGetValue(category, out var points))
|
||||
if (!marking.Forced && Points.TryGetValue(category, out var points))
|
||||
{
|
||||
if (points.Points <= 0)
|
||||
{
|
||||
@@ -276,10 +275,10 @@ public sealed class MarkingSet
|
||||
points.Points--;
|
||||
}
|
||||
|
||||
if (!_markings.TryGetValue(category, out var markings))
|
||||
if (!Markings.TryGetValue(category, out var markings))
|
||||
{
|
||||
markings = new();
|
||||
_markings[category] = markings;
|
||||
Markings[category] = markings;
|
||||
}
|
||||
|
||||
markings.Insert(0, marking);
|
||||
@@ -292,7 +291,7 @@ public sealed class MarkingSet
|
||||
/// <param name="marking"></param>
|
||||
public void AddBack(MarkingCategories category, Marking marking)
|
||||
{
|
||||
if (!marking.Forced && _points.TryGetValue(category, out var points))
|
||||
if (!marking.Forced && Points.TryGetValue(category, out var points))
|
||||
{
|
||||
if (points.Points <= 0)
|
||||
{
|
||||
@@ -302,10 +301,10 @@ public sealed class MarkingSet
|
||||
points.Points--;
|
||||
}
|
||||
|
||||
if (!_markings.TryGetValue(category, out var markings))
|
||||
if (!Markings.TryGetValue(category, out var markings))
|
||||
{
|
||||
markings = new();
|
||||
_markings[category] = markings;
|
||||
Markings[category] = markings;
|
||||
}
|
||||
|
||||
|
||||
@@ -320,7 +319,7 @@ public sealed class MarkingSet
|
||||
public List<Marking> AddCategory(MarkingCategories category)
|
||||
{
|
||||
var markings = new List<Marking>();
|
||||
_markings.Add(category, markings);
|
||||
Markings.Add(category, markings);
|
||||
return markings;
|
||||
}
|
||||
|
||||
@@ -332,7 +331,7 @@ public sealed class MarkingSet
|
||||
/// <param name="marking">The marking to insert.</param>
|
||||
public void Replace(MarkingCategories category, int index, Marking marking)
|
||||
{
|
||||
if (index < 0 || !_markings.TryGetValue(category, out var markings)
|
||||
if (index < 0 || !Markings.TryGetValue(category, out var markings)
|
||||
|| index >= markings.Count)
|
||||
{
|
||||
return;
|
||||
@@ -349,7 +348,7 @@ public sealed class MarkingSet
|
||||
/// <returns>True if removed, false otherwise.</returns>
|
||||
public bool Remove(MarkingCategories category, string id)
|
||||
{
|
||||
if (!_markings.TryGetValue(category, out var markings))
|
||||
if (!Markings.TryGetValue(category, out var markings))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -361,7 +360,7 @@ public sealed class MarkingSet
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!markings[i].Forced && _points.TryGetValue(category, out var points))
|
||||
if (!markings[i].Forced && Points.TryGetValue(category, out var points))
|
||||
{
|
||||
points.Points++;
|
||||
}
|
||||
@@ -381,7 +380,7 @@ public sealed class MarkingSet
|
||||
/// <returns>True if removed, false otherwise.</returns>
|
||||
public void Remove(MarkingCategories category, int idx)
|
||||
{
|
||||
if (!_markings.TryGetValue(category, out var markings))
|
||||
if (!Markings.TryGetValue(category, out var markings))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -391,7 +390,7 @@ public sealed class MarkingSet
|
||||
return;
|
||||
}
|
||||
|
||||
if (!markings[idx].Forced && _points.TryGetValue(category, out var points))
|
||||
if (!markings[idx].Forced && Points.TryGetValue(category, out var points))
|
||||
{
|
||||
points.Points++;
|
||||
}
|
||||
@@ -406,12 +405,12 @@ public sealed class MarkingSet
|
||||
/// <returns>True if removed, false otherwise.</returns>
|
||||
public bool RemoveCategory(MarkingCategories category)
|
||||
{
|
||||
if (!_markings.TryGetValue(category, out var markings))
|
||||
if (!Markings.TryGetValue(category, out var markings))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_points.TryGetValue(category, out var points))
|
||||
if (Points.TryGetValue(category, out var points))
|
||||
{
|
||||
foreach (var marking in markings)
|
||||
{
|
||||
@@ -424,7 +423,7 @@ public sealed class MarkingSet
|
||||
}
|
||||
}
|
||||
|
||||
_markings.Remove(category);
|
||||
Markings.Remove(category);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -447,7 +446,7 @@ public sealed class MarkingSet
|
||||
/// <returns>The index of the marking, otherwise a negative number.</returns>
|
||||
public int FindIndexOf(MarkingCategories category, string id)
|
||||
{
|
||||
if (!_markings.TryGetValue(category, out var markings))
|
||||
if (!Markings.TryGetValue(category, out var markings))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
@@ -465,7 +464,7 @@ public sealed class MarkingSet
|
||||
{
|
||||
markings = null;
|
||||
|
||||
if (_markings.TryGetValue(category, out var list))
|
||||
if (Markings.TryGetValue(category, out var list))
|
||||
{
|
||||
markings = list;
|
||||
return true;
|
||||
@@ -485,7 +484,7 @@ public sealed class MarkingSet
|
||||
{
|
||||
marking = null;
|
||||
|
||||
if (!_markings.TryGetValue(category, out var markings))
|
||||
if (!Markings.TryGetValue(category, out var markings))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -509,7 +508,7 @@ public sealed class MarkingSet
|
||||
/// <param name="idx">Index of the marking.</param>
|
||||
public void ShiftRankUp(MarkingCategories category, int idx)
|
||||
{
|
||||
if (!_markings.TryGetValue(category, out var markings))
|
||||
if (!Markings.TryGetValue(category, out var markings))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -529,7 +528,7 @@ public sealed class MarkingSet
|
||||
/// <param name="idx">Index of the marking from the end</param>
|
||||
public void ShiftRankUpFromEnd(MarkingCategories category, int idx)
|
||||
{
|
||||
if (!_markings.TryGetValue(category, out var markings))
|
||||
if (!Markings.TryGetValue(category, out var markings))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -544,7 +543,7 @@ public sealed class MarkingSet
|
||||
/// <param name="idx">Index of the marking.</param>
|
||||
public void ShiftRankDown(MarkingCategories category, int idx)
|
||||
{
|
||||
if (!_markings.TryGetValue(category, out var markings))
|
||||
if (!Markings.TryGetValue(category, out var markings))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -564,7 +563,7 @@ public sealed class MarkingSet
|
||||
/// <param name="idx">Index of the marking from the end</param>
|
||||
public void ShiftRankDownFromEnd(MarkingCategories category, int idx)
|
||||
{
|
||||
if (!_markings.TryGetValue(category, out var markings))
|
||||
if (!Markings.TryGetValue(category, out var markings))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -579,7 +578,7 @@ public sealed class MarkingSet
|
||||
public ForwardMarkingEnumerator GetForwardEnumerator()
|
||||
{
|
||||
var markings = new List<Marking>();
|
||||
foreach (var (_, list) in _markings)
|
||||
foreach (var (_, list) in Markings)
|
||||
{
|
||||
markings.AddRange(list);
|
||||
}
|
||||
@@ -595,7 +594,7 @@ public sealed class MarkingSet
|
||||
public ForwardMarkingEnumerator GetForwardEnumerator(MarkingCategories category)
|
||||
{
|
||||
var markings = new List<Marking>();
|
||||
if (_markings.TryGetValue(category, out var listing))
|
||||
if (Markings.TryGetValue(category, out var listing))
|
||||
{
|
||||
markings = new(listing);
|
||||
}
|
||||
@@ -610,7 +609,7 @@ public sealed class MarkingSet
|
||||
public ReverseMarkingEnumerator GetReverseEnumerator()
|
||||
{
|
||||
var markings = new List<Marking>();
|
||||
foreach (var (_, list) in _markings)
|
||||
foreach (var (_, list) in Markings)
|
||||
{
|
||||
markings.AddRange(list);
|
||||
}
|
||||
@@ -626,7 +625,7 @@ public sealed class MarkingSet
|
||||
public ReverseMarkingEnumerator GetReverseEnumerator(MarkingCategories category)
|
||||
{
|
||||
var markings = new List<Marking>();
|
||||
if (_markings.TryGetValue(category, out var listing))
|
||||
if (Markings.TryGetValue(category, out var listing))
|
||||
{
|
||||
markings = new(listing);
|
||||
}
|
||||
@@ -636,8 +635,8 @@ public sealed class MarkingSet
|
||||
|
||||
public bool CategoryEquals(MarkingCategories category, MarkingSet other)
|
||||
{
|
||||
if (!_markings.TryGetValue(category, out var markings)
|
||||
|| !other._markings.TryGetValue(category, out var markingsOther))
|
||||
if (!Markings.TryGetValue(category, out var markings)
|
||||
|| !other.Markings.TryGetValue(category, out var markingsOther))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -647,7 +646,7 @@ public sealed class MarkingSet
|
||||
|
||||
public bool Equals(MarkingSet other)
|
||||
{
|
||||
foreach (var (category, _) in _markings)
|
||||
foreach (var (category, _) in Markings)
|
||||
{
|
||||
if (!CategoryEquals(category, other))
|
||||
{
|
||||
@@ -665,7 +664,7 @@ public sealed class MarkingSet
|
||||
/// <returns>Enumerator of marking categories that were different between the two.</returns>
|
||||
public IEnumerable<MarkingCategories> CategoryDifference(MarkingSet other)
|
||||
{
|
||||
foreach (var (category, _) in _markings)
|
||||
foreach (var (category, _) in Markings)
|
||||
{
|
||||
if (!CategoryEquals(category, other))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user