yyl
2025-05-15 d341a47ed9bbb740f2ccb9d6d42fd74d5a1c6b5d
update
76 文件已重命名
7个文件已修改
11个文件已删除
9 文件已复制
11个文件已添加
2217 ■■■■■ 已修改文件
Main/Battle/BattleField/BattleField.cs 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/BattleField/BattleField.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/BattleMode.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/BattleMode.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/BattleObject/BattleObjMgr.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/BattleObject/BattleObjMgr.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/BattleObject/BattleObject.cs 237 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/BattleObject/BattleObjectFactory.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/BattleObject/BattleObjectFactory.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/BattleObject/CardObject.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/BattleObject/CardObject.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/Motion/MotionBase.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/RecordPlayer.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/RecordPlayer/RecordAction.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/RecordPlayer/RecordAction.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/RecordPlayer/RecordActionType.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/RecordPlayer/RecordActionType.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/RecordPlayer/RecordPlayer.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/RecordPlayer/RecordPlayer.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Card/CardInfo.Properties.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Common/EventBroadcast.cs 271 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Common/EventBroadcast.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Common/EventName.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Common/EventName.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Common/FieldPrint.cs 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Main.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Manager/GameSystemManager/BattleManager.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Manager/GameSystemManager/PlaceManager.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Manager/GameSystemManager/PlaceManager.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/NetworkPackage/GameNetSystem.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Place/PlaceDataStructs.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Place/PlaceDataStructs.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Place/PlaceDrop.cs 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Place/PlaceDrop.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Place/PlaceField.cs 406 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Place/PlaceField.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Place/PlaceUnit.cs 516 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Place/PlaceUnit.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Team/TeamBase.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/Bezier.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/Bezier.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/BezierMove.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/BezierMove.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/CameraManager.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/CameraManager.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/ColorUtility.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/ColorUtility.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/ComponentExtersion.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/ComponentExtersion.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/Datumline.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/Datumline.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/DeviceUtility.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/DeviceUtility.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/DontDestroyOnLoad.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/DontDestroyOnLoad.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/DrawUtility.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/DrawUtility.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/EffectRenderSort.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/EffectRenderSort.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/EnumHelper.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/EnumHelper.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/EnumLabelAttribute.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/EnumLabelAttribute.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/Extension.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/Extension.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/FPS.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/FPS.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/FieldPrint.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/FieldPrint.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/FileExtersion.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/FileExtersion.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/GameObjectPool.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/GameObjectPool.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/GenerateUICode.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/GenerateUICode.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/GlobalTimeEvent.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/GlobalTimeEvent.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/LayerUtility.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/LayerUtility.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/LocalSave.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/LocalSave.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/MathUtility.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/MathUtility.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/MathUtils.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/MathUtils.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/PathUtility.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/PathUtility.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/ProfilerPanel.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/ProfilerPanel.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/RenderOrder.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/RenderOrder.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/RenderTextureCreator.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/RenderTextureCreator.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/ResolutionUtility.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/ResolutionUtility.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/SnxxzUtility.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/SnxxzUtility.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/SystemCMD.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/SystemCMD.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/TAny.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/TAny.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/TBlackBoard.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/TBlackBoard.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/TransformExtension.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/TransformExtension.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/UGUIEventListenerContainDrag.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/UGUIEventListenerContainDrag.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/UIParamCopyTool.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/UIParamCopyTool.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/VectorUtility.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/VectorUtility.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/VesselExtension.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/VesselExtension.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/Battle/BattleField/BattleField.cs
New file
@@ -0,0 +1,82 @@
using System.Collections.Generic;
public class BattleField
{
    protected int battleId = 0;
    public BattleMode battleMode;
    public BattleObjMgr battleObjMgr;
    public RecordPlayer recordPlayer;
    public int round = 0;
    public BattleField()
    {
    }
    public void Init(int _battleId, int _levelId, BattleMode _battleMode, TeamBase _redTeam, TeamBase _blueTeam = null)
    {
        battleId = _battleId;
        battleMode = _battleMode;
        battleObjMgr = new BattleObjMgr();
        battleObjMgr.Init(_levelId, _redTeam, _blueTeam);
        recordPlayer = new RecordPlayer();
        recordPlayer.Init(this);
    }
    public void Release()
    {
        battleObjMgr.Release();
    }
    public void Run()
    {
        recordPlayer.Run();
        battleObjMgr.Run();
    }
    public void SetBattleMode(BattleMode _battleMode)
    {
        battleMode = _battleMode;
    }
    public void PlayRecord(RecordAction recordAction)
    {
        recordPlayer.PlayRecord(recordAction);
    }
    public void PlayRecord(List<RecordAction> recordList)
    {
        recordPlayer.PlayRecord(recordList);
    }
    public void OnActionOver(int attackId)
    {
        //
// 手动推点一下发一个包 收一个包 播放一次报文 之后就停住 直到战斗结束的包文
// 自动的话 自动发包 播放报文 后 请求下一个包 循环 直到战斗结束的包文
// 战报播放就是一直播放战报 知道战斗结束的包文
        if (battleMode == BattleMode.Auto)
        {
            // Request next action
        }
        else if (battleMode == BattleMode.Record)
        {
            // Play next record
        }
        else
        {
            // Wait for user input
        }
    }
    public void StartGame()
    {
        recordPlayer.StartGame();
    }
}
Main/Battle/BattleField/BattleField.cs.meta
copy from Main/Common/FieldPrint.cs.meta copy to Main/Battle/BattleField/BattleField.cs.meta
File was copied from Main/Common/FieldPrint.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e8426254dd294aa428e2078f8e48cd5e
guid: a222b256266318646b4bf911fa60ab2e
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Main/Battle/BattleMode.cs
New file
@@ -0,0 +1,8 @@
public enum BattleMode
{
    Hand,//手动战斗
    Auto,//自动战斗
    Record,//战报
}
Main/Battle/BattleMode.cs.meta
File was renamed from Main/Common/FieldPrint.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e8426254dd294aa428e2078f8e48cd5e
guid: 65a0a52783bfbb94786f267d566ce93a
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Main/Battle/BattleObject/BattleObjMgr.cs
New file
@@ -0,0 +1,83 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BattleObjMgr : Singleton<BattleObjMgr>
{
    private List<BattleObject> redCampList => new List<BattleObject>(redCampDict.Values);
    private List<BattleObject> blueCampList => new List<BattleObject>(blueCampDict.Values);
    private Dictionary<int, BattleObject> redCampDict = new Dictionary<int, BattleObject>();
    private Dictionary<int, BattleObject> blueCampDict = new Dictionary<int, BattleObject>();
    public void Init(int _levelId, TeamBase _redTeam, TeamBase _blueTeam = null)
    {
        if (_levelId == 0 && _blueTeam == null)
        {
            Debug.LogError("BattleObjMgr Init Error: _levelId == 0 && _blueTeam == null 关卡id没有(不是PVE) 也没有蓝色队伍信息(也不是PVP))");
            return;
        }
        if (_levelId != 0 && _blueTeam != null)
        {
            Debug.LogError("BattleObjMgr Init Error: _levelId!= 0 && _blueTeam != null 关卡id有(是PVE) 也有蓝色队伍信息(也不是PVP))");
            return;
        }
        if (_levelId != 0)
        {
            _blueTeam = new TeamBase();
            _blueTeam.InitByLevelId(_levelId);
        }
        CreateTeam(redCampDict, _redTeam);
        CreateTeam(blueCampDict, _blueTeam);
    }
    protected void CreateTeam(Dictionary<int, BattleObject> campDict, TeamBase teamBase)
    {
        DestroyTeam(campDict);
        for (int i = 0; i < teamBase.teamCards.Length; i++)
        {
            TeamCard teamCard = teamBase.teamCards[i];
            if (teamCard != null)
            {
                BattleObject battleObj = BattleObjectFactory.CreateBattleObject(teamCard);
                battleObj.Init(teamCard);
                campDict.Add(teamCard.cardIndex, battleObj);
            }
        }
    }
    protected void DestroyTeam(Dictionary<int, BattleObject> campDict)
    {
        foreach (var item in campDict)
        {
            BattleObject battleObj = item.Value;
            if (battleObj!= null)
            {
                BattleObjectFactory.DestroyBattleObject(battleObj);
            }
        }
        campDict.Clear();
    }
    public void Release()
    {
        DestroyTeam(redCampDict);
        DestroyTeam(blueCampDict);
    }
    public void Run()
    {
        foreach (var item in redCampDict)
        {
            item.Value.Run();
        }
        foreach (var item in blueCampDict)
        {
            item.Value.Run();
        }
    }
}
Main/Battle/BattleObject/BattleObjMgr.cs.meta
copy from Main/Common/FieldPrint.cs.meta copy to Main/Battle/BattleObject/BattleObjMgr.cs.meta
File was copied from Main/Common/FieldPrint.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e8426254dd294aa428e2078f8e48cd5e
guid: bd22d86c92725e347a15a74138ba1896
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Main/Battle/BattleObject/BattleObject.cs
@@ -2,206 +2,129 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using DG.Tweening.Core;
using DG.Tweening.Plugins.Options;
/// <summary>
/// 战斗对象阵营枚举
/// </summary>
public enum BattleCamp
{
    Friendly,   // 友方
    Enemy       // 敌方
    Friendly,
    Enemy
}
/// <summary>
/// 战斗状态枚举
/// </summary>
[Flags]
public enum BattleState
{
    None = 0,
    Stunned = 1 << 0,     // 眩晕
    Poisoned = 1 << 1,    // 中毒
    Bleeding = 1 << 2,    // 流血
    Silenced = 1 << 3,    // 沉默
    Frozen = 1 << 4,      // 冰冻
    Burned = 1 << 5       // 灼烧
    Stunned = 1 << 0,
    Poisoned = 1 << 1,
    Bleeding = 1 << 2,
    Silenced = 1 << 3,
    Frozen = 1 << 4,
    Burned = 1 << 5
}
/// <summary>
/// 战斗对象基类
/// </summary>
public class BattleObject
{
    /// <summary>
    /// 战斗对象ID
    /// </summary>
    public string BattleObjectId { get; protected set; }
    
    /// <summary>
    /// 战斗对象阵营
    /// </summary>
    public BattleCamp Camp { get; protected set; } = BattleCamp.Friendly;
    
    // Buff系统
    // List<BuffInfo> buffList;         // 所有buff列表
    // List<BuffInfo> gainBuffList;     // 增益buff列表
    // List<BuffInfo> debuffList;       // 减益buff列表
    public TeamCard teamCard { get; protected set; }
    
    /// <summary>
    /// 初始化战斗对象
    /// </summary>
    /// <param name="id">战斗对象ID</param>
    /// <param name="camp">战斗对象阵营</param>
    public virtual void Initialize(string id, BattleCamp camp)
    protected MotionBase motionBase;
    protected GameObject cardGO;
    public virtual void Init(TeamCard _teamCard)
    {
        BattleObjectId = id;
        Camp = camp;
        // 初始化Buff列表
        // buffList = new List<BuffInfo>();
        // gainBuffList = new List<BuffInfo>();
        // debuffList = new List<BuffInfo>();
        this.teamCard = _teamCard;
        motionBase = new MotionBase();
    }
    
    protected void LoadCard()
    {
    
    }
    
    #region Buff系统(待实现)
    // /// <summary>
    // /// 添加Buff
    // /// </summary>
    // /// <param name="buff">Buff信息</param>
    // public virtual void AddBuff(BuffInfo buff)
    // {
    //     // 添加Buff到列表
    //     // 根据Buff类型添加到对应列表
    //     // 应用Buff效果
    // }
    //
    // /// <summary>
    // /// 移除Buff
    // /// </summary>
    // /// <param name="buffId">Buff ID</param>
    // public virtual void RemoveBuff(string buffId)
    // {
    //     // 从列表中移除Buff
    //     // 移除Buff效果
    // }
    //
    // /// <summary>
    // /// 更新所有Buff
    // /// </summary>
    // public virtual void UpdateBuffs()
    // {
    //     // 更新所有Buff的持续时间
    //     // 移除已过期的Buff
    //     // 应用Buff的持续效果
    // }
    //
    // /// <summary>
    // /// 获取所有Buff
    // /// </summary>
    // /// <returns>Buff列表</returns>
    // public virtual List<BuffInfo> GetAllBuffs()
    // {
    //     return buffList;
    // }
    //
    // /// <summary>
    // /// 获取所有增益Buff
    // /// </summary>
    // /// <returns>增益Buff列表</returns>
    // public virtual List<BuffInfo> GetGainBuffs()
    // {
    //     return gainBuffList;
    // }
    //
    // /// <summary>
    // /// 获取所有减益Buff
    // /// </summary>
    // /// <returns>减益Buff列表</returns>
    // public virtual List<BuffInfo> GetDebuffs()
    // {
    //     return debuffList;
    // }
    #endregion
    
    #region 战斗相关函数
    
    /// <summary>
    /// 攻击目标
    /// </summary>
    /// <param name="target">攻击目标</param>
    /// <param name="damage">伤害值</param>
    /// <param name="isCritical">是否暴击</param>
    /// <returns>实际造成的伤害</returns>
    public virtual float AttackTarget(BattleObject target)
    public virtual void AttackTarget(List<BattleObject> targets)
    {
        // 子类实现具体逻辑
        return 0;
        // 找离自己最近的
        if (0 == targets.Count) return;
        BattleObject target = targets[0];
        if (1 != targets.Count)
        {
            for (int i = 1; i < targets.Count; i++)
            {
                if (Vector3.Distance(cardGO.transform.position, targets[i].cardGO.transform.position) < Vector3.Distance(cardGO.transform.position, target.cardGO.transform.position))
                {
                    target = targets[i];
                }
            }
    }
    
    /// <summary>
    /// 被攻击
    /// </summary>
    /// <param name="attacker">攻击者</param>
    /// <param name="damage">伤害值</param>
    /// <param name="isCritical">是否暴击</param>
    /// <returns>实际受到的伤害</returns>
        Vector3 tempPos = cardGO.transform.position;
        motionBase.OnAttackAnimationComplete = () => {
            // 攻击动画结束之后 回到原来的位置
            cardGO.transform.DOMove(tempPos, 1f).OnComplete(() => {
                // motionBase.ClearEvent();// = null;
                //  通知本次攻击行动结束
                //  通过battleFieldId来告知BattleFieldMgr
            });
        };
        cardGO.transform.DOMove(target.cardGO.transform.position, 1f).OnComplete(() => {
            // 播放攻击动画
            motionBase.OnAttackHitEvent = (int attackIndex) => {
                for (int i = 0; i < targets.Count; i++)
                {
                    targets[i].UnderAttack(this);
                }
            };
            //普攻是hit1
            motionBase.PlayAnimationEx(MotionName.atk1, false, new List<int>(){
                5//假设是5帧 目前还没有数据
            });
        });
    }
    public virtual void CastSkill(List<BattleObject> targets)
    {
        //  需不需要move 攻击目标是谁
    }
    public virtual float UnderAttack(BattleObject attacker)
    {
        // 子类实现具体逻辑
        return 0;
    }
    
    /// <summary>
    /// 治疗目标
    /// </summary>
    /// <param name="target">治疗目标</param>
    /// <param name="healAmount">治疗量</param>
    /// <param name="isCritical">是否暴击</param>
    /// <returns>实际治疗量</returns>
    public virtual float HealTargets(List<BattleObject> targets)
    {
        // 子类实现具体逻辑
        return 0;
    }
    
    /// <summary>
    /// 被治疗
    /// </summary>
    /// <param name="healer">治疗者</param>
    /// <param name="healAmount">治疗量</param>
    /// <param name="isCritical">是否暴击</param>
    /// <returns>实际被治疗量</returns>
    public virtual float BeHealed(BattleObject healer, float healAmount)
    {
        // 子类实现具体逻辑
        return 0;
    }
    
    /// <summary>
    /// 复活目标
    /// </summary>
    /// <param name="target">复活目标</param>
    /// <param name="healthPercent">复活后的生命值百分比</param>
    /// <returns>是否复活成功</returns>
    public virtual bool Revive(BattleObject target)
    {
        // 子类实现具体逻辑
        return false;
    }
    
    /// <summary>
    /// 被复活
    /// </summary>
    /// <param name="reviver">复活者</param>
    /// <param name="healthPercent">复活后的生命值百分比</param>
    /// <returns>是否被复活成功</returns>
    public virtual bool BeRevived(BattleObject reviver, float healthPercent = 0.5f)
    {
        // 子类实现具体逻辑
        return false;
    }
    
@@ -209,35 +132,23 @@
    
    #region 辅助函数
    
    /// <summary>
    /// 判断是否为敌对关系
    /// </summary>
    /// <param name="other">其他战斗对象</param>
    /// <returns>是否为敌对关系</returns>
    public virtual bool IsEnemy(BattleObject other)
    {
        if (other == null) return false;
        
        // 不同阵营为敌对关系
        return Camp != other.Camp;
    }
    
    /// <summary>
    /// 判断是否为友好关系
    /// </summary>
    /// <param name="other">其他战斗对象</param>
    /// <returns>是否为友好关系</returns>
    public virtual bool IsFriendly(BattleObject other)
    {
        if (other == null) return false;
        
        // 相同阵营为友好关系
        return Camp == other.Camp;
    }
    public virtual void Run()
    {
        // 子类实现具体逻辑
        motionBase.Run();
    }
    
    #endregion
Main/Battle/BattleObject/BattleObjectFactory.cs
New file
@@ -0,0 +1,23 @@
using System.Collections.Generic;
using System;
using UnityEngine;
public class BattleObjectFactory
{
    public static BattleObject CreateBattleObject(TeamCard teamCard)
    {
        BattleObject battleObject = null;
        // switch (teamCard.cardInfo.cardConfig.)
        // {
        // }
        return battleObject;
    }
    public static void DestroyBattleObject(BattleObject battleObj)
    {
    }
}
Main/Battle/BattleObject/BattleObjectFactory.cs.meta
copy from Main/Common/FieldPrint.cs.meta copy to Main/Battle/BattleObject/BattleObjectFactory.cs.meta
File was copied from Main/Common/FieldPrint.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e8426254dd294aa428e2078f8e48cd5e
guid: c6bc9f2359387db48afd7d6762f5b566
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Main/Battle/BattleObject/CardObject.cs
Main/Battle/BattleObject/CardObject.cs.meta
copy from Main/Common/FieldPrint.cs.meta copy to Main/Battle/BattleObject/CardObject.cs.meta
File was copied from Main/Common/FieldPrint.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e8426254dd294aa428e2078f8e48cd5e
guid: 7379cb2482b831b43bb037d44c4239ec
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Main/Battle/Motion/MotionBase.cs
@@ -74,7 +74,7 @@
    /// 初始化动画组件
    /// </summary>
    /// <param name="skeletonGraphic">骨骼动画组件</param>
    public virtual void Initialize(SkeletonGraphic skeletonGraphic)
    public virtual void Init(SkeletonGraphic skeletonGraphic)
    {
        this.skeletonGraphic = skeletonGraphic;
        
Main/Battle/RecordPlayer.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4ee9cd11a2bf7a84fb6ff9b973614dcc
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Battle/RecordPlayer/RecordAction.cs
New file
@@ -0,0 +1,21 @@
using System.Collections.Generic;
using System;
public class RecordAction
{
    public RecordActionType actionType;
    public int casterId;
    public bool IsFinished()
    {
        return false;
    }
    public void Run()
    {
    }
}
Main/Battle/RecordPlayer/RecordAction.cs.meta
copy from Main/Common/FieldPrint.cs.meta copy to Main/Battle/RecordPlayer/RecordAction.cs.meta
File was copied from Main/Common/FieldPrint.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e8426254dd294aa428e2078f8e48cd5e
guid: a97982175afec5a4cb25b9a2479808d4
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Main/Battle/RecordPlayer/RecordActionType.cs
New file
@@ -0,0 +1,10 @@
public enum RecordActionType
{
    None,
    Attack,//攻击
    Heal,//治疗
    Buff,//增益&减益
    Guard,//格挡
    Skill,//技能
}
Main/Battle/RecordPlayer/RecordActionType.cs.meta
copy from Main/Common/FieldPrint.cs.meta copy to Main/Battle/RecordPlayer/RecordActionType.cs.meta
File was copied from Main/Common/FieldPrint.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e8426254dd294aa428e2078f8e48cd5e
guid: 4402c0d2b31ada242a0ed9c262de1d3a
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Main/Battle/RecordPlayer/RecordPlayer.cs
New file
@@ -0,0 +1,59 @@
using System.Collections.Generic;
using System;
using UnityEngine;
public class RecordPlayer
{
    protected BattleField battleField;
    private Queue<RecordAction> recordActionQueue = new Queue<RecordAction>();
    protected RecordAction currentRecordAction;
    public void Init(BattleField _battleField)
    {
        battleField = _battleField;
    }
    public void PlayRecord(RecordAction recordAction)
    {
        recordActionQueue.Enqueue(recordAction);
    }
    public void PlayRecord(List<RecordAction> recordActions)
    {
        for (int i = 0; i < recordActions.Count; i++)
        {
            recordActionQueue.Enqueue(recordActions[i]);
        }
    }
    public void StartGame()
    {
    }
    public void PlayNext()
    {
    }
    public void Run()
    {
        if (recordActionQueue.Count == 0)
        {
            return;
        }
        if (currentRecordAction == null || currentRecordAction.IsFinished())
        {
            currentRecordAction = recordActionQueue.Dequeue();
        }
        if (currentRecordAction != null)
        {
            currentRecordAction.Run();
        }
    }
}
Main/Battle/RecordPlayer/RecordPlayer.cs.meta
copy from Main/Common/FieldPrint.cs.meta copy to Main/Battle/RecordPlayer/RecordPlayer.cs.meta
File was copied from Main/Common/FieldPrint.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e8426254dd294aa428e2078f8e48cd5e
guid: 8379b2c101d7f194f884daf79705726c
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Main/Card/CardInfo.Properties.cs
@@ -8,6 +8,17 @@
    // 反击时必命中目标
    // 武将属性需时时计算,根据技能、BUFF、装备等属性来源改变而改变
    // 基础属性
    // 生命
    public int hp = 0;
    // 攻击力
    public int attack = 0;
    // 防御力
    public int defense = 0;
    // 速度
    public int speed = 0;
    //战斗属性
    //闪避概率
Main/Common/EventBroadcast.cs
New file
@@ -0,0 +1,271 @@
using System;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 事件广播系统
/// </summary>
public class EventBroadcast
{
    private static EventBroadcast _instance;
    public static EventBroadcast Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new EventBroadcast();
            }
            return _instance;
        }
    }
    // 事件字典,存储事件ID和对应的委托列表
    private Dictionary<string, Delegate> eventDict = new Dictionary<string, Delegate>();
    // 防止外部实例化
    private EventBroadcast() { }
    #region 添加监听
    /// <summary>
    /// 添加无参事件监听
    /// </summary>
    /// <param name="eventId">事件ID</param>
    /// <param name="callback">回调函数</param>
    public void AddListener(string eventId, Action callback)
    {
        OnListenerAdding(eventId, callback);
        eventDict[eventId] = (Action)eventDict[eventId] + callback;
    }
    /// <summary>
    /// 添加单参数事件监听
    /// </summary>
    public void AddListener<T>(string eventId, Action<T> callback)
    {
        OnListenerAdding(eventId, callback);
        eventDict[eventId] = (Action<T>)eventDict[eventId] + callback;
    }
    /// <summary>
    /// 添加双参数事件监听
    /// </summary>
    public void AddListener<T, U>(string eventId, Action<T, U> callback)
    {
        OnListenerAdding(eventId, callback);
        eventDict[eventId] = (Action<T, U>)eventDict[eventId] + callback;
    }
    /// <summary>
    /// 添加三参数事件监听
    /// </summary>
    public void AddListener<T, U, V>(string eventId, Action<T, U, V> callback)
    {
        OnListenerAdding(eventId, callback);
        eventDict[eventId] = (Action<T, U, V>)eventDict[eventId] + callback;
    }
    #endregion
    #region 移除监听
    /// <summary>
    /// 移除无参事件监听
    /// </summary>
    /// <param name="eventId">事件ID</param>
    /// <param name="callback">回调函数</param>
    public void RemoveListener(string eventId, Action callback)
    {
        if (OnListenerRemoving(eventId, callback))
        {
            eventDict[eventId] = (Action)eventDict[eventId] - callback;
            OnListenerRemoved(eventId);
        }
    }
    /// <summary>
    /// 移除单参数事件监听
    /// </summary>
    public void RemoveListener<T>(string eventId, Action<T> callback)
    {
        if (OnListenerRemoving(eventId, callback))
        {
            eventDict[eventId] = (Action<T>)eventDict[eventId] - callback;
            OnListenerRemoved(eventId);
        }
    }
    /// <summary>
    /// 移除双参数事件监听
    /// </summary>
    public void RemoveListener<T, U>(string eventId, Action<T, U> callback)
    {
        if (OnListenerRemoving(eventId, callback))
        {
            eventDict[eventId] = (Action<T, U>)eventDict[eventId] - callback;
            OnListenerRemoved(eventId);
        }
    }
    /// <summary>
    /// 移除三参数事件监听
    /// </summary>
    public void RemoveListener<T, U, V>(string eventId, Action<T, U, V> callback)
    {
        if (OnListenerRemoving(eventId, callback))
        {
            eventDict[eventId] = (Action<T, U, V>)eventDict[eventId] - callback;
            OnListenerRemoved(eventId);
        }
    }
    #endregion
    #region 触发事件
    /// <summary>
    /// 触发无参事件
    /// </summary>
    /// <param name="eventId">事件ID</param>
    public void Broadcast(string eventId)
    {
        if (eventDict.TryGetValue(eventId, out Delegate d))
        {
            Action callback = d as Action;
            if (callback != null)
            {
                callback();
            }
            else
            {
                Debug.LogError($"事件 {eventId} 的委托类型不匹配");
            }
        }
    }
    /// <summary>
    /// 触发单参数事件
    /// </summary>
    public void Broadcast<T>(string eventId, T arg)
    {
        if (eventDict.TryGetValue(eventId, out Delegate d))
        {
            Action<T> callback = d as Action<T>;
            if (callback != null)
            {
                callback(arg);
            }
            else
            {
                Debug.LogError($"事件 {eventId} 的委托类型不匹配");
            }
        }
    }
    /// <summary>
    /// 触发双参数事件
    /// </summary>
    public void Broadcast<T, U>(string eventId, T arg1, U arg2)
    {
        if (eventDict.TryGetValue(eventId, out Delegate d))
        {
            Action<T, U> callback = d as Action<T, U>;
            if (callback != null)
            {
                callback(arg1, arg2);
            }
            else
            {
                Debug.LogError($"事件 {eventId} 的委托类型不匹配");
            }
        }
    }
    /// <summary>
    /// 触发三参数事件
    /// </summary>
    public void Broadcast<T, U, V>(string eventId, T arg1, U arg2, V arg3)
    {
        if (eventDict.TryGetValue(eventId, out Delegate d))
        {
            Action<T, U, V> callback = d as Action<T, U, V>;
            if (callback != null)
            {
                callback(arg1, arg2, arg3);
            }
            else
            {
                Debug.LogError($"事件 {eventId} 的委托类型不匹配");
            }
        }
    }
    #endregion
    #region 辅助方法
    /// <summary>
    /// 添加监听前的处理
    /// </summary>
    private void OnListenerAdding(string eventId, Delegate callback)
    {
        if (!eventDict.ContainsKey(eventId))
        {
            eventDict.Add(eventId, null);
        }
        Delegate d = eventDict[eventId];
        if (d != null && d.GetType() != callback.GetType())
        {
            Debug.LogError($"尝试为事件 {eventId} 添加不同类型的委托,当前类型:{d.GetType()},尝试添加类型:{callback.GetType()}");
        }
    }
    /// <summary>
    /// 移除监听前的处理
    /// </summary>
    private bool OnListenerRemoving(string eventId, Delegate callback)
    {
        if (!eventDict.ContainsKey(eventId))
        {
            Debug.LogWarning($"尝试移除不存在的事件 {eventId}");
            return false;
        }
        Delegate d = eventDict[eventId];
        if (d == null)
        {
            Debug.LogWarning($"尝试移除事件 {eventId} 的空委托");
            return false;
        }
        else if (d.GetType() != callback.GetType())
        {
            Debug.LogError($"尝试为事件 {eventId} 移除不同类型的委托,当前类型:{d.GetType()},尝试移除类型:{callback.GetType()}");
            return false;
        }
        return true;
    }
    /// <summary>
    /// 移除监听后的处理
    /// </summary>
    private void OnListenerRemoved(string eventId)
    {
        if (eventDict[eventId] == null)
        {
            eventDict.Remove(eventId);
        }
    }
    /// <summary>
    /// 清空所有事件
    /// </summary>
    public void ClearAllEvents()
    {
        eventDict.Clear();
    }
    #endregion
}
Main/Common/EventBroadcast.cs.meta
copy from Main/Common/FieldPrint.cs.meta copy to Main/Common/EventBroadcast.cs.meta
File was copied from Main/Common/FieldPrint.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e8426254dd294aa428e2078f8e48cd5e
guid: bbd3b492fe5154d4fb0627f43bcdf214
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Main/Common/EventName.cs
New file
@@ -0,0 +1,7 @@
public class EventName
{
    public const string BATTLE_ACTION_OVER = "BATTLE_ACTION_OVER"; //战斗 行为结束了(一个战报播完)
}
Main/Common/EventName.cs.meta
copy from Main/Common/FieldPrint.cs.meta copy to Main/Common/EventName.cs.meta
File was copied from Main/Common/FieldPrint.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e8426254dd294aa428e2078f8e48cd5e
guid: 4ff830a863c35ec4ca5ccdf718064055
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Main/Common/FieldPrint.cs
File was deleted
Main/Main.cs
@@ -55,7 +55,6 @@
        Debug.Log("初始化游戏场景");
        // 初始化游戏系统
        managers.Add(PlaceManager.Instance);
        managers.Add(BattleManager.Instance);
        foreach (var manager in managers)
Main/Manager/GameSystemManager/BattleManager.cs
@@ -1,9 +1,17 @@
using System.Collections.Generic;
using UnityEngine;
public class BattleManager : GameSystemManager<BattleManager>
{
    protected Dictionary<int, BattleField> battleFields = new Dictionary<int, BattleField>();
    public override void Init()
    {
        base.Init();
        EventBroadcast.Instance.AddListener<int, int>(EventName.BATTLE_ACTION_OVER, OnActionOver);
    }
    public override void Release()
@@ -11,4 +19,25 @@
        base.Release();
    }
    private void OnActionOver(int battleFieldId, int attackId)
    {
        BattleField battleField = null;
        if (battleFields.TryGetValue(battleFieldId, out battleField))
        {
            battleField.OnActionOver(attackId);
        }
        else
        {
            Debug.LogError("BattleManager OnActionOver battleFieldId:" + battleFieldId + " not find");
        }
    }
    public void Run()
    {
        foreach (var battleField in battleFields)
        {
            battleField.Value.Run();
        }
    }
}
Main/Manager/GameSystemManager/PlaceManager.cs
File was deleted
Main/Manager/GameSystemManager/PlaceManager.cs.meta
File was deleted
Main/NetworkPackage/GameNetSystem.cs
@@ -30,9 +30,9 @@
                    case NetState.AccountLogin:
                        accountLoginState.OnExit();
                        break;
                    case NetState.CreateOrSelectRole:
                        // createOrSelectRoleState.OnExit();
                        break;
                    // case NetState.CreateOrSelectRole:
                    //     // createOrSelectRoleState.OnExit();
                    //     break;
                    case NetState.RoleLogin:
                        roleLoginState.OnExit();
                        break;
@@ -53,9 +53,9 @@
                    case NetState.AccountLogin:
                        accountLoginState.OnEnter();
                        break;
                    case NetState.CreateOrSelectRole:
                        // createOrSelectRoleState.OnEnter();
                        break;
                    // case NetState.CreateOrSelectRole:
                    //     // createOrSelectRoleState.OnEnter();
                    //     break;
                    case NetState.RoleLogin:
                        roleLoginState.OnEnter();
                        break;
@@ -409,7 +409,7 @@
    {
        NerverConnect = 1,
        AccountLogin = 2,
        CreateOrSelectRole = 3,
        // CreateOrSelectRole = 3,
        RoleLogin = 4,
        Connected = 5,
        DisConnected = 6,
Main/Place/PlaceDataStructs.cs
File was deleted
Main/Place/PlaceDataStructs.cs.meta
File was deleted
Main/Place/PlaceDrop.cs
File was deleted
Main/Place/PlaceDrop.cs.meta
File was deleted
Main/Place/PlaceField.cs
File was deleted
Main/Place/PlaceField.cs.meta
File was deleted
Main/Place/PlaceUnit.cs
File was deleted
Main/Place/PlaceUnit.cs.meta
File was deleted
Main/Team/TeamBase.cs
@@ -75,4 +75,9 @@
    {
        return GetTeamCardCount() == 0;
    }
    public void InitByLevelId(int levelId)
    {
    }
}
Main/Utility.meta
Main/Utility/Bezier.cs
Main/Utility/Bezier.cs.meta
Main/Utility/BezierMove.cs
Main/Utility/BezierMove.cs.meta
Main/Utility/CameraManager.cs
Main/Utility/CameraManager.cs.meta
Main/Utility/ColorUtility.cs
Main/Utility/ColorUtility.cs.meta
Main/Utility/ComponentExtersion.cs
Main/Utility/ComponentExtersion.cs.meta
Main/Utility/Datumline.cs
Main/Utility/Datumline.cs.meta
Main/Utility/DeviceUtility.cs
Main/Utility/DeviceUtility.cs.meta
Main/Utility/DontDestroyOnLoad.cs
Main/Utility/DontDestroyOnLoad.cs.meta
Main/Utility/DrawUtility.cs
Main/Utility/DrawUtility.cs.meta
Main/Utility/EffectRenderSort.cs
Main/Utility/EffectRenderSort.cs.meta
Main/Utility/EnumHelper.cs
Main/Utility/EnumHelper.cs.meta
Main/Utility/EnumLabelAttribute.cs
Main/Utility/EnumLabelAttribute.cs.meta
Main/Utility/Extension.cs
Main/Utility/Extension.cs.meta
Main/Utility/FPS.cs
Main/Utility/FPS.cs.meta
Main/Utility/FieldPrint.cs
Main/Utility/FieldPrint.cs.meta
Main/Utility/FileExtersion.cs
Main/Utility/FileExtersion.cs.meta
Main/Utility/GameObjectPool.cs
Main/Utility/GameObjectPool.cs.meta
Main/Utility/GenerateUICode.cs
Main/Utility/GenerateUICode.cs.meta
Main/Utility/GlobalTimeEvent.cs
Main/Utility/GlobalTimeEvent.cs.meta
Main/Utility/LayerUtility.cs
Main/Utility/LayerUtility.cs.meta
Main/Utility/LocalSave.cs
Main/Utility/LocalSave.cs.meta
Main/Utility/MathUtility.cs
Main/Utility/MathUtility.cs.meta
Main/Utility/MathUtils.cs
Main/Utility/MathUtils.cs.meta
Main/Utility/PathUtility.cs
Main/Utility/PathUtility.cs.meta
Main/Utility/ProfilerPanel.cs
Main/Utility/ProfilerPanel.cs.meta
Main/Utility/RenderOrder.cs
Main/Utility/RenderOrder.cs.meta
Main/Utility/RenderTextureCreator.cs
Main/Utility/RenderTextureCreator.cs.meta
Main/Utility/ResolutionUtility.cs
Main/Utility/ResolutionUtility.cs.meta
Main/Utility/SnxxzUtility.cs
Main/Utility/SnxxzUtility.cs.meta
Main/Utility/SystemCMD.cs
Main/Utility/SystemCMD.cs.meta
Main/Utility/TAny.cs
Main/Utility/TAny.cs.meta
Main/Utility/TBlackBoard.cs
Main/Utility/TBlackBoard.cs.meta
Main/Utility/TransformExtension.cs
Main/Utility/TransformExtension.cs.meta
Main/Utility/UGUIEventListenerContainDrag.cs
Main/Utility/UGUIEventListenerContainDrag.cs.meta
Main/Utility/UIParamCopyTool.cs
Main/Utility/UIParamCopyTool.cs.meta
Main/Utility/VectorUtility.cs
Main/Utility/VectorUtility.cs.meta
Main/Utility/VesselExtension.cs
Main/Utility/VesselExtension.cs.meta