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