Skip to content

Commit

Permalink
Impl rectangular culling / switcher
Browse files Browse the repository at this point in the history
- update & test with cloth config 11.1.106
  • Loading branch information
Rivmun authored Jul 19, 2023
1 parent fd14f60 commit df4fdb9
Show file tree
Hide file tree
Showing 15 changed files with 182 additions and 118 deletions.
5 changes: 5 additions & 0 deletions common/src/main/java/com/rimo/sfcr/config/CommonConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.google.gson.JsonParseException;
import com.rimo.sfcr.SFCReMod;
import com.rimo.sfcr.util.CloudRefreshSpeed;
import com.rimo.sfcr.util.CullMode;
import dev.architectury.platform.Platform;

import java.io.BufferedReader;
Expand All @@ -20,6 +21,7 @@ public class CommonConfig extends CoreConfig {
private int secPerSync = 60;
private boolean enableFog = true;
private boolean enableNormalCull = true;
private CullMode cullMode = CullMode.RECTANGULAR;
private float cullRadianMultiplier = 1.0f;
private int rebuildInterval = 10;
private boolean enableSmoothChange = false;
Expand All @@ -45,6 +47,7 @@ public class CommonConfig extends CoreConfig {
public CloudRefreshSpeed getNormalRefreshSpeed() {return normalRefreshSpeed;}
public boolean isEnableTerrainDodge() {return enableTerrainDodge;}
public boolean isEnableNormalCull() {return enableNormalCull;}
public CullMode getCullMode() {return cullMode;}
public float getCullRadianMultiplier() {return cullRadianMultiplier;}
public int getRebuildInterval() {return rebuildInterval;}
public boolean isEnableFog() {return enableFog;}
Expand All @@ -64,6 +67,7 @@ public class CommonConfig extends CoreConfig {
public void setNormalRefreshSpeed(CloudRefreshSpeed speed) {normalRefreshSpeed = speed;}
public void setEnableTerrainDodge(boolean isEnable) {enableTerrainDodge = isEnable;}
public void setEnableNormalCull(boolean isEnable) {enableNormalCull = isEnable;}
public void setCullMode(CullMode cullMode) {this.cullMode = cullMode;}
public void setCullRadianMultiplier(float value) {cullRadianMultiplier = value;}
public void setRebuildInterval(int value) {rebuildInterval = value;}
public void setEnableFog(boolean isEnable) {enableFog = isEnable;}
Expand All @@ -90,6 +94,7 @@ public void setCommonConfig(CommonConfig config) { //TODO: Why do I need to wri
this.normalRefreshSpeed = config.normalRefreshSpeed;
this.enableTerrainDodge = config.enableTerrainDodge;
this.enableNormalCull = config.enableNormalCull;
this.cullMode = config.cullMode;
this.cullRadianMultiplier = config.cullRadianMultiplier;
this.rebuildInterval = config.rebuildInterval;
this.enableFog = config.enableFog;
Expand Down
95 changes: 44 additions & 51 deletions common/src/main/java/com/rimo/sfcr/config/ConfigScreen.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@

import com.rimo.sfcr.SFCReMod;
import com.rimo.sfcr.util.CloudRefreshSpeed;
import com.rimo.sfcr.util.CullMode;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigCategory;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
import me.shedaniel.clothconfig2.api.Requirement;
import me.shedaniel.clothconfig2.gui.entries.EnumListEntry;
import me.shedaniel.clothconfig2.impl.builders.DropdownMenuBuilder.TopCellElementBuilder;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
Expand Down Expand Up @@ -86,19 +89,27 @@ private void buildGeneralCategory() {
.setSaveConsumer(CONFIG::setEnableNormalCull)
.build()
);
//cull mode
EnumListEntry<CullMode> cullMode = entryBuilder
.startEnumSelector(Text.translatable("text.sfcr.option.cullMode")
, CullMode.class
, CONFIG.getCullMode())
.setDefaultValue(CullMode.RECTANGULAR)
.setEnumNameProvider(value -> ((CullMode) value).getName())
.setTooltip(Text.translatable("text.sfcr.option.cullMode.@Tooltip"))
.setSaveConsumer(CONFIG::setCullMode)
.build();
general.addEntry(cullMode);
//cull radian multiplier
general.addEntry(entryBuilder
.startIntSlider(Text.translatable("text.sfcr.option.cullRadianMultiplier")
,(int) (CONFIG.getCullRadianMultiplier() * 10)
,5
,16)
,15)
.setDefaultValue(10)
.setTextGetter(value -> {
if (value == 16)
return Text.translatable("text.sfcr.disabled");
return Text.of(value / 10f + "x");
})
.setTextGetter(value -> Text.of(value / 10f + "x"))
.setTooltip(Text.translatable("text.sfcr.option.cullRadianMultiplier.@Tooltip"))
.setRequirement(Requirement.isValue(cullMode, CullMode.CIRCULAR, CullMode.RECTANGULAR))
.setSaveConsumer(value -> CONFIG.setCullRadianMultiplier(value / 10f))
.build()
);
Expand All @@ -109,11 +120,10 @@ private void buildGeneralCategory() {
,0
,30)
.setDefaultValue(10)
.setTextGetter(value -> {
if (value == 0)
return Text.translatable("text.sfcr.disabled");
return Text.translatable("text.sfcr.frame", value);
})
.setTextGetter(value -> value == 0 ?
Text.translatable("text.sfcr.disabled") :
Text.translatable("text.sfcr.frame", value)
)
.setTooltip(Text.translatable("text.sfcr.option.rebuildInterval.@Tooltip"))
.setSaveConsumer(CONFIG::setRebuildInterval)
.build()
Expand Down Expand Up @@ -158,11 +168,10 @@ private void buildCloudsCategory() {
,-1
,384)
.setDefaultValue(192)
.setTextGetter(value -> {
if (value < 0)
return Text.translatable("text.sfcr.option.cloudHeight.followVanilla");
return Text.of(value.toString());
})
.setTextGetter(value -> value < 0 ?
Text.translatable("text.sfcr.option.cloudHeight.followVanilla") :
Text.of(value.toString())
)
.setTooltip(Text.translatable("text.sfcr.option.cloudHeight.@Tooltip"))
.setSaveConsumer(CONFIG::setCloudHeight)
.build()
Expand All @@ -185,7 +194,7 @@ private void buildCloudsCategory() {
,3
,66)
.setDefaultValue(32)
.setTextGetter(value -> {return Text.of(String.valueOf(value - 2));})
.setTextGetter(value -> Text.of(String.valueOf(value - 2)))
.setTooltip(Text.translatable("text.sfcr.option.cloudLayerThickness.@Tooltip"))
.setSaveConsumer(CONFIG::setCloudLayerThickness)
.build()
Expand All @@ -197,7 +206,7 @@ private void buildCloudsCategory() {
,32
,192)
.setDefaultValue(48)
.setTextGetter(value -> {return Text.of(value.toString());})
.setTextGetter(value -> Text.of(value.toString()))
.setTooltip(Text.translatable("text.sfcr.option.cloudRenderDistance.@Tooltip"))
.setSaveConsumer(value -> CONFIG.setCloudRenderDistance(value * 2))
.build()
Expand All @@ -218,7 +227,7 @@ private void buildCloudsCategory() {
,1
,3)
.setDefaultValue(2)
.setTextGetter(value -> {return Text.of(value.toString());})
.setTextGetter(value -> Text.of(value.toString()))
.setTooltip(Text.translatable("text.sfcr.option.sampleSteps.@Tooltip"))
.setSaveConsumer(CONFIG::setSampleSteps)
.build()
Expand Down Expand Up @@ -247,7 +256,7 @@ private void buildCloudsCategory() {
, 0
, 10)
.setDefaultValue(1)
.setTextGetter(value -> {return Text.of(value * 10 + "%");})
.setTextGetter(value -> Text.of(value * 10 + "%"))
.setSaveConsumer(value -> CONFIG.setCloudBrightMultiplier(value / 10f))
.build()
);
Expand All @@ -270,7 +279,7 @@ private void buildFogCategory() {
,1
,32)
.setDefaultValue(2)
.setTextGetter(value -> {return Text.of(value.toString());})
.setTextGetter(value -> Text.of(value.toString()))
.setTooltip(Text.translatable("text.sfcr.option.fogMinDistance.@Tooltip"))
.setSaveConsumer(newValue -> fogMin = newValue)
.build()
Expand All @@ -282,7 +291,7 @@ private void buildFogCategory() {
,1
,32)
.setDefaultValue(4)
.setTextGetter(value -> {return Text.of(value.toString());})
.setTextGetter(value -> Text.of(value.toString()))
.setTooltip(Text.translatable("text.sfcr.option.fogMaxDistance.@Tooltip"))
.setSaveConsumer(newValue -> fogMax = newValue)
.build()
Expand Down Expand Up @@ -324,7 +333,7 @@ private void buildDensityCategory() {
,0
,100)
.setDefaultValue(25)
.setTextGetter(value -> {return Text.of(value + "%");})
.setTextGetter(value -> Text.of(value + "%"))
.setSaveConsumer(CONFIG::setCloudDensityPercent)
.build()
);
Expand All @@ -335,7 +344,7 @@ private void buildDensityCategory() {
,0
,100)
.setDefaultValue(60)
.setTextGetter(value -> {return Text.of(value + "%");})
.setTextGetter(value -> Text.of(value + "%"))
.setSaveConsumer(CONFIG::setRainDensityPercent)
.build()
);
Expand All @@ -346,7 +355,7 @@ private void buildDensityCategory() {
,0
,100)
.setDefaultValue(90)
.setTextGetter(value -> {return Text.of(value + "%");})
.setTextGetter(value -> Text.of(value + "%"))
.setSaveConsumer(CONFIG::setThunderDensityPercent)
.build()
);
Expand All @@ -357,11 +366,10 @@ private void buildDensityCategory() {
,0
,30)
.setDefaultValue(10)
.setTextGetter(value -> {
if (value == 0)
return Text.translatable("text.sfcr.disabled");
return Text.translatable("text.sfcr.second", value);
})
.setTextGetter(value -> value == 0 ?
Text.translatable("text.sfcr.disabled") :
Text.translatable("text.sfcr.second", value)
)
.setTooltip(Text.translatable("text.sfcr.option.weatherPreDetectTime.@Tooltip"))
.setSaveConsumer(CONFIG::setWeatherPreDetectTime)
.build()
Expand All @@ -372,7 +380,7 @@ private void buildDensityCategory() {
,CloudRefreshSpeed.class
, CONFIG.getNormalRefreshSpeed())
.setDefaultValue(CloudRefreshSpeed.SLOW)
.setEnumNameProvider((value) -> getNameFromSpeedEnum((CloudRefreshSpeed) value))
.setEnumNameProvider(value -> ((CloudRefreshSpeed) value).getName())
.setTooltip(Text.translatable("text.sfcr.option.cloudRefreshSpeed.@Tooltip"))
.setSaveConsumer(CONFIG::setNormalRefreshSpeed)
.build()
Expand All @@ -383,7 +391,7 @@ private void buildDensityCategory() {
,CloudRefreshSpeed.class
, CONFIG.getWeatherRefreshSpeed())
.setDefaultValue(CloudRefreshSpeed.FAST)
.setEnumNameProvider((value) -> getNameFromSpeedEnum((CloudRefreshSpeed) value))
.setEnumNameProvider(value -> ((CloudRefreshSpeed) value).getName())
.setTooltip(Text.translatable("text.sfcr.option.weatherRefreshSpeed.@Tooltip"))
.setSaveConsumer(CONFIG::setWeatherRefreshSpeed)
.build()
Expand All @@ -394,7 +402,7 @@ private void buildDensityCategory() {
,CloudRefreshSpeed.class
, CONFIG.getDensityChangingSpeed())
.setDefaultValue(CloudRefreshSpeed.SLOW)
.setEnumNameProvider((value) -> getNameFromSpeedEnum((CloudRefreshSpeed) value))
.setEnumNameProvider(value -> ((CloudRefreshSpeed) value).getName())
.setTooltip(Text.translatable("text.sfcr.option.densityChangingSpeed.@Tooltip"))
.setSaveConsumer(CONFIG::setDensityChangingSpeed)
.build()
Expand All @@ -420,7 +428,7 @@ private void buildDensityCategory() {
,0
,100)
.setDefaultValue(60)
.setTextGetter(value -> {return Text.of(value + "%");})
.setTextGetter(value -> Text.of(value + "%"))
.setSaveConsumer(CONFIG::setSnowDensity)
.build()
);
Expand All @@ -431,7 +439,7 @@ private void buildDensityCategory() {
,0
,100)
.setDefaultValue(90)
.setTextGetter(value -> {return Text.of(value + "%");})
.setTextGetter(value -> Text.of(value + "%"))
.setSaveConsumer(CONFIG::setRainDensity)
.build()
);
Expand All @@ -442,7 +450,7 @@ private void buildDensityCategory() {
,0
,100)
.setDefaultValue(0)
.setTextGetter(value -> {return Text.of(value + "%");})
.setTextGetter(value -> Text.of(value + "%"))
.setSaveConsumer(CONFIG::setNoneDensity)
.build()
);
Expand Down Expand Up @@ -475,19 +483,4 @@ private void buildDensityCategory() {
);
}

private Text getNameFromSpeedEnum(CloudRefreshSpeed value) {
if (value.equals(CloudRefreshSpeed.VERY_FAST)) {
return Text.translatable("text.sfcr.option.cloudRefreshSpeed.VERY_FAST");
} else if (value.equals(CloudRefreshSpeed.FAST)){
return Text.translatable("text.sfcr.option.cloudRefreshSpeed.FAST");
} else if (value.equals(CloudRefreshSpeed.NORMAL)) {
return Text.translatable("text.sfcr.option.cloudRefreshSpeed.NORMAL");
} else if (value.equals(CloudRefreshSpeed.SLOW)) {
return Text.translatable("text.sfcr.option.cloudRefreshSpeed.SLOW");
} else if (value.equals(CloudRefreshSpeed.VERY_SLOW)) {
return Text.translatable("text.sfcr.option.cloudRefreshSpeed.VERY_SLOW");
} else {
return Text.of("");
}
}
}
16 changes: 0 additions & 16 deletions common/src/main/java/com/rimo/sfcr/config/CoreConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -100,22 +100,6 @@ public void setCoreConfig(CoreConfig config) { //TODO: why do I need to write t
this.biomeFilterList = config.biomeFilterList;
}

public int getNumFromSpeedEnum(CloudRefreshSpeed value) {
if (value.equals(CloudRefreshSpeed.VERY_FAST)) {
return 5;
} else if (value.equals(CloudRefreshSpeed.FAST)){
return 10;
} else if (value.equals(CloudRefreshSpeed.NORMAL)) {
return 20;
} else if (value.equals(CloudRefreshSpeed.SLOW)) {
return 30;
} else if (value.equals(CloudRefreshSpeed.VERY_SLOW)) {
return 40;
} else {
return 20;
}
}

public boolean isFilterListHasBiome(RegistryEntry<Biome> biome) {
var isHas = false;
if (this.getBiomeFilterList().contains(biome.getKey().get().getValue().toString())) {
Expand Down
2 changes: 1 addition & 1 deletion common/src/main/java/com/rimo/sfcr/core/CloudData.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public CloudData(double scrollX, double scrollZ, float densityByWeather, float d
// Overload
public CloudData(CloudData prevData, CloudData nextData, CloudDataType type) {
dataType = type;
lifeTime = CONFIG.getNumFromSpeedEnum(CONFIG.getNormalRefreshSpeed()) / 5f;
lifeTime = CONFIG.getNormalRefreshSpeed().getValue() / 5f;
}

public static void initSampler(long seed) {
Expand Down
Loading

0 comments on commit df4fdb9

Please sign in to comment.