Пример #1
0
        public override void ExposeData()
        {
            if (_isDeactivating)
            {
                return;
            }
            base.ExposeData();

            if (Scribe.mode == LoadSaveMode.LoadingVars)
            {
                Instance = this;
                InitVoids();
            }

            var version = CurrentVersion;

            Scribe_Values.Look(ref version, "version");

            if (Scribe.mode == LoadSaveMode.Saving)
            {
                _savedPresets.Clear();
                _savedDefaults.Clear();
                _savedBindings.Clear();

                foreach (var classType in _presets.Values)
                {
                    foreach (var type in classType.Values)
                    {
                        _savedPresets.AddRange(type.Values.ToArray());
                    }
                }

                _savedDefaults.AddRange(_defaults.Values.Where(preset => !preset.IsVoid).Select(preset => new Binding(preset.Type, preset)).ToArray());
                _savedBindings.AddRange(_rules.Where(rules => rules.Key.CanHaveRules()).Select(rules => new Binding(rules.Key, rules.Value.IsIgnored() ? null : rules.Value)).ToArray());
            }

            Scribe_Collections.Look(ref _savedPresets, "presets", LookMode.Deep);
            Scribe_Collections.Look(ref _savedBindings, "bindings", LookMode.Deep);
            Scribe_Collections.Look(ref _savedDefaults, "defaults", LookMode.Deep);

            if (Scribe.mode != LoadSaveMode.PostLoadInit)
            {
                return;
            }

            _presets.Clear();
            _defaults.Clear();
            _rules.Clear();

            foreach (var preset in _savedPresets)
            {
                AddPreset(preset);
            }

            foreach (var preset in _savedDefaults)
            {
                _defaults.Add(preset.Target, preset.Rules);
            }
            InitDefaults();

            foreach (var binding in _savedBindings.Where(binding => binding.Pawn.CanHaveRules()))
            {
                _rules.Add(binding.Pawn, binding.Rules);
            }

            _savedPresets.Clear();
            _savedDefaults.Clear();
            _savedBindings.Clear();
            Presetable.ResetIds();
        }