public bool LinkGroup(Color group) { bool didLink = false; WarpChest master = null; foreach (WarpChest wc in chestList) { if (wc.isMain && wc.group == group) { master = wc; break; } } foreach (WarpChest wc in chestList) { if (wc.group == group && !wc.isMain) { didLink = true; if (wc.SlaveCheckRequirements() && !wc.HasInventoryChanged() && !master.HasInventoryChanged()) { wc.container.items.Clear(); foreach (Item item in master.container.items) { wc.container.addItem(item); } } else if (master.HasInventoryChanged() && !wc.HasInventoryChanged()) { Sync(wc, master); } else if (!master.HasInventoryChanged() && wc.HasInventoryChanged()) { Sync(master, wc); } else { DualSync(wc, master); } } } foreach (WarpChest wc in chestList) { if (wc.group == group) { wc.ResetInventoryCheck(); } } if (!master.MeetsRequirements()) { didLink = false; UnlinkGroup(master.group); } return(didLink); }
public void LinkChests() { Monitor.Log("Linking Chests", LogLevel.Debug); chestList.Clear(); IEnumerable <Chest> chests = GetAllChests(); foreach (Chest chest in chests) { WarpChest wc = new WarpChest(chest, chest.playerChoiceColor, mod, true); if (wc.MeetsRequirements()) { chestList.Add(wc); } } //DebugSearch(); foreach (WarpChest ch in chestList) { chestList = chestList.Where(chest => !chest.SameGroup(ch) || chest == ch).ToList(); } IList <WarpChest> slaveList = new List <WarpChest>(); foreach (Chest chest in chests) { foreach (WarpChest wc in chestList) { WarpChest nc = new WarpChest(chest, chest.playerChoiceColor, mod, true); if (wc.isMain && wc.container != nc.container && nc.group == wc.group && nc.SlaveCheckRequirements()) { slaveList.Add(new WarpChest(chest, chest.playerChoiceColor, mod)); } } } chestList = chestList.Concat(slaveList).ToList(); chestList = chestList.Where(wc => wc.SameGroup(chestList.Aggregate((c1, c2) => (c1.SameGroup(wc) && c1 != wc)?c1:c2))).ToList(); foreach (WarpChest wc in chestList) { if (wc.isMain) { bool attempt = LinkGroup(wc.group); if (attempt) { Monitor.Log("Linking group: " + wc.group, LogLevel.Debug); } } } }