public void UnplugTest() { MockConnection connection = new MockConnection(); UtilityGrid grid = new UtilityGrid(); Assert.IsTrue(powerNetwork.PlugIn(connection, grid)); Assert.AreEqual(1, powerGrids.Count); powerNetwork.Unplug(connection); Assert.AreEqual(0, grid.ConnectionCount); }
public void Init() { grid = new UtilityGrid(); Type powerGridType = typeof(UtilityGrid); FieldInfo field = powerGridType.GetField("connections", BindingFlags.NonPublic | BindingFlags.Instance); Assert.IsNotNull(field); connections = field.GetValue(grid) as HashSet <IPluggable>; Assert.IsNotNull(connections); }
/// <summary> /// Updates the grids of this utility sharing the grids along the network of connected utilities. /// </summary> /// <param name="utilityToUpdate">Utility to update.</param> /// <param name="newGrid">If not null this will force neighboring utilities to use the specified Instance of UtilityGrid.</param> public void UpdateGrid(Utility utilityToUpdate, UtilityGrid newGrid = null) { if (gridUpdatedThisFrame) { return; } gridUpdatedThisFrame = true; TimeManager.Instance.RunNextFrame(() => gridUpdatedThisFrame = false); UtilityGrid oldGrid = utilityToUpdate.Grid; World.Current.PowerNetwork.RemoveGrid(utilityToUpdate.Grid); if (newGrid == null) { foreach (Tile neighborTile in utilityToUpdate.Tile.GetNeighbours()) { if (neighborTile != null && neighborTile.Utilities != null && neighborTile.Utilities.ContainsKey(this.Type)) { Utility utility = neighborTile.Utilities[this.Type]; if (utility.Grid != null && utilityToUpdate.Grid == null) { utilityToUpdate.Grid = utility.Grid; } } } if (utilityToUpdate.Grid == null) { utilityToUpdate.Grid = new UtilityGrid(); } } else { utilityToUpdate.Grid = newGrid; } if (utilityToUpdate.Grid != oldGrid) { World.Current.PowerNetwork.UnregisterGrid(oldGrid); } if (oldGrid != null && newGrid != null) { newGrid.Merge(oldGrid); } World.Current.PowerNetwork.RegisterGrid(utilityToUpdate.Grid); foreach (Tile neighborTile in utilityToUpdate.Tile.GetNeighbours()) { if (neighborTile != null && neighborTile.Utilities != null) { if (neighborTile != null && neighborTile.Utilities != null && neighborTile.Utilities.ContainsKey(this.Type)) { Utility utility = neighborTile.Utilities[this.Type]; utility.UpdateGrid(utility, utilityToUpdate.Grid); } } } SeekConnection(); }