public void UnRegisterSubGrid(MyCubeGrid grid, bool clean = false) { if (!SubGridsRegistered.Contains(grid)) { Log.Line($"sub Grid Already UnRegistered: [Main]:{grid == MyGrid}"); } if (!clean) { SubGrids.Remove(grid); } SubGridsRegistered.Remove(grid); grid.OnFatBlockAdded -= FatBlockAdded; grid.OnFatBlockRemoved -= FatBlockRemoved; foreach (var cube in grid.GetFatBlocks()) { var battery = cube as MyBatteryBlock; if (InventoryMonitor.ContainsKey(cube) || battery != null && Batteries.Contains(battery)) { FatBlockRemoved(cube); } } GridAi removeAi; if (!Session.GridTargetingAIs.ContainsKey(grid)) { Session.GridToMasterAi.TryRemove(grid, out removeAi); } }
public void RegisterSubGrid(MyCubeGrid grid, bool dupCheck = false) { if (dupCheck && SubGridsRegistered.Contains(grid)) { Log.Line($"sub Grid Already Registered: [Main]:{grid == MyGrid}"); } grid.Flags |= (EntityFlags)(1 << 31); grid.OnFatBlockAdded += FatBlockAdded; grid.OnFatBlockRemoved += FatBlockRemoved; SubGridsRegistered.Add(grid); FatMap fatMap; if (Session.GridToFatMap.TryGetValue(grid, out fatMap)) { var blocks = fatMap.MyCubeBocks; for (int i = 0; i < blocks.Count; i++) { FatBlockAdded(blocks[i]); } } }
internal void RegisterMyGridEvents(bool register, MyCubeGrid grid, bool force = false) { if (grid == null) { grid = MyGrid; } if (register) { if (Registered) { Log.Line($"Ai RegisterMyGridEvents error"); } Registered = true; grid.OnFatBlockAdded += FatBlockAdded; grid.OnFatBlockRemoved += FatBlockRemoved; grid.OnMarkForClose += GridClose; if (SubGridsRegistered.Contains(grid)) { Log.Line($"Main Grid Already Registered"); } SubGridsRegistered.Add(grid); } else { if (Registered) { Registered = false; grid.OnFatBlockAdded -= FatBlockAdded; grid.OnFatBlockRemoved -= FatBlockRemoved; grid.OnMarkForClose -= GridClose; if (!SubGridsRegistered.Contains(grid)) { Log.Line($"Main Grid Already UnRegistered"); } SubGridsRegistered.Remove(grid); } else if (!force) { Log.Line($"NotRegistered: gridReg:{SubGridsRegistered.Contains(grid)}- Aimarked:{MarkedForClose} - aiClosed:{Closed} - Ticks:{Session?.Tick - AiCloseTick} - NullSession:{Session == null} - gridMarked:{grid.MarkedForClose}"); } } }
public void RegisterSubGrid(MyCubeGrid grid, bool dupCheck = false) { if (dupCheck && SubGridsRegistered.Contains(grid)) { Log.Line($"sub Grid Already Registered: [Main]:{grid == MyGrid}"); } grid.Flags |= (EntityFlags)(1 << 31); grid.OnFatBlockAdded += FatBlockAdded; grid.OnFatBlockRemoved += FatBlockRemoved; SubGridsRegistered.Add(grid); foreach (var cube in grid.GetFatBlocks()) { var battery = cube as MyBatteryBlock; if (battery != null || cube.HasInventory) { FatBlockAdded(cube); } } }
public void UnRegisterSubGrid(MyCubeGrid grid, bool clean = false) { if (!SubGridsRegistered.Contains(grid)) { Log.Line($"sub Grid Already UnRegistered: [Main]:{grid == MyGrid}"); } if (!clean) { SubGrids.Remove(grid); } SubGridsRegistered.Remove(grid); grid.OnFatBlockAdded -= FatBlockAdded; grid.OnFatBlockRemoved -= FatBlockRemoved; GridAi removeAi; if (!Session.GridTargetingAIs.ContainsKey(grid)) { Session.GridToMasterAi.TryRemove(grid, out removeAi); } }
private void FatBlockRemoved(MyCubeBlock cube) { try { var sessionNull = Session == null; var weaponType = (cube is MyConveyorSorter || cube is IMyUserControllableGun); var cubeDef = cube.BlockDefinition; var isWeaponBase = weaponType && cubeDef != null && !sessionNull && (Session.ReplaceVanilla && Session.VanillaIds.ContainsKey(cubeDef.Id) || Session.WeaponPlatforms.ContainsKey(cubeDef.Id)); var battery = cube as MyBatteryBlock; if (sessionNull) { Log.Line($"FatBlockRemoved Session was null: AiMarked:{MarkedForClose} - AiClosed:{Closed} - cubeMarked:{cube.MarkedForClose} - CubeGridMarked:{cube.CubeGrid.MarkedForClose} - isRegistered:{SubGridsRegistered.Contains(cube.CubeGrid)} - regCnt:{SubGridsRegistered.Count}"); } MyInventory inventory; if (!isWeaponBase && cube.HasInventory && cube.TryGetInventory(out inventory)) { if (!InventoryRemove(cube, inventory)) { Log.Line($"FatBlock inventory remove failed: {cube.BlockDefinition?.Id.SubtypeName} - gridMatch:{cube.CubeGrid == MyGrid} - aiMarked:{MarkedForClose} - {cube.CubeGrid.DebugName} - {MyGrid?.DebugName}"); } } else if (battery != null) { if (Batteries.Remove(battery)) { SourceCount--; } UpdatePowerSources = true; } } catch (Exception ex) { Log.Line($"Exception in FatBlockRemoved last: {ex} - Marked: {MarkedForClose} - Closed:{Closed}"); } }
private void FatBlockRemoved(MyCubeBlock cube) { try { var sessionNull = Session == null; var weaponType = (cube is MyConveyorSorter || cube is IMyUserControllableGun); var cubeDef = cube.BlockDefinition; var isWeaponBase = weaponType && cubeDef != null && !sessionNull && (Session.ReplaceVanilla && Session.VanillaIds.ContainsKey(cubeDef.Id) || Session.WeaponPlatforms.ContainsKey(cubeDef.Id)); if (sessionNull) { Log.Line($"FatBlockRemoved Session was null: AiMarked:{MarkedForClose} - AiClosed:{Closed} - cubeMarked:{cube.MarkedForClose} - CubeGridMarked:{cube.CubeGrid.MarkedForClose} - isRegistered:{SubGridsRegistered.Contains(cube.CubeGrid)} - regCnt:{SubGridsRegistered.Count}"); } try { var battery = cube as MyBatteryBlock; MyInventory inventory; if (!isWeaponBase && cube.HasInventory && cube.TryGetInventory(out inventory)) { try { if (inventory != null && !sessionNull && Session.UniqueListRemove(inventory, InventoryIndexer, Inventories)) { inventory.InventoryContentChanged -= CheckAmmoInventory; List <MyPhysicalInventoryItem> removedPhysical; List <BetterInventoryItem> removedBetter; if (Session.InventoryItems.TryRemove(inventory, out removedPhysical)) { removedPhysical.Clear(); } if (Session.AmmoThreadItemList.TryRemove(inventory, out removedBetter)) { removedBetter.Clear(); } } } catch (Exception ex) { Log.Line($"Exception in FatBlockRemoved inventory: {ex}"); } } else if (battery != null) { if (Batteries.Remove(battery)) { SourceCount--; } UpdatePowerSources = true; } } catch (Exception ex) { Log.Line($"Exception in FatBlockRemoved main: {ex}"); } } catch (Exception ex) { Log.Line($"Exception in FatBlockRemoved last: {ex} - Marked: {MarkedForClose} - Closed:{Closed}"); } }