public FloatCoord getPinLocation(PlacedItem i, Pin p) { Coord itemLoc = i.loc; Coord pinLoc = p.getLocation(); ItemType type = i.i.getType(); return new FloatCoord( spacing.getX(itemLoc.x) - type.getOffsetX() + pinLoc.x, spacing.getY(itemLoc.y) - type.getOffsetY() + pinLoc.y); }
public void act(int dt) { z = new float[(int) spacing.getTotalWidth()][(int) spacing.getTotalHeight()]; List<RenderedWire> newWires = new ArrayList<>(); List<RenderedWire> oldWires = new ArrayList<>(); List<PlacedItem> itemSet = new ArrayList<>(); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { if (items[x][y] != null) { PlacedItem newItem = new PlacedItem(items[x][y], new Coord(x, y)); if (!itemSet.contains(newItem)) { itemSet.add(newItem); } } } } List<PlacedPin> pinSet = new ArrayList<>(); for (PlacedItem i : itemSet) { for (Pin p : i.i.getPins()) { if (p.getAttatched() != null) { pinSet.add(new PlacedPin(p, i)); } } } while (pinSet.size() > 0) { PlacedPin p0 = pinSet.remove(0); if (p0.p.getAttatched() != null) { boolean flag = true; if (p0.p.getAttatched().isAttatchedOnBothSides()) { flag = false; Pin other = p0.p.getAttatched().getOtherEnd(p0.p); PlacedPin p1 = pinSet.stream().filter(placedPin -> placedPin.p == other).findAny().orElse(null); if (p1 != null) { pinSet.remove(p1); RenderedWire testWire = new RenderedWire(p0, p1); if (wires.contains(testWire)) { oldWires.add(testWire); } else { newWires.add(testWire); } } else { flag = true; } } if (flag) // p0.p is not attached on both sides, or it is attached to something not in the // grid. { RenderedWire testWire = new RenderedWire(p0, null); if (wires.contains(testWire)) { oldWires.add(testWire); } else { newWires.add(testWire); } } } } for (RenderedWire w : wires) { if (oldWires.contains(w)) { addDepthInfo(w.path); } else { removeWire(w.path); } } for (RenderedWire w : newWires) { if (w.end != null) { w.setWirePath(addWire(w.start, w.end)); } else { w.setWirePath(addUnfinishedWire(w.start)); } } wires.retainAll(oldWires); wires.addAll(newWires); super.act(dt); }