FunGame-Core/Interface/Base/IGamingQueue.cs
milimoe 769d0e4281
添加免疫、驱散;顺序表、爆发技、助攻修改 (#129)
* 特效底层支持直接修改硬直时间;添加驱散类型

* 添加 debuff

* 明确了驱散定义;添加助攻窗口期;修改预释放爆发技为不可驱散;预释放爆发技一定是最先行动;修复复活时导致硬直时间变成负数的问题

* 调整驱散描述

* 实现驱散系统;修复角色百分比公式错误;添加非伤害类助攻;添加辅助数据统计;修改一些文本显示

* 添加免疫、吸血、护盾机制

* 继续完善免疫和驱散、护盾和特效钩子等

* 添加新特效类型
2025-04-26 03:07:10 +08:00

186 lines
6.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Model;
namespace Milimoe.FunGame.Core.Interface.Base
{
/// <summary>
/// 回合制游戏的基础队列
/// </summary>
public interface IGamingQueue
{
/// <summary>
/// 使用的游戏平衡常数
/// </summary>
public EquilibriumConstant GameplayEquilibriumConstant { get; }
/// <summary>
/// 用于文本输出
/// </summary>
public Action<string> WriteLine { get; }
/// <summary>
/// 原始的角色字典
/// </summary>
public Dictionary<Guid, Character> Original { get; }
/// <summary>
/// 当前的行动顺序
/// </summary>
public List<Character> Queue { get; }
/// <summary>
/// 上回合记录
/// </summary>
public RoundRecord LastRound { get; set; }
/// <summary>
/// 所有回合的记录
/// </summary>
public List<RoundRecord> Rounds { get; }
/// <summary>
/// 当前已死亡的角色顺序(第一个是最早死的)
/// </summary>
public List<Character> Eliminated { get; }
/// <summary>
/// 角色数据
/// </summary>
public Dictionary<Character, CharacterStatistics> CharacterStatistics { get; }
/// <summary>
/// 游戏运行的时间
/// </summary>
public double TotalTime { get; }
/// <summary>
/// 游戏运行的回合
/// 对于某角色而言,在其行动的回合叫 Turn而所有角色行动的回合都称之为 Round。
/// </summary>
public int TotalRound { get; }
/// <summary>
/// 显示队列信息
/// </summary>
public void DisplayQueue();
/// <summary>
/// 处理回合动作
/// </summary>
/// <param name="character"></param>
/// <returns></returns>
public Task<bool> ProcessTurnAsync(Character character);
/// <summary>
/// 造成伤害
/// </summary>
/// <param name="actor"></param>
/// <param name="enemy"></param>
/// <param name="damage"></param>
/// <param name="isNormalAttack"></param>
/// <param name="isMagicDamage"></param>
/// <param name="magicType"></param>
/// <param name="damageResult"></param>
public Task DamageToEnemyAsync(Character actor, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage = false, MagicType magicType = MagicType.None, DamageResult damageResult = DamageResult.Normal);
/// <summary>
/// 治疗一个目标
/// </summary>
/// <param name="actor"></param>
/// <param name="target"></param>
/// <param name="heal"></param>
/// <param name="canRespawn"></param>
public Task HealToTargetAsync(Character actor, Character target, double heal, bool canRespawn = false);
/// <summary>
/// 计算物理伤害
/// </summary>
/// <param name="actor"></param>
/// <param name="enemy"></param>
/// <param name="isNormalAttack"></param>
/// <param name="expectedDamage"></param>
/// <param name="finalDamage"></param>
/// <param name="changeCount"></param>
/// <returns></returns>
public DamageResult CalculatePhysicalDamage(Character actor, Character enemy, bool isNormalAttack, double expectedDamage, out double finalDamage, ref int changeCount);
/// <summary>
/// 计算魔法伤害
/// </summary>
/// <param name="actor"></param>
/// <param name="enemy"></param>
/// <param name="isNormalAttack"></param>
/// <param name="magicType"></param>
/// <param name="expectedDamage"></param>
/// <param name="finalDamage"></param>
/// <param name="changeCount"></param>
/// <returns></returns>
public DamageResult CalculateMagicalDamage(Character actor, Character enemy, bool isNormalAttack, MagicType magicType, double expectedDamage, out double finalDamage, ref int changeCount);
/// <summary>
/// 死亡结算
/// </summary>
/// <param name="killer"></param>
/// <param name="death"></param>
public Task DeathCalculationAsync(Character killer, Character death);
/// <summary>
/// 打断施法
/// </summary>
/// <param name="caster"></param>
/// <param name="interrupter"></param>
public Task InterruptCastingAsync(Character caster, Character interrupter);
/// <summary>
/// 打断施法 [ 用于使敌人目标丢失 ]
/// </summary>
/// <param name="interrupter"></param>
public Task InterruptCastingAsync(Character interrupter);
/// <summary>
/// 使用物品
/// </summary>
/// <param name="item"></param>
/// <param name="caster"></param>
/// <param name="enemys"></param>
/// <param name="teammates"></param>
/// <returns></returns>
public Task<bool> UseItemAsync(Item item, Character caster, List<Character> enemys, List<Character> teammates);
/// <summary>
/// 选取技能目标
/// </summary>
/// <param name="caster"></param>
/// <param name="skill"></param>
/// <param name="enemys"></param>
/// <param name="teammates"></param>
/// <returns></returns>
public Task<List<Character>> SelectTargetsAsync(Character caster, Skill skill, List<Character> enemys, List<Character> teammates);
/// <summary>
/// 选取普通攻击目标
/// </summary>
/// <param name="character"></param>
/// <param name="attack"></param>
/// <param name="enemys"></param>
/// <param name="teammates"></param>
/// <returns></returns>
public Task<List<Character>> SelectTargetsAsync(Character character, NormalAttack attack, List<Character> enemys, List<Character> teammates);
/// <summary>
/// 检查角色是否在 AI 控制状态
/// </summary>
/// <returns></returns>
public bool IsCharacterInAIControlling(Character character);
/// <summary>
/// 修改角色的硬直时间
/// </summary>
/// <param name="character">角色</param>
/// <param name="addValue">加值</param>
/// <param name="isCheckProtected">是否使用插队保护机制</param>
public void ChangeCharacterHardnessTime(Character character, double addValue, bool isCheckProtected);
}
}