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()))); } } } }
public void MergeGrids(WireGrid wireGrid) { for (int i = 0; i < wireGrid.tiles.Count; i++) { AddTile(wireGrid.tiles[i]); } }
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(); } } } } }
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(); } }