internal bool acceptsCurrentFrom(WireCurrentTransfer wireCurrentTransfer) { if (currentTransfer == WireCurrentTransfer.NONE) { return(true); } else if (wireCurrentTransfer == WireCurrentTransfer.DOWN && transfersCurrentTo(WireCurrentTransfer.DOWN)) { return(true); } else if (wireCurrentTransfer == WireCurrentTransfer.UP && transfersCurrentTo(WireCurrentTransfer.UP)) { return(true); } else if (wireCurrentTransfer == WireCurrentTransfer.LEFT && transfersCurrentTo(WireCurrentTransfer.LEFT)) { return(true); } else if (wireCurrentTransfer == WireCurrentTransfer.RIGHT && transfersCurrentTo(WireCurrentTransfer.RIGHT)) { return(true); } else { return(false); } }
internal bool acceptsCurrentFrom(WireCurrentTransfer wireCurrentTransfer) { if (this.currentTransfer == WireCurrentTransfer.NONE) return true; else if (wireCurrentTransfer == WireCurrentTransfer.DOWN && this.transfersCurrentTo(WireCurrentTransfer.DOWN)) return true; else if (wireCurrentTransfer == WireCurrentTransfer.UP && this.transfersCurrentTo(WireCurrentTransfer.UP)) return true; else if (wireCurrentTransfer == WireCurrentTransfer.LEFT && this.transfersCurrentTo(WireCurrentTransfer.LEFT)) return true; else if (wireCurrentTransfer == WireCurrentTransfer.RIGHT && this.transfersCurrentTo(WireCurrentTransfer.RIGHT)) return true; else return false; }
internal void AddOrUpdateWire(int x, int y, CurrentType type, WireCurrentTransfer transfer) { List<Point> result = null; result = wireSolver.AddOrUpdateWire(x, y, type, transfer); foreach (Point t in result) { try { yaaaay[t].updateWireState(wireSolver.getWireTransfer(t)); } catch { } } StringBuilder sb = new StringBuilder(); foreach (Point t in result) { sb.AppendLine(t.ToString()); } }
public List <Point> AddOrUpdateWire(int x, int y, CurrentType newCurrent, WireCurrentTransfer currentTransfer) { var result = new LinkedList <WireTransfer>(); var updatedWire = getWireTransfer(new Point(x, y)); if (newCurrent == CurrentType.ON) { } else if (newCurrent == CurrentType.SENDER) { currentTransfer = WireCurrentTransfer.DOWN | WireCurrentTransfer.LEFT | WireCurrentTransfer.RIGHT | WireCurrentTransfer.UP; updatedWire.setCurrentTransfer(currentTransfer); updatedWire.setCurrent(CurrentType.SENDER); updatePowerGrid(updatedWire, ref result); } else if (newCurrent == CurrentType.OFF) { var neighbours = new WireTransfer[4]; storeNeighbours(updatedWire, neighbours, true); updatedWire.setCurrent(CurrentType.OFF); updatedWire.setCurrentTransfer(currentTransfer); updatePowerGrid(updatedWire, ref result); for (var i = 0; i < 4; i++) { if (neighbours[i] == null) { continue; } updatePowerGrid(neighbours[i], ref result); } } var finalResult = new List <Point>(); foreach (var t in result) { if (!finalResult.Contains(t.location)) { finalResult.Add(t.location); } } return(finalResult); }
internal void AddOrUpdateWire(int x, int y, CurrentType type, WireCurrentTransfer transfer) { List <Point> result = null; result = wireSolver.AddOrUpdateWire(x, y, type, transfer); foreach (Point t in result) { try { yaaaay[t].updateWireState(wireSolver.getWireTransfer(t)); } catch { } } StringBuilder sb = new StringBuilder(); foreach (Point t in result) { sb.AppendLine(t.ToString()); } }
internal void TriggerOnWire(Point location) { WireTransfer transferItem = wireSlower.getWireTransfer(location); List <Point> pointsToTrigger; WireCurrentTransfer transferType = WireCurrentTransfer.DOWN | WireCurrentTransfer.LEFT | WireCurrentTransfer.RIGHT | WireCurrentTransfer.UP; if (transferItem.isPowered() && transferItem.getTransfer() == transferType) { pointsToTrigger = wireSlower.RemoveWire(location.X, location.Y); //form.Remove(location.X, location.Y); } else { pointsToTrigger = wireSlower.AddOrUpdateWire(location.X, location.Y, CurrentType.SENDER, WireCurrentTransfer.NONE); //form.AddOrUpdateWire(location.X, location.Y, CurrentType.SENDER, WireCurrentTransfer.NONE); } HandleItems(pointsToTrigger, location); }
public List<Point> AddOrUpdateWire(int x, int y, CurrentType newCurrent, WireCurrentTransfer currentTransfer) { LinkedList<WireTransfer> result = new LinkedList<WireTransfer>(); WireTransfer updatedWire = getWireTransfer(new Point(x, y)); if(newCurrent == CurrentType.ON) { } else if (newCurrent == CurrentType.SENDER) { currentTransfer = WireCurrentTransfer.DOWN | WireCurrentTransfer.LEFT | WireCurrentTransfer.RIGHT | WireCurrentTransfer.UP; updatedWire.setCurrentTransfer(currentTransfer); updatedWire.setCurrent(CurrentType.SENDER); updatePowerGrid(updatedWire, ref result); } else if (newCurrent == CurrentType.OFF) { WireTransfer[] neighbours = new WireTransfer[4]; storeNeighbours(updatedWire, neighbours, true); updatedWire.setCurrent(CurrentType.OFF); updatedWire.setCurrentTransfer(currentTransfer); updatePowerGrid(updatedWire, ref result); for (int i = 0; i < 4; i++) { if (neighbours[i] == null) continue; updatePowerGrid(neighbours[i], ref result); } } List<Point> finalResult = new List<Point>(); foreach (WireTransfer t in result) { if (!finalResult.Contains(t.location)) finalResult.Add(t.location); } return finalResult; }
internal void setCurrentTransfer(WireCurrentTransfer wireCurrentTransfer) { currentTransfer = wireCurrentTransfer; }
internal bool transfersCurrentTo(WireCurrentTransfer current) { return((current & currentTransfer) == current); }
public WireTransfer(int x, int y, WireCurrentTransfer currentTransfer) { location = new Point(x, y); this.currentTransfer = currentTransfer; Current = CurrentType.OFF; }
internal void AddWire(RoomItem item, Point location, int rotation, InteractionType wireType) { WireCurrentTransfer transfer = WireCurrentTransfer.NONE; switch (wireType) { case InteractionType.wireCenter: { transfer = WireCurrentTransfer.DOWN | WireCurrentTransfer.LEFT | WireCurrentTransfer.RIGHT | WireCurrentTransfer.UP; break; } case InteractionType.wireCorner: { switch (rotation) { default: { transfer = WireCurrentTransfer.DOWN | WireCurrentTransfer.RIGHT; break; } case 2: { transfer = WireCurrentTransfer.DOWN | WireCurrentTransfer.LEFT; break; } case 4: { transfer = WireCurrentTransfer.UP | WireCurrentTransfer.LEFT; break; } case 6: { transfer = WireCurrentTransfer.RIGHT | WireCurrentTransfer.UP; break; } } break; } case InteractionType.wireSplitter: { switch (rotation) { default: { transfer = WireCurrentTransfer.UP | WireCurrentTransfer.DOWN | WireCurrentTransfer.RIGHT; break; } case 2: { transfer = WireCurrentTransfer.LEFT | WireCurrentTransfer.RIGHT | WireCurrentTransfer.DOWN; break; } case 4: { transfer = WireCurrentTransfer.UP | WireCurrentTransfer.DOWN | WireCurrentTransfer.LEFT; break; } case 6: { transfer = WireCurrentTransfer.LEFT | WireCurrentTransfer.RIGHT | WireCurrentTransfer.UP; break; } } break; } case InteractionType.wireStandard: { switch (rotation) { default: case 0: case 4: { transfer = WireCurrentTransfer.UP | WireCurrentTransfer.DOWN; break; } case 2: case 6: { transfer = WireCurrentTransfer.LEFT | WireCurrentTransfer.RIGHT; break; } } break; } } if (transfer == WireCurrentTransfer.NONE) { return; } List <Point> pointsToTrigger = wireSlower.AddOrUpdateWire(location.X, location.Y, CurrentType.OFF, transfer); //form.AddOrUpdateWire(location.X, location.Y, CurrentType.OFF, transfer); HandleItems(pointsToTrigger); }
internal void setCurrentTransfer(WireCurrentTransfer wireCurrentTransfer) { this.currentTransfer = wireCurrentTransfer; }
public WireTransfer(int x, int y, WireCurrentTransfer currentTransfer) { this.location = new Point(x, y); this.currentTransfer = currentTransfer; this.Current = CurrentType.OFF; }
internal bool transfersCurrentTo(WireCurrentTransfer current) { return ((current & this.currentTransfer) == current); }