Search in sources :

Example 31 with Shape

use of javafx.scene.shape.Shape in project OTP2_R6_svaap by JNuutinen.

the class Unit method sortComponents.

/**
 * Lajittelee primaryWeapons ja secondaryWeapon -aseet, niin että luo jonoja aina parittoman määrän vähintään yhtä monta kun kyseisissä listoissa
 * on eniten saman tyyppisiä aseita. Pariton määrä jonoja siksi jotta aluksella on aina olemassa 1 jono keskellä alusta. Saman tyyppiset aseet lajitellaan
 * eri jonoihin eli aluksen sivusuuntaisesti niin että parillisesta määrästä samoista aseista ei mene asetta aluksen keskijonoon, ja toisinpäin, jotta lajittelu
 * pysyisi symmetrisenä. Yksi jono voi taas sisältää rajaton määrä eri tyyppisiä aseita jotka lajitellaan aluksen etusuuntaisesti.
 * Aseet lajitellaan siis siten että aluksen keskeltä alkaen lisätään aseita sivu- tai/ja etusuuntaan riippuen
 * kuinka monta saman tyyppistä asetta ja kuinka monta eri asetta on aluksella.
 */
private void sortComponents() {
    // lista johon lisätään lajiteltavat aseet.
    List<List<Weapon>> weaponLists = new ArrayList<>();
    weaponLists.add(new ArrayList<>());
    // aseiden indeksit jota on jo lisätty lajiteltaviin aseisiin
    List<Integer> alreadyAddedIndex = new ArrayList<>();
    // aseiden indeksit jotka lisätään lajiteltaviin aseisiiin. apumuuttuja.
    List<Integer> toBeAddedIndexes = new ArrayList<>();
    // tuplaiterointi
    for (int i = 0; i < primaryWeapons.size(); i++) {
        // tyhjää lisättävät aseiden indeksit ja lisää tarkasteltava alkio
        toBeAddedIndexes.clear();
        if (!alreadyAddedIndex.contains(i)) {
            toBeAddedIndexes.add(i);
        }
        for (int j = 0; j < primaryWeapons.size(); j++) {
            // ei ole jo lisätty lajiteltaviin...
            if (primaryWeapons.get(i) != primaryWeapons.get(j) && primaryWeapons.get(i).getClass() == primaryWeapons.get(j).getClass() && !alreadyAddedIndex.contains(i)) {
                // ...niin lisää alkio lajiteltuihin ja lisättäviin aseisiin joka pitää sisällään vain saman tyyppisiä aseita.
                alreadyAddedIndex.add(j);
                toBeAddedIndexes.add(j);
            }
        }
        // jotta jonolukumäärä pysyy parittomana.
        while (weaponLists.size() < toBeAddedIndexes.size()) {
            weaponLists.add(0, new ArrayList<>());
            weaponLists.add(new ArrayList<>());
        }
        // eka indeksi johon lisättävistä lisätään ase jotta weaponList lista pysyy symmetrisenä.
        int firstIndex = (weaponLists.size() - toBeAddedIndexes.size()) / 2;
        // keskimmäinen indeksi aselistoista. apumuuttuja
        int iMidIndex = (weaponLists.size()) / 2;
        // apumuuttuja tilanteeseen jossa ei lisätä keskimmäiseen listaan asetta, eli silloin kun saman tyyppisiä aseita on parillinen määrä.
        int addedIndex = 0;
        // lisätään secondaryWeapon keskimmäiseen listaan.
        if (getSecondaryWeapon() != null) {
            weaponLists.get(iMidIndex).add(getSecondaryWeapon());
        }
        // listään lisättävät, eli samantyyppiset, aseet lajiteltavien listaan:
        for (int k = 0; k < toBeAddedIndexes.size(); k++) {
            // jos lisättävät on parillinen määrä
            if (toBeAddedIndexes.size() % 2 == 0) {
                // seuraavat aseet lisätään aina yhtä pidemmälle olevaan listaan (koska keskilista skipattiin)
                if (k + firstIndex == iMidIndex) {
                    addedIndex = 1;
                    weaponLists.get(k + firstIndex + addedIndex).add(primaryWeapons.get(toBeAddedIndexes.get(k)));
                } else {
                    weaponLists.get(k + firstIndex + addedIndex).add(primaryWeapons.get(toBeAddedIndexes.get(k)));
                }
            } else // jos lisättävät on pariton määrä
            {
                weaponLists.get(k + firstIndex).add(primaryWeapons.get(toBeAddedIndexes.get(k)));
            }
        }
    }
    // Vaihda lajiteltavien aseiden sijantia ja ammuksen aloitussijaintia riippuen lajiteltavat listan listan indeksistä ja
    // sen listan aseen indeksistä, verrattuna kummankin llistan keski-indekseihin.
    int iMidIndex = (weaponLists.size()) / 2;
    for (int i = 0; i < weaponLists.size(); i++) {
        int jMidIndex = (weaponLists.get(i).size()) / 2;
        for (int j = 0; j < weaponLists.get(i).size(); j++) {
            Shape componentShape = weaponLists.get(i).get(j).getShape();
            componentShape.setLayoutX(26 * (j - jMidIndex));
            componentShape.setLayoutY(26 * (i - iMidIndex));
            weaponLists.get(i).get(j).setProjectileOffset(new Point2D(weaponLists.get(i).get(j).getProjectileOffset().getX(), 26 * (i - iMidIndex)));
        }
    }
}
Also used : Shape(javafx.scene.shape.Shape) Point2D(javafx.geometry.Point2D) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List)

Example 32 with Shape

use of javafx.scene.shape.Shape in project TeachingInSimulation by ScOrPiOzzy.

the class SVGGlyph method init.

// public SVGGlyph(String svgPathContent) {
// this(-1, "UNNAMED", svgPathContent, Color.BLACK);
// }
// public SVGGlyph(String svgPathContent, Paint fill) {
// this(-1, "UNNAMED", svgPathContent, fill);
// }
// /**
// * Constructs SVGGlyph node for a specified svg content and color <b>Note:</b> name and glyphId is not needed when creating a single SVG image, they have been used in {@link SVGHelper} to load icomoon svg font.
// * @param glyphId integer represents the glyph id
// * @param name glyph name
// * @param svgPathContent svg content
// * @param fill svg color
// */
// public SVGGlyph(int glyphId, String name, String svgPathContent, Paint fill) {
// this.glyphId = glyphId;
// this.name.set(name);
// init(svgPathContent, fill);
// }
private void init(String svgPathContent, Paint fill) {
    getStyleClass().add(DEFAULT_STYLE_CLASS);
    this.fill.addListener((observable) -> setBackground(new Background(new BackgroundFill(getFill() == null ? Color.BLACK : getFill(), null, null))));
    shapeProperty().addListener(observable -> {
        Shape shape = getShape();
        if (getShape() != null) {
            widthHeightRatio = shape.prefWidth(-1) / shape.prefHeight(-1);
            if (getSize() != Region.USE_COMPUTED_SIZE) {
                setSizeRatio(getSize());
            }
        }
    });
    SVGPath shape = new SVGPath();
    shape.setContent(svgPathContent);
    setShape(shape);
    setFill(fill);
    setPrefSize(DEFAULT_PREF_SIZE, DEFAULT_PREF_SIZE);
    getTransforms().add(new Scale(1, -1));
    Translate height = new Translate();
    height.yProperty().bind(Bindings.createDoubleBinding(() -> -this.getHeight(), this.heightProperty()));
    getTransforms().add(height);
}
Also used : Shape(javafx.scene.shape.Shape) Background(javafx.scene.layout.Background) BackgroundFill(javafx.scene.layout.BackgroundFill) Scale(javafx.scene.transform.Scale) SVGPath(javafx.scene.shape.SVGPath) Translate(javafx.scene.transform.Translate)

Example 33 with Shape

use of javafx.scene.shape.Shape in project tilesfx by HanSolo.

the class CircularProgressTileSkin method resize.

@Override
protected void resize() {
    super.resize();
    width = tile.getWidth() - tile.getInsets().getLeft() - tile.getInsets().getRight();
    height = tile.getHeight() - tile.getInsets().getTop() - tile.getInsets().getBottom();
    size = width < height ? width : height;
    if (width > 0 && height > 0) {
        pane.setMaxSize(width, height);
        pane.setPrefSize(width, height);
        double chartWidth = contentBounds.getWidth();
        double chartHeight = contentBounds.getHeight();
        chartSize = chartWidth < chartHeight ? chartWidth : chartHeight;
        double maxContainerSize = chartSize * 0.5;
        double containerWidth = maxContainerSize - size * 0.1;
        double containerHeight = tile.isTextVisible() ? height - maxContainerSize * 0.28 : height - maxContainerSize * 0.205;
        double radius = chartSize * 0.495 - contentBounds.getX();
        barBackground.setCenterX(contentCenterX);
        barBackground.setCenterY(contentCenterY);
        barBackground.setRadiusX(radius);
        barBackground.setRadiusY(radius);
        barBackground.setStrokeWidth(chartSize * 0.1);
        bar.setCenterX(contentCenterX);
        bar.setCenterY(contentCenterY);
        bar.setRadiusX(radius);
        bar.setRadiusY(radius);
        bar.setStrokeWidth(chartSize * 0.1);
        separator.setStartX(contentCenterX);
        separator.setStartY(contentCenterX - radius - chartSize * 0.05);
        separator.setEndX(contentCenterX);
        separator.setEndY(contentCenterX - radius + chartSize * 0.05);
        if (graphicContainer.isVisible() && containerWidth > 0 && containerHeight > 0) {
            graphicContainer.setMinSize(containerWidth, containerHeight);
            graphicContainer.setMaxSize(containerWidth, containerHeight);
            graphicContainer.setPrefSize(containerWidth, containerHeight);
            graphicContainer.relocate((width - containerWidth) * 0.5, (height - containerHeight) * 0.35);
            if (null != tile) {
                Node graphic = tile.getGraphic();
                if (tile.getGraphic() instanceof Shape) {
                    double graphicWidth = graphic.getBoundsInLocal().getWidth();
                    double graphicHeight = graphic.getBoundsInLocal().getHeight();
                    if (graphicWidth > containerWidth || graphicHeight > containerHeight) {
                        double scale;
                        if (graphicWidth - containerWidth > graphicHeight - containerHeight) {
                            scale = containerWidth / graphicWidth;
                        } else {
                            scale = containerHeight / graphicHeight;
                        }
                        graphic.setScaleX(scale);
                        graphic.setScaleY(scale);
                    }
                } else if (tile.getGraphic() instanceof ImageView) {
                    ((ImageView) graphic).setFitWidth(containerWidth);
                    ((ImageView) graphic).setFitHeight(containerHeight);
                }
            }
        }
        resizeStaticText();
        percentageFlow.setPrefWidth(width * 0.9);
        percentageFlow.relocate(width * 0.05, graphicContainer.isVisible() ? bar.getCenterY() + chartSize * 0.12 : bar.getCenterY() - chartSize * 0.12);
        valueUnitFlow.setPrefWidth(width * 0.9);
        valueUnitFlow.relocate(width * 0.05, graphicContainer.isVisible() ? bar.getCenterY() - chartSize * 0.32 : bar.getCenterY() + chartSize * 0.15);
    }
}
Also used : Shape(javafx.scene.shape.Shape) Node(javafx.scene.Node) Helper.enableNode(eu.hansolo.tilesfx.tools.Helper.enableNode) ImageView(javafx.scene.image.ImageView)

Example 34 with Shape

use of javafx.scene.shape.Shape in project tilesfx by HanSolo.

the class CustomTileSkin method resize.

@Override
protected void resize() {
    super.resize();
    width = tile.getWidth() - tile.getInsets().getLeft() - tile.getInsets().getRight();
    height = tile.getHeight() - tile.getInsets().getTop() - tile.getInsets().getBottom();
    size = width < height ? width : height;
    double containerWidth = contentBounds.getWidth();
    double containerHeight = contentBounds.getHeight();
    if (width > 0 && height > 0) {
        pane.setMaxSize(width, height);
        pane.setPrefSize(width, height);
        if (containerWidth > 0 && containerHeight > 0) {
            graphicContainer.setMinSize(containerWidth, containerHeight);
            graphicContainer.setMaxSize(containerWidth, containerHeight);
            graphicContainer.setPrefSize(containerWidth, containerHeight);
            graphicContainer.relocate(contentBounds.getX(), contentBounds.getY());
            if (null != tile) {
                Node graphic = tile.getGraphic();
                if (tile.getGraphic() instanceof Shape) {
                    double width = graphic.getBoundsInLocal().getWidth();
                    double height = graphic.getBoundsInLocal().getHeight();
                    if (width > containerWidth || height > containerHeight) {
                        double scale;
                        if (width - containerWidth > height - containerHeight) {
                            scale = containerWidth / width;
                        } else
                            scale = containerHeight / height;
                        graphic.setScaleX(scale);
                        graphic.setScaleY(scale);
                    }
                } else if (tile.getGraphic() instanceof ImageView) {
                    ImageView imgView = (ImageView) graphic;
                    imgView.setPreserveRatio(true);
                    imgView.setFitHeight(containerHeight);
                // ((ImageView) graphic).setFitWidth(containerWidth);
                // ((ImageView) graphic).setFitHeight(containerHeight);
                }
            }
        }
        resizeStaticText();
    }
}
Also used : Shape(javafx.scene.shape.Shape) Node(javafx.scene.Node) ImageView(javafx.scene.image.ImageView)

Example 35 with Shape

use of javafx.scene.shape.Shape in project FXGL by AlmasB.

the class AnimatedPathSample method initGame.

@Override
protected void initGame() {
    Rectangle node = new Rectangle(40, 40);
    addUINode(node, 100, 100);
    // create shape along which we'll animate our node
    Shape shape = new Circle(80);
    shape.setTranslateX(200);
    shape.setTranslateY(200);
    shape = Shape.subtract(new Rectangle(200, 200), shape);
    animationBuilder().interpolator(Interpolators.BOUNCE.EASE_OUT()).duration(Duration.seconds(5.0)).translate(node).alongPath(shape).buildAndPlay();
}
Also used : Circle(javafx.scene.shape.Circle) Shape(javafx.scene.shape.Shape) Rectangle(javafx.scene.shape.Rectangle)

Aggregations

Shape (javafx.scene.shape.Shape)35 Rectangle (javafx.scene.shape.Rectangle)9 Node (javafx.scene.Node)8 Test (org.junit.Test)7 TimeGraphDrawnEventProvider (com.efficios.jabberwocky.views.timegraph.model.provider.drawnevents.TimeGraphDrawnEventProvider)6 Color (javafx.scene.paint.Color)6 Circle (javafx.scene.shape.Circle)6 StubDrawnEventProvider1 (org.lttng.scope.views.timeline.widgets.timegraph.StubDrawnEventProviders.StubDrawnEventProvider1)6 ArrayList (java.util.ArrayList)4 List (java.util.List)4 Collectors (java.util.stream.Collectors)4 Platform (javafx.application.Platform)4 Text (javafx.scene.text.Text)4 Bounds (javafx.geometry.Bounds)3 Parent (javafx.scene.Parent)3 URL (java.net.URL)2 ResourceBundle (java.util.ResourceBundle)2 SimpleIntegerProperty (javafx.beans.property.SimpleIntegerProperty)2 FXML (javafx.fxml.FXML)2 Initializable (javafx.fxml.Initializable)2