diff --git a/core/src/mindustry/content/Weathers.java b/core/src/mindustry/content/Weathers.java index 40cdb30c7e..8aac05cfae 100644 --- a/core/src/mindustry/content/Weathers.java +++ b/core/src/mindustry/content/Weathers.java @@ -5,7 +5,6 @@ import arc.graphics.*; import arc.graphics.Texture.*; import arc.graphics.g2d.*; import arc.math.*; -import arc.math.geom.*; import arc.util.*; import mindustry.ctype.*; import mindustry.gen.*; @@ -170,8 +169,8 @@ public class Weathers implements ContentList{ sandstorm = new Weather("sandstorm"){ TextureRegion region; - float yspeed = 0.3f, xspeed = 6f, size = 140f, padding = size, invDensity = 1500f; - Vec2 force = new Vec2(0.45f, 0.01f); + float size = 140f, padding = size, invDensity = 1500f, baseSpeed = 6.1f; + float force = 0.45f; Color color = Color.valueOf("f7cba4"); Texture noise; @@ -194,22 +193,26 @@ public class Weathers implements ContentList{ @Override public void update(WeatherState state){ + float speed = force * state.intensity; + float windx = state.windVector.x * speed, windy = state.windVector.y * speed; for(Unit unit : Groups.unit){ - unit.impulse(force.x * state.intensity(), force.y * state.intensity()); + unit.impulse(windx, windy); } } @Override public void drawOver(WeatherState state){ Draw.tint(color); + float speed = baseSpeed * state.intensity; + float windx = state.windVector.x * speed, windy = state.windVector.y * speed; float scale = 1f / 2000f; float scroll = Time.time() * scale; Tmp.tr1.texture = noise; Core.camera.bounds(Tmp.r1); Tmp.tr1.set(Tmp.r1.x*scale, Tmp.r1.y*scale, (Tmp.r1.x + Tmp.r1.width)*scale, (Tmp.r1.y + Tmp.r1.height)*scale); - Tmp.tr1.scroll(-xspeed * scroll, -yspeed * scroll); + Tmp.tr1.scroll(-windx * scroll, windy * scroll); Draw.rect(Tmp.tr1, Core.camera.position.x, Core.camera.position.y, Core.camera.width, -Core.camera.height); rand.setSeed(0); @@ -224,8 +227,8 @@ public class Weathers implements ContentList{ float scl = rand.random(0.5f, 1f); float scl2 = rand.random(0.5f, 1f); float sscl = rand.random(0.5f, 1f); - float x = (rand.random(0f, world.unitWidth()) + Time.time() * xspeed * scl2); - float y = (rand.random(0f, world.unitHeight()) - Time.time() * yspeed * scl); + float x = (rand.random(0f, world.unitWidth()) + Time.time() * windx * scl2); + float y = (rand.random(0f, world.unitHeight()) + Time.time() * windy * scl); float alpha = rand.random(0.2f); x += Mathf.sin(y, rand.random(30f, 80f), rand.random(1f, 7f)); @@ -247,9 +250,8 @@ public class Weathers implements ContentList{ sporestorm = new Weather("sporestorm"){ TextureRegion region; - float yspeed = 1f, xspeed = 4f, size = 5f, padding = size, invDensity = 2000f; + float size = 5f, padding = size, invDensity = 2000f, baseSpeed = 4.3f, force = 0.28f; Color color = Color.valueOf("7457ce"); - Vec2 force = new Vec2(0.25f, 0.01f); Texture noise; { @@ -269,9 +271,11 @@ public class Weathers implements ContentList{ @Override public void update(WeatherState state){ + float speed = force * state.intensity; + float windx = state.windVector.x * speed, windy = state.windVector.y * speed; for(Unit unit : Groups.unit){ - unit.impulse(force.x * state.intensity(), force.y * state.intensity()); + unit.impulse(windx, windy); } } @@ -285,12 +289,15 @@ public class Weathers implements ContentList{ Draw.alpha(state.opacity * 0.8f); Draw.tint(color); + float speed = baseSpeed * state.intensity; + float windx = state.windVector.x * speed, windy = state.windVector.y * speed; + float scale = 1f / 2000f; float scroll = Time.time() * scale; Tmp.tr1.texture = noise; Core.camera.bounds(Tmp.r1); Tmp.tr1.set(Tmp.r1.x*scale, Tmp.r1.y*scale, (Tmp.r1.x + Tmp.r1.width)*scale, (Tmp.r1.y + Tmp.r1.height)*scale); - Tmp.tr1.scroll(-xspeed * scroll, -yspeed * scroll); + Tmp.tr1.scroll(-windx * scroll, windy * scroll); Draw.rect(Tmp.tr1, Core.camera.position.x, Core.camera.position.y, Core.camera.width, -Core.camera.height); rand.setSeed(0); @@ -306,8 +313,8 @@ public class Weathers implements ContentList{ float scl = rand.random(0.5f, 1f); float scl2 = rand.random(0.5f, 1f); float sscl = rand.random(0.5f, 1f); - float x = (rand.random(0f, world.unitWidth()) + Time.time() * xspeed * scl2); - float y = (rand.random(0f, world.unitHeight()) - Time.time() * yspeed * scl); + float x = (rand.random(0f, world.unitWidth()) + Time.time() * windx * scl2); + float y = (rand.random(0f, world.unitHeight()) + Time.time() * windy * scl); float alpha = rand.random(0.1f, 0.8f); x += Mathf.sin(y, rand.random(30f, 80f), rand.random(1f, 7f)); diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 976d80da9f..099cea086f 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -245,7 +245,8 @@ public class Logic implements ApplicationListener{ if(entry.cooldown < 0 && !entry.weather.isActive()){ float duration = Mathf.random(entry.minDuration, entry.maxDuration); entry.cooldown = duration + Mathf.random(entry.minFrequency, entry.maxFrequency); - Call.createWeather(entry.weather, entry.intensity, duration); + Tmp.v1.setToRandomDirection(); + Call.createWeather(entry.weather, entry.intensity, duration, Tmp.v1.x, Tmp.v1.y); } } } diff --git a/core/src/mindustry/type/Weather.java b/core/src/mindustry/type/Weather.java index 6d414ef18c..c8547b8d2b 100644 --- a/core/src/mindustry/type/Weather.java +++ b/core/src/mindustry/type/Weather.java @@ -106,8 +106,8 @@ public abstract class Weather extends UnlockableContent{ } @Remote(called = Loc.server) - public static void createWeather(Weather weather, float intensity, float duration){ - weather.create(intensity, duration); + public static void createWeather(Weather weather, float intensity, float duration, float windX, float windY){ + weather.create(intensity, duration).windVector.set(windX, windY); } public static class WeatherEntry{ @@ -148,7 +148,7 @@ public abstract class Weather extends UnlockableContent{ Weather weather; float intensity = 1f, opacity = 0f, life, effectTimer; - Vec2 windVector = new Vec2(); + Vec2 windVector = new Vec2().setToRandomDirection(); void init(Weather weather){ this.weather = weather;