using System.Collections;
using System.Collections.Generic;
using UnityEngine;
///
/// 战斗报告
///
public class BattleReport {
/// 战斗消息
public List messages;
}
///
/// 战斗消息
///
public class BattleMessage {
/// 战斗消息内容
public string content;
/// 战斗消息内容
public override string ToString() {
return content;
}
// 辅助方法:随机选择一个字符串,增加多样性
public string RandomChoice(params string[] options) {
if (options.Length == 0) return "";
return options[Random.Range(0, options.Length)];
}
}
///
/// 未命中攻击 - 战斗消息
///
public class MissAttack : BattleMessage {
public MissAttack(string attacker, int hit, string weapon, string attacked, int armorClass) {
// 托尔吉使用巨斧猛击(19)没有命中哥布林战士(AC12)
content = $"{attacker}使用{weapon}({hit})没有命中{attacked}({armorClass})";
}
}
///
/// 命中攻击 - 战斗消息
///
public class HitAttack : BattleMessage {
public HitAttack(string attacker, int hit, string weapon, string attacked, int armorClass, int damage, DamageType damageType) {
string damageTypeString = damageType == DamageType.无 ? "" : damageType.ToString();
// 托尔吉使用巨斧猛击(19)对哥布林战士(AC12)造成了 14钝击伤害
content = $"{attacker}使用{weapon}({hit})对{attacked}({armorClass})造成了{damage}{damageTypeString}伤害";
}
}
///
/// 普通攻击 - 战斗消息
///
public class MessageNormalAttack : BattleMessage {
/// 攻击者
public DataCombatRole attacker;
/// 命中值
public int hit;
/// 伤害值
public int damage;
/// 被攻击者
public DataCombatRole attacked;
/// 护甲等级
public int armorClass;
/// 设置攻击者
public void Settings(DataCombatRole attacker, int hit, int damage) {
this.attacker = attacker;
this.hit = hit;
this.damage = damage;
}
/// 设置被攻击者
public void Settings(DataCombatRole attacked, int armorClass) {
this.attacked = attacked;
this.armorClass = armorClass;
}
public override string ToString() {
return $"{attacker.name}{Dynamics()}{attacked.name}({armorClass}),{attacked.name}{Result()}";
}
/// 动态修饰词
private string Dynamics() {
return $"使用长剑劈向({hit})";
}
/// 结果修饰词
private string Result() {
return hit <= armorClass ? Miss() : Hit();
}
// 未命中的多种情况
private string Miss() {
string[] missText = new string[] {
"轻松避开了这一击!",
"巧妙地闪开了!",
"险之又险地躲过了!",
"成功格挡住了!"
};
return RandomChoice(missText);
}
// 命中的情况,可根据伤害量或是否暴击细分
private string Hit() {
string[] hitText = new string[] {
$"躲避不及遭受到了{damage}点伤害!",
$"被狠狠击中,承受了{damage}点伤害!",
$"格挡失败受到了{damage}点伤害!",
};
return RandomChoice(hitText);
}
}