示例#1
0
        public void Update()
        {
            foreach (Wire wire in elements.Values)
            {
                Point16 check = TheOneLibrary.Utility.Utility.TileEntityTopLeft(wire.position.X, wire.position.Y);

                if (TileEntity.ByPosition.ContainsKey(check))
                {
                    WireGrid   grid = wire.grid;
                    TileEntity te   = TileEntity.ByPosition[check];

                    if (wire.IO == Connection.In || wire.IO == Connection.Both)
                    {
                        (te as IEnergyProvider)?
                        .GetEnergyStorage()
                        .ModifyEnergyStored(
                            -grid.energy.ReceiveEnergy(TheOneLibrary.Utility.Utility.Min(grid.energy.GetMaxReceive(), grid.energy.GetCapacity() - grid.energy.GetEnergy(), ((IEnergyProvider)te).GetEnergyStorage().GetEnergy())));
                    }

                    if (wire.IO == Connection.Out || wire.IO == Connection.Both)
                    {
                        (te as IEnergyReceiver)?
                        .GetEnergyStorage()
                        .ModifyEnergyStored(grid.energy.ExtractEnergy(TheOneLibrary.Utility.Utility.Min(grid.energy.GetMaxExtract(), grid.energy.GetEnergy(), ((IEnergyReceiver)te).GetCapacity() - ((IEnergyReceiver)te).GetEnergy())));
                    }
                }
            }
        }
示例#2
0
 public void MergeGrids(WireGrid wireGrid)
 {
     for (int i = 0; i < wireGrid.tiles.Count; i++)
     {
         AddTile(wireGrid.tiles[i]);
     }
 }
示例#3
0
        public void Place(Point16 mouse, Player player)
        {
            if (Main.LocalPlayer.inventory.Any(x => x.modItem is BaseWire))
            {
                // Consumes item
                int  type = player.inventory.First(x => x.modItem is BaseWire).type;
                Item item = player.inventory.First(x => x.type == type);
                item.stack--;
                if (item.stack <= 0)
                {
                    item.TurnToAir();
                }

                // Creates a wire and places it in grid
                Wire wire = new Wire();
                wire.SetDefaults(type);
                wire.position = mouse;
                elements.Add(mouse, wire);

                // Creates a grid and set base values
                WireGrid grid = new WireGrid();
                grid.energy.SetMaxTransfer(wire.maxIO);
                grid.energy.SetCapacity(wire.maxIO * 2);
                grid.tiles.Add(wire);
                wire.grid = grid;

                // Merges and frames the wire
                wire.Merge();
                wire.Frame();

                // Frames all surrounding wires
                foreach (Point16 add in TheOneLibrary.Utility.Utility.CheckNeighbours())
                {
                    if (elements.ContainsKey(mouse.X + add.X, mouse.Y + add.Y))
                    {
                        Wire merge = elements[mouse + add];
                        if (merge.type == type)
                        {
                            merge.Frame();
                        }
                    }
                }
            }
        }
示例#4
0
        public void ReformGrid()
        {
            Main.NewText(tiles.Count);

            for (int i = 0; i < tiles.Count; i++)
            {
                WireGrid newGrid = new WireGrid();
                newGrid.energy.SetMaxTransfer(tiles[i].maxIO);
                newGrid.energy.SetCapacity(tiles[i].maxIO * 2);
                newGrid.energy.ModifyEnergyStored(GetEnergySharePerNode());
                newGrid.tiles.Add(tiles[i]);
                tiles[i].grid = newGrid;
            }

            for (int i = 0; i < tiles.Count; i++)
            {
                tiles[i].Merge();
            }
        }