示例#1
0
    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);
    }
示例#2
0
    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);
    }
示例#3
0
    /// <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();
    }