46 lines
2.0 KiB
C#
46 lines
2.0 KiB
C#
namespace Barotrauma.Abilities
|
|
{
|
|
class CharacterAbilityModifyResistance : CharacterAbility
|
|
{
|
|
private readonly Identifier resistanceId;
|
|
private readonly float multiplier;
|
|
bool lastState;
|
|
public override bool AllowClientSimulation => true;
|
|
|
|
// should probably be split to different classes
|
|
public CharacterAbilityModifyResistance(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement)
|
|
{
|
|
resistanceId = abilityElement.GetAttributeIdentifier("resistanceid", abilityElement.GetAttributeIdentifier("resistance", Identifier.Empty));
|
|
multiplier = abilityElement.GetAttributeFloat("multiplier", 1f);
|
|
|
|
if (resistanceId.IsEmpty)
|
|
{
|
|
DebugConsole.ThrowError($"Error in talent {CharacterTalent.DebugIdentifier} - resistance identifier not set in {nameof(CharacterAbilityModifyResistance)}.",
|
|
contentPackage: abilityElement.ContentPackage);
|
|
}
|
|
if (MathUtils.NearlyEqual(multiplier, 1.0f))
|
|
{
|
|
DebugConsole.AddWarning($"Possible error in talent {CharacterTalent.DebugIdentifier} - resistance set to 1, which will do nothing.",
|
|
contentPackage: abilityElement.ContentPackage);
|
|
}
|
|
}
|
|
|
|
public override void UpdateCharacterAbility(bool conditionsMatched, float timeSinceLastUpdate)
|
|
{
|
|
if (conditionsMatched != lastState)
|
|
{
|
|
TalentResistanceIdentifier identifier = new(resistanceId, CharacterTalent.Prefab.Identifier);
|
|
if (conditionsMatched)
|
|
{
|
|
Character.ChangeAbilityResistance(identifier, multiplier);
|
|
}
|
|
else
|
|
{
|
|
Character.RemoveAbilityResistance(identifier);
|
|
}
|
|
lastState = conditionsMatched;
|
|
}
|
|
}
|
|
}
|
|
}
|