NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/PVP/PVPDefenderData.cs

155 lines
4.6 KiB
C#
Raw Normal View History

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