public static HumanPersonStorageData Create(HumanPerson humanPerson)
        {
            if (humanPerson is null)
            {
                throw new ArgumentNullException(nameof(humanPerson));
            }

            var storageData = new HumanPersonStorageData
            {
                Survival = humanPerson.GetModule <ISurvivalModule>().Stats.Select(x => new HumanSurvivalStatStorageData
                {
                    Type  = x.Type,
                    Value = x.ValueShare
                }).ToArray(),

                Equipments = humanPerson.GetModule <IEquipmentModule>().Select(CreateEquipmentStorageData).ToArray(),

                Inventory = humanPerson.GetModule <IInventoryModule>().CalcActualItems().Select(CreatePropStorageData)
                            .ToArray(),

                Perks = humanPerson.GetModule <IEvolutionModule>().Perks.Select(CreatePerkStorageData).ToArray()
            };

            return(storageData);
        }
        private static void RestoreEvolutionData(ISchemeService schemeService,
                                                 HumanPersonStorageData storedPerson,
                                                 EvolutionModule evolutionData)
        {
            var perksFromSave = new List <IPerk>();

            foreach (var storedPerk in storedPerson.Perks)
            {
                var perkScheme = schemeService.GetScheme <IPerkScheme>(storedPerk.Sid);

                var perk = new Perk
                {
                    Scheme = perkScheme
                };

                if (storedPerk.Level != null)
                {
                    perk.CurrentLevel = new PerkLevel(storedPerk.Level.Value, storedPerk.SubLevel.Value);
                }

                // TODO Доработать, когда будет доработана прокачка больше, чем на один лвл
                var currentLevelScheme = perkScheme.Levels[0];

                perk.CurrentJobs = currentLevelScheme.Jobs.Select(job => new PerkJob(job)
                {
                    IsComplete = storedPerk.Jobs.Single(storedJob => storedJob.Type == job.Type && storedJob.Scope == job.Scope).IsComplete,
                    Progress   = storedPerk.Jobs.Single(storedJob => storedJob.Type == job.Type && storedJob.Scope == job.Scope).Progress,
                }).ToArray();

                perksFromSave.Add(perk);
            }
            evolutionData.SetPerksForced(perksFromSave);
        }
        public static HumanPersonStorageData Create(HumanPerson humanPerson)
        {
            var storageData = new HumanPersonStorageData();

            storageData.Survival = humanPerson.Survival.Stats.Select(x => new HumanSurvivalStatStorageData
            {
                Type  = x.Type,
                Value = x.ValueShare
            }).ToArray();

            storageData.Equipments = humanPerson.EquipmentCarrier.Select(CreateEquipmentStorageData).ToArray();

            storageData.Inventory = humanPerson.Inventory.CalcActualItems().Select(CreatePropStorageData).ToArray();

            storageData.Perks = humanPerson.EvolutionData.Perks.Select(CreatePerkStorageData).ToArray();

            return(storageData);
        }