Ejemplo n.º 1
0
        public static MechComponentRef[] ClearInventory(MechDef source_mech, SimGameState state)
        {
            Control.LogDebug(DType.ClearInventory, "Clearing Inventory");

            var list    = source_mech.Inventory.ToList();
            var changes = new Queue <IChange>();

            foreach (var mechComponentRef in list.Where(i => !i.IsFixed))
            {
                changes.Enqueue(new Change_Remove(mechComponentRef, mechComponentRef.MountedLocation));
            }

            var inv_state = new InventoryOperationState(changes, source_mech);

            inv_state.DoChanges();
            var to_apply = inv_state.GetResults();

            foreach (var invChange in to_apply)
            {
                invChange.ApplyToInventory(source_mech, list);
            }

            Control.LogDebug(DType.ClearInventory, $"- setting guids");
            foreach (var item in list)
            {
                if (string.IsNullOrEmpty(item.SimGameUID))
                {
                    item.SetSimGameUID(state.GenerateSimGameUID());
                }
                Control.LogDebug(DType.ClearInventory, $"-- {item.ComponentDefID} - {item.SimGameUID}");
            }

            return(list.ToArray());
        }
        public void FixMechs(List <MechDef> mechdefs, SimGameState simgame)
        {
            foreach (var mechdef in mechdefs)
            {
                var defaults = mechdef.GetWeaponDefaults();
                if (defaults == null)
                {
                    continue;
                }

                var def_list = defaults.ToList();

                if (def_list.Count == 0)
                {
                    continue;
                }

                var changes = new Queue <IChange>();
                foreach (var weaponDefault in defaults)
                {
                    changes.Enqueue(new Change_WeaponAdjust(weaponDefault.Location));
                }

                var state = new InventoryOperationState(changes, mechdef);
                state.DoChanges();
                state.ApplyInventory();
            }
        }
        private void FixMech(SimGameState simgame, MechDef mechDef)
        {
            var defaults = DefaultsDatabase.Instance[mechDef];

            if (defaults == null)
            {
                return;
            }

            var changes = new Queue <IChange>();
            var used    = new List <string>();

            if (defaults.Multi != null && defaults.Multi.HasRecords)
            {
                used.AddRange(defaults.Multi.UsedCategories.Keys);
            }

            if (defaults.Defaults != null && defaults.Defaults.Count > 0)
            {
                used.AddRange(defaults.Defaults.Keys);
            }

            foreach (var category in used.Distinct())
            {
                changes.Enqueue(new Change_CategoryAdjust(category));
            }

            if (changes.Count == 0)
            {
                return;
            }

            var state = new InventoryOperationState(changes, mechDef);

            state.DoChanges();
            state.ApplyInventory();
        }