Einige Bug Fixes (Camera, Thumbnails), Terrain
This commit is contained in:
@@ -21,10 +21,6 @@ import java.nio.ByteBuffer;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* Regen-Partikel, Nass-Effekt, Gewitter-Blitz und Donner-Audio.
|
||||
@@ -69,8 +65,8 @@ public class RainState extends BaseAppState {
|
||||
private float thunderTimer = 0f;
|
||||
private int thunderIdx = 0;
|
||||
|
||||
// ── Persistenz ────────────────────────────────────────────────────────────
|
||||
private float saveTimer = 60f;
|
||||
// ── Spielstand ────────────────────────────────────────────────────────────
|
||||
private de.blight.common.SaveGame save;
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────
|
||||
|
||||
@@ -156,8 +152,12 @@ public class RainState extends BaseAppState {
|
||||
root.attachChild(thunderAudio[i]);
|
||||
}
|
||||
|
||||
loadWetness();
|
||||
log.info("[Rain] initialisiert.");
|
||||
SaveGameState sgs = app.getStateManager().getState(SaveGameState.class);
|
||||
if (sgs != null) {
|
||||
save = sgs.getSave();
|
||||
wetness = save.world.wetness;
|
||||
}
|
||||
log.info("[Rain] initialisiert (wetness={})", wetness);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -170,9 +170,6 @@ public class RainState extends BaseAppState {
|
||||
WeatherState.Weather weather = ws.getActiveWeather();
|
||||
boolean stormy = weather == WeatherState.Weather.THUNDERSTORM;
|
||||
|
||||
saveTimer -= tpf;
|
||||
if (saveTimer <= 0f) { saveTimer = 60f; saveWetness(); }
|
||||
|
||||
// ── Wetness ───────────────────────────────────────────────────────────
|
||||
float wetnessTarget = intensity > 0.01f ? FastMath.clamp(intensity + 0.25f, 0f, 1f) : 0f;
|
||||
if (wetness < wetnessTarget) {
|
||||
@@ -180,6 +177,7 @@ public class RainState extends BaseAppState {
|
||||
} else {
|
||||
wetness = Math.max(wetnessTarget, wetness - WET_RATE_DOWN * tpf);
|
||||
}
|
||||
if (save != null) save.world.wetness = wetness;
|
||||
|
||||
// ── Partikel ──────────────────────────────────────────────────────────
|
||||
Vector3f cam = getApplication().getCamera().getLocation();
|
||||
@@ -277,7 +275,7 @@ public class RainState extends BaseAppState {
|
||||
|
||||
@Override
|
||||
protected void cleanup(Application app) {
|
||||
saveWetness();
|
||||
if (save != null) save.world.wetness = wetness;
|
||||
Node root = ((SimpleApplication) app).getRootNode();
|
||||
if (lightningLight != null) root.removeLight(lightningLight);
|
||||
if (rainNode != null) root.detachChild(rainNode);
|
||||
@@ -287,36 +285,6 @@ public class RainState extends BaseAppState {
|
||||
for (AudioNode tn : thunderAudio) { if (tn != null) root.detachChild(tn); }
|
||||
}
|
||||
|
||||
// ── Persistenz ────────────────────────────────────────────────────────────
|
||||
|
||||
private static File wetFile() {
|
||||
File dir = new File(System.getProperty("user.home"), ".blight");
|
||||
dir.mkdirs();
|
||||
return new File(dir, "rain.properties");
|
||||
}
|
||||
|
||||
private void saveWetness() {
|
||||
Properties p = new Properties();
|
||||
p.setProperty("wetness", String.valueOf(wetness));
|
||||
try (FileWriter fw = new FileWriter(wetFile())) {
|
||||
p.store(fw, null);
|
||||
} catch (Exception e) {
|
||||
log.warn("[Rain] Speichern fehlgeschlagen: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private void loadWetness() {
|
||||
File f = wetFile();
|
||||
if (!f.exists()) return;
|
||||
Properties p = new Properties();
|
||||
try (FileReader fr = new FileReader(f)) {
|
||||
p.load(fr);
|
||||
wetness = Float.parseFloat(p.getProperty("wetness", "0"));
|
||||
} catch (Exception e) {
|
||||
log.warn("[Rain] Laden fehlgeschlagen: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// ── Helpers ───────────────────────────────────────────────────────────────
|
||||
|
||||
private static Texture2D createRainTexture() {
|
||||
|
||||
@@ -13,10 +13,7 @@ import jme3utilities.sky.SkyControl;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.util.Properties;
|
||||
import de.blight.common.SaveGame;
|
||||
|
||||
public class WeatherState extends BaseAppState {
|
||||
|
||||
@@ -204,7 +201,8 @@ public class WeatherState extends BaseAppState {
|
||||
|
||||
private Weather active = Weather.SUNNY;
|
||||
private float changeTimer = 180f;
|
||||
private float saveTimer = 60f;
|
||||
|
||||
private SaveGame save;
|
||||
|
||||
private float fogDensity = FOG_DENSITY[0];
|
||||
private float fogDistance = FOG_DISTANCE[0];
|
||||
@@ -279,12 +277,16 @@ public class WeatherState extends BaseAppState {
|
||||
|
||||
@Override
|
||||
protected void initialize(Application app) {
|
||||
load();
|
||||
SaveGameState sgs = app.getStateManager().getState(SaveGameState.class);
|
||||
if (sgs != null) {
|
||||
save = sgs.getSave();
|
||||
restoreFrom(save.world.weather);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void cleanup(Application app) {
|
||||
save();
|
||||
writeTo(save);
|
||||
}
|
||||
|
||||
@Override protected void onEnable() {}
|
||||
@@ -297,11 +299,7 @@ public class WeatherState extends BaseAppState {
|
||||
pickNextWeather();
|
||||
}
|
||||
|
||||
saveTimer -= tpf;
|
||||
if (saveTimer <= 0f) {
|
||||
saveTimer = 60f;
|
||||
save();
|
||||
}
|
||||
if (save != null) writeTo(save);
|
||||
|
||||
int i = active.ordinal();
|
||||
|
||||
@@ -382,86 +380,53 @@ public class WeatherState extends BaseAppState {
|
||||
|
||||
// ── Persistenz ────────────────────────────────────────────────────────────
|
||||
|
||||
private static File saveFile() {
|
||||
File dir = new File(System.getProperty("user.home"), ".blight");
|
||||
dir.mkdirs();
|
||||
return new File(dir, "weather.properties");
|
||||
private void writeTo(SaveGame sg) {
|
||||
if (sg == null) return;
|
||||
SaveGame.WeatherSave ws = sg.world.weather;
|
||||
ws.weather = active.name();
|
||||
ws.changeTimer = changeTimer;
|
||||
ws.windAngle = windAngle;
|
||||
ws.windAngleTgt = windAngleTgt;
|
||||
ws.fogDensity = fogDensity;
|
||||
ws.fogDistance = fogDistance;
|
||||
ws.windSpeed = windSpeed;
|
||||
ws.waveSpeed = waveSpeed;
|
||||
ws.waveAmp = waveAmp;
|
||||
ws.waveScale = waveScale;
|
||||
ws.waterTrans = waterTrans;
|
||||
ws.foamIntensity = foamIntensity;
|
||||
ws.cloudOpacity = cloudOpacity;
|
||||
ws.fogColorR = fogColor.r;
|
||||
ws.fogColorG = fogColor.g;
|
||||
ws.fogColorB = fogColor.b;
|
||||
ws.waterColorR = waterColor.r;
|
||||
ws.waterColorG = waterColor.g;
|
||||
ws.waterColorB = waterColor.b;
|
||||
ws.deepWaterR = deepWaterColor.r;
|
||||
ws.deepWaterG = deepWaterColor.g;
|
||||
ws.deepWaterB = deepWaterColor.b;
|
||||
if (dayTime != null) ws.timeOfDay = dayTime.getTimeOfDay();
|
||||
}
|
||||
|
||||
public void save() {
|
||||
Properties p = new Properties();
|
||||
p.setProperty("weather", active.name());
|
||||
if (dayTime != null) p.setProperty("timeOfDay", String.valueOf(dayTime.getTimeOfDay()));
|
||||
p.setProperty("changeTimer", String.valueOf(changeTimer));
|
||||
p.setProperty("windAngle", String.valueOf(windAngle));
|
||||
p.setProperty("windAngleTgt", String.valueOf(windAngleTgt));
|
||||
p.setProperty("fogDensity", String.valueOf(fogDensity));
|
||||
p.setProperty("fogDistance", String.valueOf(fogDistance));
|
||||
p.setProperty("windSpeed", String.valueOf(windSpeed));
|
||||
p.setProperty("waveSpeed", String.valueOf(waveSpeed));
|
||||
p.setProperty("waveAmp", String.valueOf(waveAmp));
|
||||
p.setProperty("waveScale", String.valueOf(waveScale));
|
||||
p.setProperty("waterTrans", String.valueOf(waterTrans));
|
||||
p.setProperty("foamIntensity", String.valueOf(foamIntensity));
|
||||
p.setProperty("cloudOpacity", String.valueOf(cloudOpacity));
|
||||
p.setProperty("fogColorR", String.valueOf(fogColor.r));
|
||||
p.setProperty("fogColorG", String.valueOf(fogColor.g));
|
||||
p.setProperty("fogColorB", String.valueOf(fogColor.b));
|
||||
p.setProperty("waterColorR", String.valueOf(waterColor.r));
|
||||
p.setProperty("waterColorG", String.valueOf(waterColor.g));
|
||||
p.setProperty("waterColorB", String.valueOf(waterColor.b));
|
||||
p.setProperty("deepWaterR", String.valueOf(deepWaterColor.r));
|
||||
p.setProperty("deepWaterG", String.valueOf(deepWaterColor.g));
|
||||
p.setProperty("deepWaterB", String.valueOf(deepWaterColor.b));
|
||||
try (FileWriter fw = new FileWriter(saveFile())) {
|
||||
p.store(fw, "Blight weather state");
|
||||
} catch (Exception e) {
|
||||
log.warn("[Weather] Speichern fehlgeschlagen: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private void load() {
|
||||
File f = saveFile();
|
||||
if (!f.exists()) return;
|
||||
Properties p = new Properties();
|
||||
try (FileReader fr = new FileReader(f)) {
|
||||
p.load(fr);
|
||||
active = Weather.valueOf(p.getProperty("weather", "SUNNY"));
|
||||
changeTimer = Float.parseFloat(p.getProperty("changeTimer", "180"));
|
||||
windAngle = Float.parseFloat(p.getProperty("windAngle", "0"));
|
||||
windAngleTgt = Float.parseFloat(p.getProperty("windAngleTgt", "0.4"));
|
||||
fogDensity = Float.parseFloat(p.getProperty("fogDensity", String.valueOf(FOG_DENSITY[0])));
|
||||
fogDistance = Float.parseFloat(p.getProperty("fogDistance", String.valueOf(FOG_DISTANCE[0])));
|
||||
windSpeed = Float.parseFloat(p.getProperty("windSpeed", String.valueOf(WIND_SPEED[0])));
|
||||
waveSpeed = Float.parseFloat(p.getProperty("waveSpeed", String.valueOf(WAVE_SPEED[0])));
|
||||
waveAmp = Float.parseFloat(p.getProperty("waveAmp", String.valueOf(WAVE_AMP[0])));
|
||||
waveScale = Float.parseFloat(p.getProperty("waveScale", String.valueOf(WAVE_SCALE[0])));
|
||||
waterTrans = Float.parseFloat(p.getProperty("waterTrans", String.valueOf(WATER_TRANS[0])));
|
||||
foamIntensity = Float.parseFloat(p.getProperty("foamIntensity", String.valueOf(FOAM_INTENSITY[0])));
|
||||
cloudOpacity = Float.parseFloat(p.getProperty("cloudOpacity", String.valueOf(CLOUD_OPACITY[0])));
|
||||
fogColor.set(
|
||||
Float.parseFloat(p.getProperty("fogColorR", String.valueOf(FOG_COLOR[0].r))),
|
||||
Float.parseFloat(p.getProperty("fogColorG", String.valueOf(FOG_COLOR[0].g))),
|
||||
Float.parseFloat(p.getProperty("fogColorB", String.valueOf(FOG_COLOR[0].b))),
|
||||
1f);
|
||||
waterColor.set(
|
||||
Float.parseFloat(p.getProperty("waterColorR", String.valueOf(WATER_COLOR[0].r))),
|
||||
Float.parseFloat(p.getProperty("waterColorG", String.valueOf(WATER_COLOR[0].g))),
|
||||
Float.parseFloat(p.getProperty("waterColorB", String.valueOf(WATER_COLOR[0].b))),
|
||||
1f);
|
||||
deepWaterColor.set(
|
||||
Float.parseFloat(p.getProperty("deepWaterR", String.valueOf(DEEP_WATER_COLOR[0].r))),
|
||||
Float.parseFloat(p.getProperty("deepWaterG", String.valueOf(DEEP_WATER_COLOR[0].g))),
|
||||
Float.parseFloat(p.getProperty("deepWaterB", String.valueOf(DEEP_WATER_COLOR[0].b))),
|
||||
1f);
|
||||
String savedTime = p.getProperty("timeOfDay");
|
||||
if (savedTime != null && dayTime != null) {
|
||||
dayTime.setTimeOfDay(Float.parseFloat(savedTime));
|
||||
}
|
||||
log.info("[Weather] Geladen: {} (noch {}s)", active, (int) changeTimer);
|
||||
} catch (Exception e) {
|
||||
log.warn("[Weather] Laden fehlgeschlagen: {}", e.getMessage());
|
||||
}
|
||||
private void restoreFrom(SaveGame.WeatherSave ws) {
|
||||
try { active = Weather.valueOf(ws.weather); } catch (Exception e) { active = Weather.SUNNY; }
|
||||
changeTimer = ws.changeTimer;
|
||||
windAngle = ws.windAngle;
|
||||
windAngleTgt = ws.windAngleTgt;
|
||||
fogDensity = ws.fogDensity;
|
||||
fogDistance = ws.fogDistance;
|
||||
windSpeed = ws.windSpeed;
|
||||
waveSpeed = ws.waveSpeed;
|
||||
waveAmp = ws.waveAmp;
|
||||
waveScale = ws.waveScale;
|
||||
waterTrans = ws.waterTrans;
|
||||
foamIntensity = ws.foamIntensity;
|
||||
cloudOpacity = ws.cloudOpacity;
|
||||
fogColor.set(ws.fogColorR, ws.fogColorG, ws.fogColorB, 1f);
|
||||
waterColor.set(ws.waterColorR, ws.waterColorG, ws.waterColorB, 1f);
|
||||
deepWaterColor.set(ws.deepWaterR, ws.deepWaterG, ws.deepWaterB, 1f);
|
||||
if (dayTime != null) dayTime.setTimeOfDay(ws.timeOfDay);
|
||||
log.info("[Weather] Geladen: {} (noch {}s)", active, (int) changeTimer);
|
||||
}
|
||||
|
||||
// ── Helpers ───────────────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user