drawNoise/drawNoiseLayers as an effect so that json can use them (#12152)

* drawNoise/drawNoiseLayers as an effect so that json can use them

* .* import

* dont call everytime

* use getOrNull

* probably still wrong somewhere

* just in case
This commit is contained in:
EggleEgg
2026-07-03 20:49:13 -04:00
committed by GitHub
parent cc850dd75e
commit bb62a3163a
3 changed files with 72 additions and 24 deletions
@@ -0,0 +1,67 @@
package mindustry.entities.effect;
import arc.*;
import arc.graphics.*;
import arc.graphics.g2d.*;
import arc.util.*;
import mindustry.entities.*;
/** Effect that renders noise layers over the camera view. */
public class NoiseEffect extends Effect{
public String noisePath = "sprites/distortAlpha.png";
public @Nullable Color color;
public float noiseScl = 1000f;
public float opacity = 0.3f;
public float baseSpeed = 0.4f;
public float intensity = 1f;
public float windX = 1f;
public float windY = 0f;
public int layers = 4;
public float layerSpeedMul = -1.3f;
public float layerAlphaMul = 0.7f;
public float layerSclMul = 0.8f;
public float layerColorMul = 0.9f;
public Texture tex;
@Override
public void render(EffectContainer e){
if(tex == null){
tex = Core.assets.getOrNull(noisePath, Texture.class);
}
if(tex == null) return;
Color col = Tmp.c2.set(color != null ? color : e.color).mul(1f, 1f, 1f, e.fout());
drawNoiseLayers(tex, col, noiseScl, opacity, baseSpeed, intensity, windX, windY, layers, layerSpeedMul, layerAlphaMul, layerSclMul, layerColorMul);
Draw.reset();
}
public static void drawNoiseLayers(Texture noise, Color color, float noisescl, float opacity, float baseSpeed, float intensity, float vwindx, float vwindy,
int layers, float layerSpeedM, float layerAlphaM, float layerSclM, float layerColorM){
float sspeed = 1f, sscl = 1f, salpha = 1f, offset = 0f;
Color col = Tmp.c1.set(color);
for(int i = 0; i < layers; i++){
drawNoise(noise, col, noisescl * sscl, salpha * opacity, sspeed * baseSpeed, intensity, vwindx, vwindy, offset);
sspeed *= layerSpeedM;
salpha *= layerAlphaM;
sscl *= layerSclM;
offset += 0.29f;
col.mul(layerColorM);
}
}
public static void drawNoise(Texture noise, Color color, float noisescl, float opacity, float baseSpeed, float intensity, float vwindx, float vwindy, float offset){
Draw.alpha(opacity);
Draw.tint(color);
float speed = baseSpeed * intensity;
float windx = vwindx * speed, windy = vwindy * speed;
float scale = 1f / noisescl;
float scroll = Time.time * scale + offset;
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(-windx * scroll, -windy * scroll);
Draw.rect(Tmp.tr1, Core.camera.position.x, Core.camera.position.y, Core.camera.width, -Core.camera.height);
}
}
+1
View File
@@ -73,6 +73,7 @@ public class ClassMap{
classes.put("SeqEffect", mindustry.entities.effect.SeqEffect.class);
classes.put("SoundEffect", mindustry.entities.effect.SoundEffect.class);
classes.put("WaveEffect", mindustry.entities.effect.WaveEffect.class);
classes.put("NoiseEffect", mindustry.entities.effect.NoiseEffect.class);
classes.put("WrapEffect", mindustry.entities.effect.WrapEffect.class);
classes.put("DrawPart", mindustry.entities.part.DrawPart.class);
classes.put("PartFunc", mindustry.entities.part.DrawPart.PartFunc.class);
+4 -24
View File
@@ -12,6 +12,7 @@ import arc.util.noise.*;
import mindustry.annotations.Annotations.*;
import mindustry.content.*;
import mindustry.ctype.*;
import mindustry.entities.effect.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.world.*;
@@ -235,33 +236,12 @@ public class Weather extends UnlockableContent{
}
public static void drawNoiseLayers(Texture noise, Color color, float noisescl, float opacity, float baseSpeed, float intensity, float vwindx, float vwindy,
int layers, float layerSpeedM , float layerAlphaM, float layerSclM, float layerColorM){
float sspeed = 1f, sscl = 1f, salpha = 1f, offset = 0f;
Color col = Tmp.c1.set(color);
for(int i = 0; i < layers; i++){
drawNoise(noise, col, noisescl * sscl, salpha * opacity, sspeed * baseSpeed, intensity, vwindx, vwindy, offset);
sspeed *= layerSpeedM;
salpha *= layerAlphaM;
sscl *= layerSclM;
offset += 0.29f;
col.mul(layerColorM);
}
int layers, float layerSpeedM, float layerAlphaM, float layerSclM, float layerColorM){
NoiseEffect.drawNoiseLayers(noise, color, noisescl, opacity, baseSpeed, intensity, vwindx, vwindy, layers, layerSpeedM, layerAlphaM, layerSclM, layerColorM);
}
public static void drawNoise(Texture noise, Color color, float noisescl, float opacity, float baseSpeed, float intensity, float vwindx, float vwindy, float offset){
Draw.alpha(opacity);
Draw.tint(color);
float speed = baseSpeed * intensity;
float windx = vwindx * speed, windy = vwindy * speed;
float scale = 1f / noisescl;
float scroll = Time.time * scale + offset;
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(-windx * scroll, -windy * scroll);
Draw.rect(Tmp.tr1, Core.camera.position.x, Core.camera.position.y, Core.camera.width, -Core.camera.height);
NoiseEffect.drawNoise(noise, color, noisescl, opacity, baseSpeed, intensity, vwindx, vwindy, offset);
}
@Override