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) { var unitInfos = PVPUnitInfo.DeSerialize(pvpDefenceData.TeamData.ToByteArray()); List characterInfos = new(); foreach (var serverCharacterInfo in pvpDefenceData.Characters) { CharacterInfo characterInfo = new(); characterInfo.Refresh(serverCharacterInfo); characterInfos.Add(characterInfo); } Gameplay.Net.VehicleInfo vehicleInfo = new(); 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); } } } /// /// 单个战斗单元上阵数据,该数据会序列化后发送给服务器 /// public class PVPUnitInfo { 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 jsonStr = JsonUtility.ToJson(unitInfos); 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); return JsonUtility.FromJson>(jsonStr); } } 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; } }