public static UnitSerializable Serialize(Unit unit) { UnitSerializable serializedData = new UnitSerializable(); serializedData.Id = unit.Id; serializedData.UnitName = unit.UnitName; serializedData.Team = unit.Team; // Size -1 because we don't need to save the weaponSkill (0) serializedData.Skills = new List <int>(unit.Skills.Count - 1); for (int i = 1; i < unit.Skills.Count; i++) { if (unit.Skills[i] != null) { serializedData.Skills.Add(unit.Skills[i].SkillId); } else { serializedData.Skills.Add(0); } } serializedData.AttributesSheet = unit.AttributesSheet; serializedData.UnitEquipment = Serialize(unit.UnitEquipment); serializedData.HumanModelInfos = unit.HumanModelInfos; serializedData.IsAlive = unit.IsAlive; serializedData.IsPlaying = unit.IsPlaying; if (unit.CurrentCell != null) { serializedData.CurrentCellX = unit.CurrentCell.X; serializedData.CurrentCellZ = unit.CurrentCell.Z; } serializedData.CurrentRotation = unit.CurrentRotation; serializedData.SkillsCooldowns = unit.SkillsCooldowns; serializedData.SkillsUses = unit.SkillsUses; return(serializedData); }
public static T Deserialize <T>(UnitSerializable serializedData, Dictionary <string, string> skillsDb, Dictionary <string, string> itemsDb) where T : Unit { GameObject go = new GameObject(serializedData.UnitName); T unit = go.AddComponent <T>(); unit.Id = serializedData.Id; unit.UnitName = serializedData.UnitName; unit.Team = serializedData.Team; unit.Skills = new List <SkillBase>(serializedData.Skills.Count + 1); unit.Skills.Add(null); for (int i = 0; i < serializedData.Skills.Count; i++) { if (serializedData.Skills[i] != 0) { string key = serializedData.Skills[i].ToString(); if (skillsDb.ContainsKey(key)) { unit.Skills.Add(Resources.Load <ScriptableObject>(skillsDb[key]) as SkillBase); } else { Debug.Log("Deserialize Unit: skillId " + serializedData.Skills[i] + " not found in DB"); } } } unit.AttributesSheet = serializedData.AttributesSheet; unit.UnitEquipment = Deserialize(serializedData.UnitEquipment, itemsDb); unit.HumanModelInfos = serializedData.HumanModelInfos; unit.IsAlive = serializedData.IsAlive; unit.IsPlaying = serializedData.IsPlaying; unit.CurrentRotation = serializedData.CurrentRotation; unit.SkillsCooldowns = serializedData.SkillsCooldowns; unit.SkillsUses = serializedData.SkillsUses; return(unit); }