public Vector2f screenToWorld(Vector2i screenPos) { Vector2f world = new Vector2f(screenPos.x / pixelSize.x, screenPos.y / pixelSize.y); world.add(windowPosition); return world; }
public void move(Vector2f diff) { position = new Vector2f(position); position.add(diff); for (RenderableNode child : children) { child.move(diff); } }
/** * Computes n random offset values for each block part texture. * * @param blockAppearance the block appearance information to generate offsets from * @param scale the scale of the texture area (should be in 0 < scale <= 1.0) * * @return a list of random offsets sampled from all block parts */ private List<Vector2f> computeOffsets(BlockAppearance blockAppearance, float scale) { final float relativeTileSize = worldAtlas.getRelativeTileSize(); final int absoluteTileSize = worldAtlas.getTileSize(); final float pixelSize = relativeTileSize / absoluteTileSize; final int spriteWidth = TeraMath.ceilToInt(scale * absoluteTileSize); final Stream<Vector2f> baseOffsets = Arrays.stream(BlockPart.sideValues()).map(blockAppearance::getTextureAtlasPos); return baseOffsets.flatMap(baseOffset -> IntStream.range(0, 8).boxed().map(i -> new Vector2f(baseOffset).add(random.nextInt(absoluteTileSize - spriteWidth) * pixelSize, random.nextInt(absoluteTileSize - spriteWidth) * pixelSize) ) ).collect(Collectors.toList()); }
private void drawConnection(Canvas canvas, Port from, Vector2f to, Color color) { Vector2f start = new Vector2f(from.node.getPosition()); start.add(from.mid()); drawConnection(canvas, start, to, color); }
public Vector2f mid() { Vector2f mid = new Vector2f(rect.size()); mid.scale(0.5f); mid.add(rect.min()); return mid; }
@Override public void onMouseDrag(NUIMouseDragEvent event) { Vector2f p = screenToWorld(last); p.sub(screenToWorld(event.getRelativeMousePosition())); p.add(windowPosition); setWindowPosition(p); }
protected void drawWidget(Canvas canvas, PositionalWidget widget) { if (!widget.isVisible()) { return; } Vector2i screenStart = worldToScreen(widget.getPosition()); Vector2f worldEnd = new Vector2f(widget.getPosition()); worldEnd.add(widget.getSize()); Vector2i screenEnd = worldToScreen(worldEnd); canvas.drawWidget(widget, Rect2i.createFromMinAndMax(screenStart, screenEnd)); }
Vector2f topLeft = selectedNode.getPosition(); Vector2f topRight = new Vector2f(topLeft); topRight.add(new Vector2f(size.x + .1f, 0)); Vector2f bottomLeft = new Vector2f(topLeft); bottomLeft.add(new Vector2f(0, size.y + .1f)); Vector2f bottomRight = new Vector2f(topLeft); bottomRight.add(new Vector2f(size.x + 0.1f, size.y + 0.1f)); drawConnection(canvas, topLeft, topRight, Color.GREEN); drawConnection(canvas, topRight, bottomRight, Color.GREEN);
at.add(offset);