67 lines
2.1 KiB
Java
67 lines
2.1 KiB
Java
|
package zero1hd.polyjet;
|
||
|
|
||
|
import com.badlogic.gdx.Gdx;
|
||
|
import com.badlogic.gdx.assets.loaders.FileHandleResolver;
|
||
|
import com.badlogic.gdx.assets.loaders.resolvers.ResolutionFileResolver.Resolution;
|
||
|
import com.badlogic.gdx.files.FileHandle;
|
||
|
import com.badlogic.gdx.math.MathUtils;
|
||
|
|
||
|
public class RoundingResolutionHandler implements FileHandleResolver {
|
||
|
private final Resolution[] descriptors;
|
||
|
private final FileHandleResolver resolver;
|
||
|
|
||
|
public RoundingResolutionHandler(FileHandleResolver fileResolver, Resolution... descriptors) {
|
||
|
if (descriptors.length == 0) throw new IllegalArgumentException("At least one Resolution needs to be supplied.");
|
||
|
this.descriptors = descriptors;
|
||
|
this.resolver = fileResolver;
|
||
|
}
|
||
|
|
||
|
|
||
|
public Resolution chooseRounded(Resolution... descriptors) {
|
||
|
Resolution best = descriptors[0];
|
||
|
|
||
|
int leastDifference = -1;
|
||
|
|
||
|
int w = MathUtils.round(Gdx.graphics.getWidth()*Gdx.graphics.getDensity()), h = MathUtils.round(Gdx.graphics.getHeight()*Gdx.graphics.getDensity());
|
||
|
|
||
|
if (w < h) {
|
||
|
for (int i = 0; i < descriptors.length; i++) {
|
||
|
int currentDiff = h - descriptors[i].portraitHeight;
|
||
|
|
||
|
if (currentDiff < 0) {
|
||
|
currentDiff = currentDiff*-1;
|
||
|
}
|
||
|
|
||
|
if (currentDiff < leastDifference || leastDifference == -1) {
|
||
|
best = descriptors[i];
|
||
|
leastDifference = currentDiff;
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
for (int i = 0; i < descriptors.length; i++) {
|
||
|
int currentDiff = w - descriptors[i].portraitWidth;
|
||
|
|
||
|
if (currentDiff < 0) {
|
||
|
currentDiff = currentDiff*-1;
|
||
|
}
|
||
|
|
||
|
if (currentDiff < leastDifference || leastDifference == -1) {
|
||
|
best = descriptors[i];
|
||
|
leastDifference = currentDiff;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return best;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public FileHandle resolve(String fileName) {
|
||
|
Resolution bestRes = chooseRounded(descriptors);
|
||
|
FileHandle initialHandle = new FileHandle(fileName);
|
||
|
|
||
|
FileHandle resSpecificFile = resolver.resolve(bestRes.folder + "/" + initialHandle.name());
|
||
|
if (!resSpecificFile.exists()) resSpecificFile = resolver.resolve(fileName);
|
||
|
return resSpecificFile;
|
||
|
}
|
||
|
}
|