+ Added config options "dist100" and "dist0" to allow finer control over automatic sound/distance thingy

This commit is contained in:
Nicolas BARBOTIN 2018-08-27 21:50:07 +02:00
parent 0f00d9112b
commit 4e194e4856
2 changed files with 30 additions and 8 deletions

View File

@ -117,12 +117,16 @@ public class WebDisplays {
public long miniservQuota; public long miniservQuota;
public boolean enableSoundDistance; public boolean enableSoundDistance;
public float ytVolume; public float ytVolume;
public float avDist100;
public float avDist0;
@Mod.EventHandler @Mod.EventHandler
public void onPreInit(FMLPreInitializationEvent ev) { public void onPreInit(FMLPreInitializationEvent ev) {
//Load config //Load config
Configuration cfg = new Configuration(ev.getSuggestedConfigurationFile()); Configuration cfg = new Configuration(ev.getSuggestedConfigurationFile());
cfg.load(); cfg.load();
//CAT: Main
Property blacklist = cfg.get("main", "blacklist", new String[0]); Property blacklist = cfg.get("main", "blacklist", new String[0]);
Property padHeight = cfg.get("main", "padHeight", 480); Property padHeight = cfg.get("main", "padHeight", 480);
Property hardRecipe = cfg.get("main", "hardRecipes", true); Property hardRecipe = cfg.get("main", "hardRecipes", true);
@ -134,11 +138,19 @@ public class WebDisplays {
Property miniservQuota = cfg.get("main", "miniservQuota", 1024); //It's stored as a string anyway Property miniservQuota = cfg.get("main", "miniservQuota", 1024); //It's stored as a string anyway
Property maxScreenX = cfg.get("main", "maxScreenSizeX", 16); Property maxScreenX = cfg.get("main", "maxScreenSizeX", 16);
Property maxScreenY = cfg.get("main", "maxScreenSizeY", 16); Property maxScreenY = cfg.get("main", "maxScreenSizeY", 16);
//CAT: Client options
Property loadDistance = cfg.get("client", "loadDistance", 30.0); Property loadDistance = cfg.get("client", "loadDistance", 30.0);
Property unloadDistance = cfg.get("client", "unloadDistance", 32.0); Property unloadDistance = cfg.get("client", "unloadDistance", 32.0);
Property enableSndDist = cfg.get("client", "enableSoundDistance", true);
Property ytVolume = cfg.get("client", "ytVolume", 100.0);
//CAT: Auto volume config (client-side)
Property enableAutoVol = cfg.get("clientAutoVolume", "enableAutoVolume", true);
Property ytVolume = cfg.get("clientAutoVolume", "ytVolume", 100.0);
Property dist100 = cfg.get("clientAutoVolume", "dist100", 10.0);
Property dist0 = cfg.get("clientAutoVolume", "dist0", 30.0);
//Comments & shit
blacklist.setComment("An array of domain names you don't want to load."); blacklist.setComment("An array of domain names you don't want to load.");
padHeight.setComment("The minePad Y resolution in pixels. padWidth = padHeight * " + PAD_RATIO); padHeight.setComment("The minePad Y resolution in pixels. padWidth = padHeight * " + PAD_RATIO);
hardRecipe.setComment("If true, breaking the minePad is required to craft upgrades."); hardRecipe.setComment("If true, breaking the minePad is required to craft upgrades.");
@ -153,14 +165,21 @@ public class WebDisplays {
miniservQuota.setComment("The amount of data that can be uploaded to miniserv, in KiB (so 1024 = 1 MiO)"); miniservQuota.setComment("The amount of data that can be uploaded to miniserv, in KiB (so 1024 = 1 MiO)");
maxScreenX.setComment("Maximum screen width, in blocks. Resolution will be clamped by maxResolutionX."); maxScreenX.setComment("Maximum screen width, in blocks. Resolution will be clamped by maxResolutionX.");
maxScreenY.setComment("Maximum screen height, in blocks. Resolution will be clamped by maxResolutionY."); maxScreenY.setComment("Maximum screen height, in blocks. Resolution will be clamped by maxResolutionY.");
enableSndDist.setComment("If true, the volume of YouTube videos will change depending on how far you are"); enableAutoVol.setComment("If true, the volume of YouTube videos will change depending on how far you are");
ytVolume.setComment("Volume for YouTube videos. This will have no effect if enableSoundDistance is set to false"); ytVolume.setComment("Volume for YouTube videos. This will have no effect if enableSoundDistance is set to false");
ytVolume.setMinValue(0.0); ytVolume.setMinValue(0.0);
ytVolume.setMaxValue(100.0); ytVolume.setMaxValue(100.0);
dist100.setComment("Distance after which the sound starts dropping (in blocks)");
dist100.setMinValue(0.0);
dist0.setComment("Distance after which you can't hear anything (in blocks)");
dist0.setMinValue(0.0);
if(unloadDistance.getDouble() < loadDistance.getDouble() + 2.0) if(unloadDistance.getDouble() < loadDistance.getDouble() + 2.0)
unloadDistance.set(loadDistance.getDouble() + 2.0); unloadDistance.set(loadDistance.getDouble() + 2.0);
if(dist0.getDouble() < dist100.getDouble() + 0.1)
dist0.set(dist100.getDouble() + 0.1);
cfg.save(); cfg.save();
this.blacklist = blacklist.getStringList(); this.blacklist = blacklist.getStringList();
@ -175,8 +194,10 @@ public class WebDisplays {
this.miniservQuota = miniservQuota.getLong() * 1024L; this.miniservQuota = miniservQuota.getLong() * 1024L;
this.maxScreenX = maxScreenX.getInt(); this.maxScreenX = maxScreenX.getInt();
this.maxScreenY = maxScreenY.getInt(); this.maxScreenY = maxScreenY.getInt();
enableSoundDistance = enableSndDist.getBoolean(); enableSoundDistance = enableAutoVol.getBoolean();
this.ytVolume = (float) ytVolume.getDouble(); this.ytVolume = (float) ytVolume.getDouble();
avDist100 = (float) dist100.getDouble();
avDist0 = (float) dist0.getDouble();
CREATIVE_TAB = new WDCreativeTab(); CREATIVE_TAB = new WDCreativeTab();

View File

@ -644,6 +644,7 @@ public class TileEntityScreen extends TileEntity {
//FIXME: Not called if enableSoundDistance is false //FIXME: Not called if enableSoundDistance is false
public void updateTrackDistance(double d, float masterVolume) { public void updateTrackDistance(double d, float masterVolume) {
final WebDisplays wd = WebDisplays.INSTANCE;
boolean needsComputation = true; boolean needsComputation = true;
int intPart = 0; //Need to initialize those because the compiler is stupid int intPart = 0; //Need to initialize those because the compiler is stupid
int fracPart = 0; int fracPart = 0;
@ -654,12 +655,12 @@ public class TileEntityScreen extends TileEntity {
float dist = (float) Math.sqrt(d); float dist = (float) Math.sqrt(d);
float vol; float vol;
if(dist <= 10.0f) if(dist <= wd.avDist100)
vol = masterVolume * WebDisplays.INSTANCE.ytVolume; vol = masterVolume * wd.ytVolume;
else if(dist >= 30.0f) else if(dist >= wd.avDist0)
vol = 0.0f; vol = 0.0f;
else else
vol = (1.0f - (dist - 10.0f) / 20.0f) * masterVolume * WebDisplays.INSTANCE.ytVolume; vol = (1.0f - (dist - wd.avDist100) / (wd.avDist0 - wd.avDist100)) * masterVolume * wd.ytVolume;
if(Math.abs(ytVolume - vol) < 0.5f) if(Math.abs(ytVolume - vol) < 0.5f)
return; //Delta is too small return; //Delta is too small