package clientdata.visitors.terrain.layers;
import org.apache.mina.core.buffer.IoBuffer;
import clientdata.visitors.TerrainVisitor;
public class FilterSlope extends FilterLayer {
public static float default_value = 1.5707964f;
float min_angle;
float min;
float max_angle;
float max;
void setMaxAngle(float new_angle) {
if (new_angle >= 0) {
if (new_angle <= default_value) {
max_angle = new_angle;
min = (float) Math.sin(default_value - new_angle);
} else {
max_angle = default_value;
min = 0;
}
} else {
max_angle = 0;
min = (float) Math.sin(default_value);
}
}
void setMinAngle(float new_angle) {
if (new_angle >= 0) {
if (new_angle <= default_value) {
min_angle = new_angle;
max = (float) Math.sin(default_value - new_angle);
} else {
min_angle = default_value;
max = 0;
}
} else {
min_angle = 0;
max = (float) Math.sin(default_value);
}
}
@Override
public float process(float x, float y, float transform_value, float base_value, TerrainVisitor ti, FilterRectangle rectangle) {
float result;
if (base_value > min && base_value < max) {
float feather_result = (float) (max - min * feather_amount * 0.5);
if (min + feather_result <= base_value) {
if (max - feather_result >= base_value) {
result = 1.0f;
} else {
result = (max - base_value) / feather_result;
}
} else
result = (base_value - min) / feather_result;
} else
result = 0;
return result;
}
@Override
public void loadData(IoBuffer buffer) throws Exception {
min_angle = buffer.getFloat();
setMinAngle((float) (Math.PI * min_angle * 0.005555555690079927));
max_angle = buffer.getFloat();
setMaxAngle((float) (Math.PI * max_angle * 0.005555555690079927));
feather_type = buffer.getInt();
feather_amount = buffer.getFloat();
if (feather_amount > 1)
feather_amount = 1;
else if (feather_amount < 0)
feather_amount = 0;
}
@Override
public float process(float x, float y, float transform_value,
float base_value, TerrainVisitor ti) {
// TODO Auto-generated method stub
return 0;
}
}