Files
MuHua-UIElements/Assets/ModuleCore/ModuleBattle/BattleReport.cs
T
MuHua-123 c0bc7cb05d 1
2025-07-28 17:11:36 +08:00

105 lines
3.2 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 System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 战斗报告
/// </summary>
public class BattleReport {
/// <summary> 战斗消息 </summary>
public List<BattleMessage> messages;
}
/// <summary>
/// 战斗消息
/// </summary>
public class BattleMessage {
/// <summary> 战斗消息内容 </summary>
public string content;
/// <summary> 战斗消息内容 </summary>
public override string ToString() {
return content;
}
// 辅助方法:随机选择一个字符串,增加多样性
public string RandomChoice(params string[] options) {
if (options.Length == 0) return "";
return options[Random.Range(0, options.Length)];
}
}
/// <summary>
/// 未命中攻击 - 战斗消息
/// </summary>
public class MissAttack : BattleMessage {
public MissAttack(string attacker, int hit, string weapon, string attacked, int armorClass) {
// 托尔吉使用巨斧猛击(19)没有命中哥布林战士(AC12)
content = $"{attacker}使用{weapon}({hit})没有命中{attacked}({armorClass})";
}
}
/// <summary>
/// 命中攻击 - 战斗消息
/// </summary>
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}伤害";
}
}
/// <summary>
/// 普通攻击 - 战斗消息
/// </summary>
public class MessageNormalAttack : BattleMessage {
/// <summary> 攻击者 </summary>
public DataCombatRole attacker;
/// <summary> 命中值 </summary>
public int hit;
/// <summary> 伤害值 </summary>
public int damage;
/// <summary> 被攻击者 </summary>
public DataCombatRole attacked;
/// <summary> 护甲等级 </summary>
public int armorClass;
/// <summary> 设置攻击者 </summary>
public void Settings(DataCombatRole attacker, int hit, int damage) {
this.attacker = attacker;
this.hit = hit;
this.damage = damage;
}
/// <summary> 设置被攻击者 </summary>
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()}";
}
/// <summary> 动态修饰词 </summary>
private string Dynamics() {
return $"使用长剑劈向({hit})";
}
/// <summary> 结果修饰词 </summary>
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);
}
}