Makes humanoid appearance component networked. (#13009)

Fixes https://github.com/space-wizards/space-station-14/issues/12248
This commit is contained in:
Leon Friedrich
2023-01-24 13:38:19 +13:00
committed by GitHub
parent 7ce8f7634a
commit 48bcd30ef9
50 changed files with 878 additions and 1074 deletions

View File

@@ -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))
{