mirror of
https://github.com/project-redbud/FunGame-Core.git
synced 2025-04-20 02:59:34 +08:00
增强特效在角色状态和特效类型上的管理
This commit is contained in:
parent
f4320e8212
commit
c13d5bacdc
@ -151,12 +151,13 @@ namespace Milimoe.FunGame.Core.Entity
|
||||
public CharacterState CharacterState { get; set; } = CharacterState.Actionable;
|
||||
|
||||
/// <summary>
|
||||
/// 角色目前被特效施加的状态 [ 用于设置角色是否被控制的状态 ]
|
||||
/// 角色目前被特效施加的状态 [ 用于设置角色的状态,这些状态会影响角色的行动 ]
|
||||
/// </summary>
|
||||
public Dictionary<Effect, List<CharacterState>> CharacterEffectStates { get; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// 角色目前被特效施加的控制效果 [ 用于特效判断是否需要在移除特效时更改角色状态 ]
|
||||
/// 角色目前被特效施加的控制效果 [ 用于特效在不同的钩子中更改角色的行为 ]
|
||||
/// <para/>我们需要明确控制效果不一定能造成角色的状态改变(影响角色的行动),但是这些控制状态需要由特效在不同的地方改变角色的行为
|
||||
/// </summary>
|
||||
public Dictionary<Effect, List<EffectType>> CharacterEffectTypes { get; } = [];
|
||||
|
||||
@ -1769,7 +1770,7 @@ namespace Milimoe.FunGame.Core.Entity
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新角色的状态
|
||||
/// 更新角色的状态,参见 <see cref="CharacterEffectStates"/>、<see cref="CharacterEffectTypes"/> 用法
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public CharacterState UpdateCharacterState()
|
||||
@ -1804,7 +1805,7 @@ namespace Milimoe.FunGame.Core.Entity
|
||||
{
|
||||
CharacterState = CharacterState.ActionRestricted;
|
||||
}
|
||||
else if (isBattleRestricted)
|
||||
else if (isBattleRestricted || (isSkillRestricted && isAttackRestricted))
|
||||
{
|
||||
CharacterState = CharacterState.BattleRestricted;
|
||||
}
|
||||
|
@ -468,7 +468,7 @@ namespace Milimoe.FunGame.Core.Entity
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打断施法 [ 尽可能的调用此方法而不是直接调用 <see cref="IGamingQueue.InterruptCastingAsync"/>,以防止中断性变更 ]
|
||||
/// 打断施法 [ 尽可能的调用此方法而不是直接调用 <see cref="IGamingQueue.InterruptCastingAsync(Character, Character)"/>,以防止中断性变更 ]
|
||||
/// </summary>
|
||||
/// <param name="caster"></param>
|
||||
/// <param name="interrupter"></param>
|
||||
@ -477,6 +477,57 @@ namespace Milimoe.FunGame.Core.Entity
|
||||
GamingQueue?.InterruptCastingAsync(caster, interrupter);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打断施法 [ 用于使敌人目标丢失 ] [ 尽可能的调用此方法而不是直接调用 <see cref="IGamingQueue.InterruptCastingAsync(Character)"/>,以防止中断性变更 ]
|
||||
/// </summary>
|
||||
/// <param name="interrupter"></param>
|
||||
public void InterruptCasting(Character interrupter)
|
||||
{
|
||||
GamingQueue?.InterruptCastingAsync(interrupter);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将特效状态设置到角色上 [ 尽可能的调用此方法而不是自己实现 ]
|
||||
/// </summary>
|
||||
/// <param name="character"></param>
|
||||
/// <param name="states"></param>
|
||||
public void AddEffectStatesToCharacter(Character character, List<CharacterState> states)
|
||||
{
|
||||
character.CharacterEffectStates.Add(this, states);
|
||||
character.UpdateCharacterState();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将特效状态从角色身上移除 [ 尽可能的调用此方法而不是自己实现 ]
|
||||
/// </summary>
|
||||
/// <param name="character"></param>
|
||||
public void RemoveEffectStatesFromCharacter(Character character)
|
||||
{
|
||||
character.CharacterEffectStates.Remove(this);
|
||||
character.UpdateCharacterState();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将特效控制效果设置到角色上 [ 尽可能的调用此方法而不是自己实现 ]
|
||||
/// </summary>
|
||||
/// <param name="character"></param>
|
||||
/// <param name="types"></param>
|
||||
public void AddEffectTypeToCharacter(Character character, List<EffectType> types)
|
||||
{
|
||||
character.CharacterEffectTypes.Add(this, types);
|
||||
character.UpdateCharacterState();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将特效控制效果从角色身上移除 [ 尽可能的调用此方法而不是自己实现 ]
|
||||
/// </summary>
|
||||
/// <param name="character"></param>
|
||||
public void RemoveEffectTypesFromCharacter(Character character)
|
||||
{
|
||||
character.CharacterEffectTypes.Remove(this);
|
||||
character.UpdateCharacterState();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检查角色是否在 AI 控制状态
|
||||
/// </summary>
|
||||
|
Loading…
x
Reference in New Issue
Block a user