|
@@ -14,14 +14,15 @@ import org.openide.util.WeakListeners;
|
|
|
|
|
|
/**
|
|
|
* A ShaderNodeBlock is a shader node in the MatDef file.
|
|
|
+ *
|
|
|
* @author Nehon
|
|
|
*/
|
|
|
public class ShaderNodesBlock extends UberStatement implements PropertyChangeListener {
|
|
|
-
|
|
|
+
|
|
|
protected ShaderNodesBlock(int lineNumber, String line) {
|
|
|
super(lineNumber, line);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public ShaderNodesBlock(Statement sta) {
|
|
|
this(sta.getLineNumber(), sta.getLine());
|
|
|
for (Statement statement : sta.getContents()) {
|
|
@@ -30,57 +31,57 @@ public class ShaderNodesBlock extends UberStatement implements PropertyChangeLis
|
|
|
addStatement(b);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- public List<ShaderNodeBlock> getShaderNodes() {
|
|
|
+
|
|
|
+ public List<ShaderNodeBlock> getShaderNodes() {
|
|
|
return getBlocks(ShaderNodeBlock.class);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public void addShaderNode(ShaderNodeBlock shaderNodeBlock) {
|
|
|
- addStatement(shaderNodeBlock);
|
|
|
+ addStatement(shaderNodeBlock);
|
|
|
shaderNodeBlock.addPropertyChangeListener(WeakListeners.propertyChange(this, shaderNodeBlock));
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public boolean removeShaderNode(ShaderNodeBlock shaderNodeBlock) {
|
|
|
return contents.remove(shaderNodeBlock);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
@Override
|
|
|
public void propertyChange(PropertyChangeEvent evt) {
|
|
|
if (evt.getPropertyName().equals("order")) {
|
|
|
sort();
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public void sort() {
|
|
|
List<ShaderNodeBlock> list = getShaderNodes();
|
|
|
- Collections.sort(list, new NodeComparator());
|
|
|
+ Collections.sort(list, new NodeComparator());
|
|
|
contents.clear();
|
|
|
contents.addAll(list);
|
|
|
fire("reorder", null, null);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* Sorts nodes so that they are initialized after their input dependencies.
|
|
|
*/
|
|
|
- private class NodeComparator implements Comparator<ShaderNodeBlock>{
|
|
|
+ private class NodeComparator implements Comparator<ShaderNodeBlock> {
|
|
|
|
|
|
@Override
|
|
|
public int compare(ShaderNodeBlock o1, ShaderNodeBlock o2) {
|
|
|
- if(o1.name.equals(o2.name)){
|
|
|
+ if (o1.name.equals(o2.name)) {
|
|
|
return 0;
|
|
|
}
|
|
|
- for(String s : o1.inputNodes){
|
|
|
- if(s.contains(o2.name)){
|
|
|
+ for (String s : o1.inputNodes) {
|
|
|
+ if (s.contains(o2.name)) {
|
|
|
return 1;
|
|
|
}
|
|
|
}
|
|
|
- for(String s : o2.inputNodes){
|
|
|
- if(s.contains(o1.name)){
|
|
|
+ for (String s : o2.inputNodes) {
|
|
|
+ if (s.contains(o1.name)) {
|
|
|
return -1;
|
|
|
}
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
}
|