/**
* LightingControls.java
*
* Copyright (c) 2013-2016, F(X)yz
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of F(X)yz, any associated website, nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL F(X)yz BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.fxyz3d.controls;
import javafx.beans.property.Property;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.geometry.Point3D;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import jfxtras.scene.control.ListSpinner;
/**
* FXML Controller class
*
* @author Jason Pollastrini aka jdub1581
*/
public class LightingControls extends ControlBase<Property<Boolean>> {
@FXML
private VBox lighting1;
@FXML
private Label light1Label;
@FXML
private Slider colorL1;
@FXML
private VBox rotControlL1;
@FXML
private ListSpinner<Integer> light1Rotate;
@FXML
private HBox rotAxisL1;
@FXML
private ToggleButton xAxisL1;
@FXML
private ToggleButton yAxisL1;
@FXML
private ToggleButton zAxisL1;
@FXML
private Slider distL1;
@FXML
private CheckBox l1On;
private final ObservableList<Integer> angL1 = FXCollections.observableArrayList();
public LightingControls(final Property<Boolean> show,
final Property<Boolean> lt1On,
final Property<Color> c1,
final Property<Number> d1,
final Property<Number> r1,
final Property<Point3D> ra1
) {
super("/org/fxyz3d/controls/LightControlPanel.fxml", show);
this.setOnMouseEntered(me->{me.consume();});
colorL1.getStyleClass().addAll("colorSlider", "lighting-slider");
loadAngles();
light1Rotate.setValue(0);
light1Rotate.valueProperty().addListener(e->{
r1.setValue(light1Rotate.getValue());
});
colorL1.valueProperty().addListener(e -> {
if(colorL1.getValue() < 10){
c1.setValue(Color.WHITE);
}else{
c1.setValue(Color.hsb(360 * (1d - colorL1.getValue() / 1530d), 1, 1));
}
});
xAxisL1.selectedProperty().addListener(e->{
ra1.setValue(Point3D.ZERO.add(
xAxisL1.isSelected() ? 1 : 0,
yAxisL1.isSelected() ? 1 : 0,
zAxisL1.isSelected() ? 1 : 0
));
});
yAxisL1.selectedProperty().addListener(e->{
ra1.setValue(Point3D.ZERO.add(
xAxisL1.isSelected() ? 1 : 0,
yAxisL1.isSelected() ? 1 : 0,
zAxisL1.isSelected() ? 1 : 0
));
});
zAxisL1.selectedProperty().addListener(e->{
ra1.setValue(Point3D.ZERO.add(
xAxisL1.isSelected() ? 1 : 0,
yAxisL1.isSelected() ? 1 : 0,
zAxisL1.isSelected() ? 1 : 0
));
});
d1.bind(distL1.valueProperty());
lt1On.bind(l1On.selectedProperty());
}
private void loadAngles() {
for (int i = 0; i < 360; i+=3) {
angL1.add(i);
}
light1Rotate.setItems(angL1);
}
}