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(); }