private void ConvertBloodLoss(BloodLossSaveDataProxy proxy) { if (proxy == null || proxy.m_CausesLocIDs == null) { return; } for (int i = 0; i < proxy.m_DurationHoursList.Count; i++) { Negative.Add(new BloodLoss(negative) { AfflictionType = AfflictionType.BloodLoss, Location = proxy.m_Locations[i], CauseLocID = proxy.m_CausesLocIDs[i], DurationHours = proxy.m_DurationHoursList[i], ElapsedHours = proxy.m_ElapsedHoursList[i], }); } }
private BloodLossSaveDataProxy ConvertBackBloodLoss(BloodLossSaveDataProxy proxy, Dictionary <AfflictionType, List <Affliction> > afflictionDict) { proxy = proxy ?? new BloodLossSaveDataProxy(); var bloodLosses = afflictionDict.Get(AfflictionType.BloodLoss)?.Cast <BloodLoss>().ToList(); if (bloodLosses == null) { return((proxy.m_CausesLocIDs?.Count > 0) ? new BloodLossSaveDataProxy() : proxy); } proxy.m_CausesLocIDs = new List <string>(); proxy.m_DurationHoursList = new List <float>(); proxy.m_ElapsedHoursList = new List <float>(); proxy.m_Locations = new List <int>(); foreach (var bloodLoss in bloodLosses) { proxy.m_CausesLocIDs.Add(bloodLoss.CauseLocID); proxy.m_DurationHoursList.Add(bloodLoss.DurationHours); proxy.m_ElapsedHoursList.Add(bloodLoss.ElapsedHours); proxy.m_Locations.Add(bloodLoss.Location); } return(proxy); }
public GlobalSaveGameFormat SerializeTo(GlobalSaveGameFormat proxy) { var afflictions = new Dictionary <AfflictionType, List <Affliction> >(); foreach (var affliction in Negative) { if (!afflictions.ContainsKey(affliction.AfflictionType)) { afflictions.Add(affliction.AfflictionType, new List <Affliction>()); } afflictions[affliction.AfflictionType].Add(affliction); } if (afflictions.ContainsKey(AfflictionType.Hypothermia)) { proxy.m_HypothermiaSerialized = ((AfflictionWithProxy)afflictions[AfflictionType.Hypothermia][0]).proxy; } var frostBiteProxy = new FrostBiteSaveDataProxy(); frostBiteProxy.m_LocationsCurrentFrostbiteDamage = new float[11]; frostBiteProxy.m_LocationsWithActiveFrostbite = new int[0]; frostBiteProxy.m_LocationsWithFrostbiteRisk = new int[0]; if (afflictions.ContainsKey(AfflictionType.Frostbite)) { frostBiteProxy.m_LocationsWithActiveFrostbite = afflictions[AfflictionType.Frostbite].Select(f => f.Location).ToArray(); } if (afflictions.ContainsKey(AfflictionType.FrostbiteRisk)) { var locations = new List <int>(); foreach (var frostBiteRisk in afflictions[AfflictionType.FrostbiteRisk]) { locations.Add(frostBiteRisk.Location); frostBiteProxy.m_LocationsCurrentFrostbiteDamage[frostBiteRisk.Location] = ((FrostBiteRisk)frostBiteRisk).Damage; } } proxy.m_FrostbiteSerialized = Util.SerializeObject(frostBiteProxy); if (afflictions.ContainsKey(AfflictionType.FoodPoisioning)) { proxy.m_FoodPoisoningSerialized = ((AfflictionWithProxy)afflictions[AfflictionType.FoodPoisioning][0]).proxy; } if (afflictions.ContainsKey(AfflictionType.Dysentery)) { proxy.m_DysenterySerialized = ((AfflictionWithProxy)afflictions[AfflictionType.Dysentery][0]).proxy; } if (afflictions.ContainsKey(AfflictionType.SprainedAnkle)) { var sprainedAnkleProxy = new SprainedAnkleSaveDataProxy(); var sprains = afflictions[AfflictionType.SprainedAnkle]; sprainedAnkleProxy.m_CausesLocIDs = new string[sprains.Count]; sprainedAnkleProxy.m_DurationHoursList = new float[sprains.Count]; sprainedAnkleProxy.m_ElapsedHoursList = new float[sprains.Count]; sprainedAnkleProxy.m_ElapsedRestList = new float[sprains.Count]; sprainedAnkleProxy.m_Locations = new int[sprains.Count]; for (int i = 0; i < sprains.Count; i++) { var sprain = (SprainAffliction)sprains[i]; sprainedAnkleProxy.m_CausesLocIDs[i] = sprain.CauseLocID; sprainedAnkleProxy.m_DurationHoursList[i] = sprain.Duration; sprainedAnkleProxy.m_ElapsedHoursList[i] = sprain.ElapsedHours; sprainedAnkleProxy.m_ElapsedRestList[i] = sprain.ElapsedHours; sprainedAnkleProxy.m_Locations[i] = sprain.Location; } proxy.m_SprainedAnkleSerialized = Util.SerializeObject(sprainedAnkleProxy); } if (afflictions.ContainsKey(AfflictionType.SprainedWrist)) { var sprainedWristProxy = new SprainedWristSaveDataProxy(); var sprains = afflictions[AfflictionType.SprainedWrist]; sprainedWristProxy.m_CausesLocIDs = new string[sprains.Count]; sprainedWristProxy.m_DurationHoursList = new float[sprains.Count]; sprainedWristProxy.m_ElapsedHoursList = new float[sprains.Count]; sprainedWristProxy.m_ElapsedRestList = new float[sprains.Count]; sprainedWristProxy.m_Locations = new int[sprains.Count]; for (int i = 0; i < sprains.Count; i++) { var sprain = (SprainAffliction)sprains[i]; sprainedWristProxy.m_CausesLocIDs[i] = sprain.CauseLocID; sprainedWristProxy.m_DurationHoursList[i] = sprain.Duration; sprainedWristProxy.m_ElapsedHoursList[i] = sprain.ElapsedHours; sprainedWristProxy.m_ElapsedRestList[i] = sprain.ElapsedHours; sprainedWristProxy.m_Locations[i] = sprain.Location; } proxy.m_SprainedWristSerialized = Util.SerializeObject(sprainedWristProxy); } if (afflictions.ContainsKey(AfflictionType.SprainedWristMajor)) { var sprainedWristMajorProxy = new SprainedWristMajorSaveDataProxy(); var sprains = afflictions[AfflictionType.SprainedWristMajor]; sprainedWristMajorProxy.m_CausesLocIDs = new string[sprains.Count]; sprainedWristMajorProxy.m_ElapsedRestList = new float[sprains.Count]; sprainedWristMajorProxy.m_Locations = new int[sprains.Count]; for (int i = 0; i < sprains.Count; i++) { var sprain = (SprainedWristMajor)sprains[i]; sprainedWristMajorProxy.m_Locations[i] = sprain.Location; sprainedWristMajorProxy.m_ElapsedRestList[i] = sprain.ElapsedRest; sprainedWristMajorProxy.m_CausesLocIDs[i] = sprain.CauseLocID; } proxy.m_SprainedWristMajorSerialized = Util.SerializeObject(sprainedWristMajorProxy); } if (afflictions.ContainsKey(AfflictionType.Burns)) { proxy.m_BurnsSerialized = ((AfflictionWithProxy)afflictions[AfflictionType.Burns][0]).proxy; } if (afflictions.ContainsKey(AfflictionType.BurnsElectric)) { proxy.m_BurnsSerialized = ((AfflictionWithProxy)afflictions[AfflictionType.BurnsElectric][0]).proxy; } if (afflictions.ContainsKey(AfflictionType.BloodLoss)) { var bloodLossProxy = new BloodLossSaveDataProxy(); var bloodLosses = afflictions[AfflictionType.BloodLoss]; bloodLossProxy.m_CausesLocIDs = new string[bloodLosses.Count]; bloodLossProxy.m_DurationHoursList = new float[bloodLosses.Count]; bloodLossProxy.m_ElapsedHoursList = new float[bloodLosses.Count]; bloodLossProxy.m_Locations = new int[bloodLosses.Count]; for (int i = 0; i < bloodLosses.Count; i++) { var bloodLoss = (BloodLoss)bloodLosses[i]; bloodLossProxy.m_CausesLocIDs[i] = bloodLoss.CauseLocID; bloodLossProxy.m_DurationHoursList[i] = bloodLoss.DurationHours; bloodLossProxy.m_ElapsedHoursList[i] = bloodLoss.ElapsedHours; bloodLossProxy.m_Locations[i] = bloodLoss.Location; } proxy.m_BloodLossSerialized = Util.SerializeObject(bloodLossProxy); } if (afflictions.ContainsKey(AfflictionType.Infection)) { var infectionProxy = new InfectionSaveDataProxy(); var infections = afflictions[AfflictionType.Infection]; infectionProxy.m_AntibioticsTakenList = new bool[infections.Count]; infectionProxy.m_CausesLocIDs = new string[infections.Count]; infectionProxy.m_DurationHoursList = new float[infections.Count]; infectionProxy.m_ElapsedHoursList = new float[infections.Count]; infectionProxy.m_ElapsedRestList = new float[infections.Count]; infectionProxy.m_Locations = new int[infections.Count]; for (int i = 0; i < infections.Count; i++) { var infection = (Infection)infections[i]; infectionProxy.m_AntibioticsTakenList[i] = infection.AntibioticsTaken; infectionProxy.m_CausesLocIDs[i] = infection.CauseLocID; infectionProxy.m_DurationHoursList[i] = infection.DurationHours; infectionProxy.m_ElapsedHoursList[i] = infection.ElapsedHours; infectionProxy.m_ElapsedRestList[i] = infection.ElapsedRest; infectionProxy.m_Locations[i] = infection.Location; } proxy.m_InfectionSerialized = Util.SerializeObject(infectionProxy); } if (afflictions.ContainsKey(AfflictionType.InfectionRisk)) { var infectionRisk = new InfectionRiskSaveDataProxy(); var infectionRisks = afflictions[AfflictionType.InfectionRisk]; infectionRisk.m_CausesLocIDs = new string[infectionRisks.Count]; infectionRisk.m_DurationHoursList = new float[infectionRisks.Count]; infectionRisk.m_ElapsedHoursList = new float[infectionRisks.Count]; infectionRisk.m_Locations = new int[infectionRisks.Count]; infectionRisk.m_AntisepticTakenList = new bool[infectionRisks.Count]; infectionRisk.m_CurrentInfectionChanceList = new float[infectionRisks.Count]; for (int i = 0; i < infectionRisks.Count; i++) { var infection = (InfectionRisk)infectionRisks[i]; infectionRisk.m_CausesLocIDs[i] = infection.CauseLocID; infectionRisk.m_DurationHoursList[i] = infection.DurationHours; infectionRisk.m_ElapsedHoursList[i] = infection.ElapsedHours; infectionRisk.m_Locations[i] = infection.Location; infectionRisk.m_AntisepticTakenList[i] = infection.AntisepticTaken; infectionRisk.m_CurrentInfectionChanceList[i] = infection.CurrentInfectionChance; } proxy.m_InfectionRiskSerialized = Util.SerializeObject(infectionRisk); } if (afflictions.ContainsKey(AfflictionType.BrokenRib)) { var brokenRibProxy = new BrokenRibSaveDataProxy(); var brokenRibs = afflictions[AfflictionType.BrokenRib]; brokenRibProxy.m_BandagesApplied = new int[brokenRibs.Count]; brokenRibProxy.m_CausesLocIDs = new string[brokenRibs.Count]; brokenRibProxy.m_ElapsedRestList = new float[brokenRibs.Count]; brokenRibProxy.m_Locations = new int[brokenRibs.Count]; brokenRibProxy.m_NumHoursRestForCureList = new float[brokenRibs.Count]; brokenRibProxy.m_PainKillersTaken = new int[brokenRibs.Count]; for (int i = 0; i < brokenRibs.Count; i++) { var brokenRib = (BrokenRib)brokenRibs[i]; brokenRibProxy.m_BandagesApplied[i] = brokenRib.BandagesApplied; brokenRibProxy.m_CausesLocIDs[i] = brokenRib.CauseLocID; brokenRibProxy.m_ElapsedRestList[i] = brokenRib.ElapsedRest; brokenRibProxy.m_Locations[i] = brokenRib.Location; brokenRibProxy.m_NumHoursRestForCureList[i] = brokenRib.NumHoursRestForCure; brokenRibProxy.m_PainKillersTaken[i] = brokenRib.PainKillersTaken; } proxy.m_BrokenRibSerialized = Util.SerializeObject(brokenRibProxy); } if (afflictions.ContainsKey(AfflictionType.CabinFever)) { proxy.m_CabinFeverSerialized = ((AfflictionWithProxy)afflictions[AfflictionType.CabinFever][0]).proxy; } if (afflictions.ContainsKey(AfflictionType.IntestinalParasites)) { proxy.m_IntestinalParasitesSerialized = ((AfflictionWithProxy)afflictions[AfflictionType.IntestinalParasites][0]).proxy; } else if (afflictions.ContainsKey(AfflictionType.IntestinalParasitesRisk)) { proxy.m_IntestinalParasitesSerialized = ((AfflictionWithProxy)afflictions[AfflictionType.IntestinalParasitesRisk][0]).proxy; } return(proxy); }