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)));
}
}
}
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);
}
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);
}
}
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();
}
}
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();
}
Aggregations