Пример #1
0
        internal void Attach(Powerline edge, IPowerable node1, IPowerable node2)
        {
            bool node1Powered = node1.HasPowerGrid() && grids.ContainsKey(node1.PowerGridInstanceID);
            bool node2Powered = node2.HasPowerGrid() && grids.ContainsKey(node2.PowerGridInstanceID);

            if (node1Powered && node2Powered)
            {
                //deprecate node2's power grid by having node1's power grid usurp it
                PowerGrid deprecatedPowergrid = grids[node2.PowerGridInstanceID];

                grids[node1.PowerGridInstanceID].Usurp(deprecatedPowergrid);

                grids.Remove(deprecatedPowergrid.PowerGridInstanceID);
            }
            else if (node1Powered)
            {
                grids[node1.PowerGridInstanceID].Add(node2);
            }
            else if (node2Powered)
            {
                grids[node2.PowerGridInstanceID].Add(node1);
            }
            else
            {
                PowerGrid newPG = new PowerGrid();
                grids.Add(newPG.PowerGridInstanceID, newPG);
                newPG.Add(node1);
                newPG.Add(node2);
            }

            AddEdge(edge, node1);
            AddEdge(edge, node2);
        }
Пример #2
0
        internal void Add(Habitat h)
        {
            if (!h.HasPowerGrid())
            {
                PowerGrid newPG = new PowerGrid();
                grids.Add(newPG.PowerGridInstanceID, newPG);
                newPG.Add(h);
            }

            h.OnPowerChanged();
        }
Пример #3
0
        private void BuildPowerGridVisitPowerNodes(IPowerable parentNode, PowerGrid parentGrid, Dictionary <IPowerable, bool> visited)
        {
            parentGrid.Add(parentNode);
            visited.Add(parentNode, true);

            foreach (Powerline edge in Edges[parentNode])
            {
#pragma warning disable CS0253 // Possible unintended reference comparison; right hand side needs cast
                IPowerable child = (edge.Data.From == parentNode) ? edge.Data.To as IPowerable : edge.Data.From as IPowerable;
#pragma warning restore CS0253 // Possible unintended reference comparison; right hand side needs cast

                if (!visited.ContainsKey(child))
                {
                    BuildPowerGridVisitPowerNodes(child, parentGrid, visited);
                }
            }
        }