package com.kreative.paint.material;
import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedHashMap;
import com.kreative.paint.material.gradient.GradientColorMap;
import com.kreative.paint.material.gradient.GradientList;
import com.kreative.paint.material.gradient.GradientParser;
import com.kreative.paint.material.gradient.GradientPreset;
import com.kreative.paint.material.gradient.GradientShape;
public class GradientLoader {
private final MaterialLoader loader;
private final LinkedHashMap<String,GradientPreset> presets;
private final LinkedHashMap<String,GradientShape> shapes;
private final LinkedHashMap<String,GradientColorMap> colorMaps;
public GradientLoader(MaterialLoader loader) {
this.loader = loader;
this.presets = new LinkedHashMap<String,GradientPreset>();
this.shapes = new LinkedHashMap<String,GradientShape>();
this.colorMaps = new LinkedHashMap<String,GradientColorMap>();
}
public LinkedHashMap<String,GradientPreset> getGradientPresets() {
if (isEmpty()) loadResources();
if (presets.isEmpty()) createPresets();
return presets;
}
public LinkedHashMap<String,GradientShape> getGradientShapes() {
if (isEmpty()) loadResources();
if (shapes.isEmpty()) createShapes();
return shapes;
}
public LinkedHashMap<String,GradientColorMap> getGradientColorMaps() {
if (isEmpty()) loadResources();
if (colorMaps.isEmpty()) createColorMaps();
return colorMaps;
}
private boolean isEmpty() {
return presets.isEmpty()
&& shapes.isEmpty()
&& colorMaps.isEmpty();
}
private void loadResources() {
for (MaterialResource r : loader.listResources()) {
if (r.isFormat("grdx", false)) {
try {
InputStream in = r.getInputStream();
GradientList list = GradientParser.parse(r.getResourceName(), in);
in.close();
for (GradientPreset preset : list.presets) presets.put(preset.name, preset);
for (GradientShape shape : list.shapes) shapes.put(shape.name, shape);
for (GradientColorMap map : list.colorMaps) colorMaps.put(map.name, map);
} catch (IOException e) {
System.err.println("Warning: Failed to compile gradient set " + r.getResourceName() + ".");
e.printStackTrace();
}
}
}
}
private void createPresets() {
System.err.println("Notice: No gradient presets found. Generating generic gradient presets.");
presets.put(GradientPreset.BLACK_TO_WHITE.name, GradientPreset.BLACK_TO_WHITE);
presets.put(GradientPreset.WHITE_TO_BLACK.name, GradientPreset.WHITE_TO_BLACK);
presets.put(GradientPreset.RGB_SPECTRUM.name, GradientPreset.RGB_SPECTRUM);
presets.put(GradientPreset.RGB_WHEEL.name, GradientPreset.RGB_WHEEL);
}
private void createShapes() {
System.err.println("Notice: No gradient shapes found. Generating generic gradient shapes.");
shapes.put(GradientShape.SIMPLE_LINEAR.name, GradientShape.SIMPLE_LINEAR);
shapes.put(GradientShape.REVERSE_LINEAR.name, GradientShape.REVERSE_LINEAR);
shapes.put(GradientShape.SIMPLE_ANGULAR.name, GradientShape.SIMPLE_ANGULAR);
shapes.put(GradientShape.REVERSE_ANGULAR.name, GradientShape.REVERSE_ANGULAR);
}
private void createColorMaps() {
System.err.println("Notice: No gradient color maps found. Generating generic gradient color maps.");
colorMaps.put(GradientColorMap.BLACK_TO_WHITE.name, GradientColorMap.BLACK_TO_WHITE);
colorMaps.put(GradientColorMap.WHITE_TO_BLACK.name, GradientColorMap.WHITE_TO_BLACK);
colorMaps.put(GradientColorMap.RGB_SPECTRUM.name, GradientColorMap.RGB_SPECTRUM);
}
}