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:
DrSmugleaf
2020-12-11 02:09:43 +01:00
committed by GitHub
parent bb905c9628
commit adc972f9d3
7 changed files with 198 additions and 21 deletions

View File

@@ -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());
}

View File

@@ -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;