using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Framework.Wrapper; using Gameplay.Level; using NLDPB; using UnityEngine; using CharacterInfo = Gameplay.Net.CharacterInfo; /// /// pvp防守方上阵数据 /// public class PVPDefenderData { public List pvpRuntimeUnitInfos = new(); public List PVPUnitInfos => pvpRuntimeUnitInfos.Select(runtimeInfo => runtimeInfo.pvpUnitInfo).ToList(); public PVPDefenderData() { } public PVPDefenderData(MSG_PvpDefenceData pvpDefenceData) { //DebugUtil.LogError($"pvpDefenceData:{pvpDefenceData.ToString()}"); var unitInfos = PVPUnitInfo.DeSerialize(pvpDefenceData.TeamData.ToByteArray()); List characterInfos = new(); if (pvpDefenceData.Characters != null) { foreach (var serverCharacterInfo in pvpDefenceData.Characters) { CharacterInfo characterInfo = new() { ID = serverCharacterInfo.Id, }; characterInfo.Refresh(serverCharacterInfo); characterInfos.Add(characterInfo); } } Gameplay.Net.VehicleInfo vehicleInfo = null; if (pvpDefenceData.Vehicle != null) { vehicleInfo = new() { nID = pvpDefenceData.Vehicle.Id, }; vehicleInfo.Refresh(pvpDefenceData.Vehicle); } Init(unitInfos, characterInfos, vehicleInfo); } public void Init(List unitInfos, List characterInfos, Gameplay.Net.VehicleInfo vehicleInfo) { pvpRuntimeUnitInfos.Clear(); int characterIndex = 0; int vehicleIndex = 0; for (int i = 0; i < unitInfos.Count; i++) { var unitInfo = unitInfos[i]; CharacterInfo characterInfo = null; Gameplay.Net.VehicleInfo currVehicleInfo = null; switch (unitInfo.type) { case Unit.UnitType.Charactor: characterInfo = characterInfos[characterIndex]; characterIndex++; break; case Unit.UnitType.Vehicle: currVehicleInfo = vehicleInfo; vehicleIndex++; break; default: break; } PVPUnitRuntimeInfo runtimeInfo = new(unitInfo, characterInfo, currVehicleInfo); pvpRuntimeUnitInfos.Add(runtimeInfo); } } } /// /// 单个战斗单元上阵数据,该数据会序列化后发送给服务器 /// [Serializable] public class PVPUnitInfo { [Serializable] private class PVPUnitInfoListData { public List unitInfos; } public uint unitID; public Unit.UnitType type = Unit.UnitType.Charactor; public int cellIndex; public LevelData.AIType aiType = LevelData.AIType.BasicAI; public LevelData.AttachAIType attachAIType = LevelData.AttachAIType.ChainAI; public static byte[] Serialize(List unitInfos) { var listData = new PVPUnitInfoListData() { unitInfos = unitInfos, }; var jsonStr = JsonUtility.ToJson(listData); return System.Text.Encoding.UTF8.GetBytes(jsonStr); } public static List DeSerialize(byte[] bytes) { if (bytes == null) return new List(); var jsonStr = System.Text.Encoding.UTF8.GetString(bytes); var listData = JsonUtility.FromJson(jsonStr); if (listData == null) return new List(); return listData.unitInfos; } } public class PVPUnitRuntimeInfo { public PVPUnitInfo pvpUnitInfo { get; private set; } public uint unitID => pvpUnitInfo.unitID; public Unit.UnitType type => pvpUnitInfo.type; public int cellIndex => pvpUnitInfo.cellIndex; public LevelData.AIType aiType => pvpUnitInfo.aiType; public LevelData.AttachAIType attachAIType => pvpUnitInfo.attachAIType; public Gameplay.Net.CharacterInfo characterInfo { get; private set; } public Gameplay.Net.VehicleInfo vehicleInfo { get; private set; } public PVPUnitRuntimeInfo(PVPUnitInfo pvpUnitInfo, Gameplay.Net.CharacterInfo characterInfo, Gameplay.Net.VehicleInfo vehicleInfo) { this.pvpUnitInfo = pvpUnitInfo; this.characterInfo = characterInfo; this.vehicleInfo = vehicleInfo; } }