Fix healing damage classes and damageable serialization and add test (#2727)
* Fix healing damage classes and damageable serialization and add test * The fall of an empire * Fix healPerType being -1 instead of 1
This commit is contained in:
@@ -15,6 +15,7 @@ namespace Content.Shared.Damage.DamageContainer
|
||||
[Serializable, NetSerializable]
|
||||
public class DamageContainerPrototype : IPrototype, IIndexedPrototype
|
||||
{
|
||||
private bool _supportAll;
|
||||
private HashSet<DamageClass> _supportedClasses;
|
||||
private HashSet<DamageType> _supportedTypes;
|
||||
private string _id;
|
||||
@@ -31,18 +32,26 @@ namespace Content.Shared.Damage.DamageContainer
|
||||
var serializer = YamlObjectSerializer.NewReader(mapping);
|
||||
|
||||
serializer.DataField(ref _id, "id", string.Empty);
|
||||
serializer.DataField(ref _supportAll, "supportAll", false);
|
||||
serializer.DataField(ref _supportedClasses, "supportedClasses", new HashSet<DamageClass>());
|
||||
serializer.DataField(ref _supportedTypes, "supportedTypes", new HashSet<DamageType>());
|
||||
|
||||
var originalTypes = _supportedTypes.ToArray();
|
||||
|
||||
foreach (var supportedClass in _supportedClasses)
|
||||
foreach (var supportedType in supportedClass.ToTypes())
|
||||
if (_supportAll)
|
||||
{
|
||||
_supportedTypes.Add(supportedType);
|
||||
_supportedClasses.UnionWith(Enum.GetValues<DamageClass>());
|
||||
_supportedTypes.UnionWith(Enum.GetValues<DamageType>());
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var originalType in originalTypes)
|
||||
foreach (var supportedClass in _supportedClasses)
|
||||
{
|
||||
foreach (var supportedType in supportedClass.ToTypes())
|
||||
{
|
||||
_supportedTypes.Add(supportedType);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var originalType in _supportedTypes)
|
||||
{
|
||||
_supportedClasses.Add(originalType.ToClass());
|
||||
}
|
||||
|
||||
@@ -58,14 +58,16 @@ namespace Content.Shared.Damage
|
||||
var classes = DamageClassExtensions.ToDictionary();
|
||||
|
||||
foreach (var @class in classes.Keys.ToList())
|
||||
foreach (var type in @class.ToTypes())
|
||||
{
|
||||
if (!types.TryGetValue(type, out var damage))
|
||||
foreach (var type in @class.ToTypes())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (!types.TryGetValue(type, out var damage))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
classes[@class] += damage;
|
||||
classes[@class] += damage;
|
||||
}
|
||||
}
|
||||
|
||||
return classes;
|
||||
|
||||
Reference in New Issue
Block a user