コード例 #1
0
        private void TryManualReconnect()
        {
            if (lastManualReconnector != this)
            {
                recentlyConnectedNets.Clear();
                lastManualReconnector = this;
            }
            if (WaterNet != null)
            {
                recentlyConnectedNets.Add(WaterNet);
            }
            var compWater = WaterConnectionMaker.BestTransmitterForConnector(parent.Position, parent.Map, recentlyConnectedNets);

            if (compWater == null)
            {
                recentlyConnectedNets.Clear();
                compWater = WaterConnectionMaker.BestTransmitterForConnector(parent.Position, parent.Map);
            }
            if (compWater != null)
            {
                WaterConnectionMaker.DisconnectFromWaterNet(this);
                ConnectToTransmitter(compWater);
                for (var i = 0; i < 5; i++)
                {
                    MoteMaker.ThrowMetaPuff(compWater.parent.Position.ToVector3Shifted(), compWater.parent.Map);
                }
                parent.Map.mapDrawer.MapMeshDirty(parent.Position, MapMeshFlag.PowerGrid);
                parent.Map.mapDrawer.MapMeshDirty(parent.Position, MapMeshFlag.Things);
            }
        }
コード例 #2
0
 private void TryCreateNetAt(IntVec3 cell)
 {
     if (!cell.InBounds(map))
     {
         return;
     }
     if (map.GetComponent <WaterNetGrid>().TransmittedWaterNetAt(cell) == null)
     {
         Building transmitter = cell.GetWaterTransmitter(map);
         if (transmitter != null && transmitter.TransmitsWaterNow())
         {
             WaterNet waterNet = WaterNetMaker.NewWaterNetStartingFrom(transmitter);
             RegisterWaterNet(waterNet);
             for (int i = 0; i < waterNet.transmitters.Count; i++)
             {
                 WaterConnectionMaker.ConnectAllConnectorsToTransmitter(waterNet.transmitters[i]);
             }
         }
     }
 }
コード例 #3
0
        public void UpdateWaterNetsAndConnections_First()
        {
            int count = delayedActions.Count;

            for (int i = 0; i < count; i++)
            {
                DelayedAction     delayedAction = delayedActions[i];
                DelayedActionType type          = delayedActions[i].type;
                if (type != DelayedActionType.RegisterTransmitter)
                {
                    if (type == DelayedActionType.DeregisterTransmitter)
                    {
                        TryDestroyNetAt(delayedAction.position);
                        WaterConnectionMaker.DisconnectAllFromTransmitterAndSetWantConnect(delayedAction.CompWater, map);
                        delayedAction.CompWater.ResetWaterVars();
                    }
                }
                else if (delayedAction.position == delayedAction.CompWater.parent.Position)
                {
                    ThingWithComps parent = delayedAction.CompWater.parent;
                    if (map.GetComponent <WaterNetGrid>().TransmittedWaterNetAt(parent.Position) != null)
                    {
                        Log.Warning(string.Concat("Tried to register trasmitter ", parent, " at ", parent.Position, ", but there is already a power net here. There can't be two transmitters on the same cell."));
                    }
                    delayedAction.CompWater.SetUpWaterVars();
                    foreach (IntVec3 cell in GenAdj.CellsAdjacentCardinal(parent))
                    {
                        TryDestroyNetAt(cell);
                    }
                }
            }
            for (int j = 0; j < count; j++)
            {
                DelayedAction delayedAction2 = delayedActions[j];
                if ((delayedAction2.type == DelayedActionType.RegisterTransmitter && delayedAction2.position == delayedAction2.CompWater.parent.Position) || delayedAction2.type == DelayedActionType.DeregisterTransmitter)
                {
                    TryCreateNetAt(delayedAction2.position);
                    foreach (IntVec3 cell2 in GenAdj.CellsAdjacentCardinal(delayedAction2.position, delayedAction2.rotation, delayedAction2.CompWater.parent.def.size))
                    {
                        TryCreateNetAt(cell2);
                    }
                }
            }
            for (int k = 0; k < count; k++)
            {
                DelayedAction     delayedAction3 = delayedActions[k];
                DelayedActionType type2          = delayedActions[k].type;
                if (type2 != DelayedActionType.RegisterConnector)
                {
                    if (type2 == DelayedActionType.DeregisterConnector)
                    {
                        WaterConnectionMaker.DisconnectFromWaterNet(delayedAction3.CompWater);
                        delayedAction3.CompWater.ResetWaterVars();
                    }
                }
                else if (delayedAction3.position == delayedAction3.CompWater.parent.Position)
                {
                    delayedAction3.CompWater.SetUpWaterVars();
                    WaterConnectionMaker.TryConnectToAnyWaterNet(delayedAction3.CompWater, null);
                }
            }
            delayedActions.RemoveRange(0, count);
            if (DebugViewSettings.drawPower)
            {
                DrawDebugWaterNets();
            }
        }