mirror of
https://github.com/tym1116/BH3.git
synced 2025-12-12 22:44:35 +01:00
83 lines
2.2 KiB
C#
83 lines
2.2 KiB
C#
using System;
|
|
using MoleMole.Config;
|
|
|
|
namespace MoleMole
|
|
{
|
|
public class AbilityLimitWithMaskTriggerMixin : BaseAbilityMixin
|
|
{
|
|
public LimitTimeWithMaskTriggerMixin config;
|
|
|
|
private int _originEvaLimitCount;
|
|
|
|
private int _countLeft;
|
|
|
|
private EntityTimer _maskTimer;
|
|
|
|
private EntityTimer _countTimer;
|
|
|
|
private bool _isMasked;
|
|
|
|
public AbilityLimitWithMaskTriggerMixin(ActorAbility instancedAbility, ActorModifier instancedModifier, ConfigAbilityMixin config)
|
|
: base(instancedAbility, instancedModifier, config)
|
|
{
|
|
this.config = (LimitTimeWithMaskTriggerMixin)config;
|
|
_maskTimer = new EntityTimer(this.config.MaskDuration, entity);
|
|
_countTimer = new EntityTimer(this.config.CountTime, entity);
|
|
}
|
|
|
|
public override void OnAdded()
|
|
{
|
|
BaseMonoAbilityEntity baseMonoAbilityEntity = entity;
|
|
baseMonoAbilityEntity.onCurrentSkillIDChanged = (Action<string, string>)Delegate.Combine(baseMonoAbilityEntity.onCurrentSkillIDChanged, new Action<string, string>(SkillIDChangedCallback));
|
|
_originEvaLimitCount = instancedAbility.Evaluate(config.EvadeLimitCount);
|
|
_countLeft = _originEvaLimitCount;
|
|
}
|
|
|
|
public override void OnRemoved()
|
|
{
|
|
BaseMonoAbilityEntity baseMonoAbilityEntity = entity;
|
|
baseMonoAbilityEntity.onCurrentSkillIDChanged = (Action<string, string>)Delegate.Remove(baseMonoAbilityEntity.onCurrentSkillIDChanged, new Action<string, string>(SkillIDChangedCallback));
|
|
if (_maskTimer.isActive)
|
|
{
|
|
entity.UnmaskTrigger(config.MaskTriggerID);
|
|
_isMasked = false;
|
|
_maskTimer.Reset(false);
|
|
}
|
|
}
|
|
|
|
public override void Core()
|
|
{
|
|
_maskTimer.Core(1f);
|
|
_countTimer.Core(1f);
|
|
if (_maskTimer.isTimeUp)
|
|
{
|
|
entity.UnmaskTrigger(config.MaskTriggerID);
|
|
_isMasked = false;
|
|
_maskTimer.Reset(false);
|
|
}
|
|
if (_countTimer.isTimeUp)
|
|
{
|
|
_countLeft = _originEvaLimitCount;
|
|
}
|
|
}
|
|
|
|
private void SkillIDChangedCallback(string from, string to)
|
|
{
|
|
if (to == config.SkillID)
|
|
{
|
|
if (_countLeft == _originEvaLimitCount)
|
|
{
|
|
_countTimer.Reset(true);
|
|
}
|
|
_countLeft--;
|
|
if (_countLeft <= 0 && !_isMasked)
|
|
{
|
|
entity.MaskTrigger(config.MaskTriggerID);
|
|
_isMasked = true;
|
|
_maskTimer.Reset(true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|