Misc fog improvements
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
package mindustry.world.blocks.defense;
|
||||
|
||||
import arc.graphics.*;
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.math.*;
|
||||
import arc.struct.*;
|
||||
import arc.util.io.*;
|
||||
import mindustry.*;
|
||||
import mindustry.annotations.Annotations.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.graphics.*;
|
||||
import mindustry.world.*;
|
||||
import mindustry.world.meta.*;
|
||||
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
public class Radar extends Block{
|
||||
public float discoveryTime = 60f * 7f;
|
||||
public float rotateSpeed = 2f;
|
||||
|
||||
public @Load("@-base") TextureRegion baseRegion;
|
||||
public @Load("@-glow") TextureRegion glowRegion;
|
||||
|
||||
public Color glowColor = Pal.turretHeat;
|
||||
public float glowScl = 5f, glowMag = 0.6f;
|
||||
|
||||
public Radar(String name){
|
||||
super(name);
|
||||
|
||||
update = solid = true;
|
||||
flags = EnumSet.of(BlockFlag.hasFogRadius);
|
||||
outlineIcon = true;
|
||||
fogRadius = 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextureRegion[] icons(){
|
||||
return new TextureRegion[]{baseRegion, region};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawPlace(int x, int y, int rotation, boolean valid){
|
||||
super.drawPlace(x, y, rotation, valid);
|
||||
|
||||
Drawf.dashCircle(x * tilesize + offset, y * tilesize + offset, fogRadius * tilesize, Pal.accent);
|
||||
}
|
||||
|
||||
public class RadarBuild extends Building{
|
||||
public float progress;
|
||||
public float lastRadius = 0f;
|
||||
public float smoothEfficiency = 1f;
|
||||
public float totalProgress;
|
||||
|
||||
@Override
|
||||
public float fogRadius(){
|
||||
return fogRadius * progress * smoothEfficiency;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTile(){
|
||||
smoothEfficiency = Mathf.lerpDelta(smoothEfficiency, efficiency, 0.05f);
|
||||
|
||||
if(Math.abs(fogRadius() - lastRadius) >= 0.5f){
|
||||
Vars.fogControl.forceUpdate(team, this);
|
||||
lastRadius = fogRadius();
|
||||
}
|
||||
|
||||
progress += edelta() / discoveryTime;
|
||||
progress = Mathf.clamp(progress);
|
||||
|
||||
totalProgress += efficiency * edelta();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawSelect(){
|
||||
Drawf.dashCircle(x, y, fogRadius() * tilesize, Pal.accent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(){
|
||||
Draw.rect(baseRegion, x, y);
|
||||
Draw.rect(region, x, y, rotateSpeed * totalProgress);
|
||||
|
||||
Drawf.additive(glowRegion, glowColor, glowColor.a * (1f - glowMag + Mathf.absin(glowScl, glowMag)), x, y, rotateSpeed * totalProgress, Layer.blockAdditive);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float progress(){
|
||||
return progress;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(Writes write){
|
||||
super.write(write);
|
||||
|
||||
write.f(progress);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(Reads read, byte revision){
|
||||
super.read(read, revision);
|
||||
|
||||
progress = read.f();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -104,7 +104,7 @@ public class CoreBlock extends StorageBlock{
|
||||
public void init(){
|
||||
//assign to update clipSize internally
|
||||
lightRadius = 30f + 20f * size;
|
||||
fogRadius = Math.max(fogRadius, (int)(lightRadius / 8f * 2f));
|
||||
fogRadius = Math.max(fogRadius, (int)(lightRadius / 8f * 3f));
|
||||
emitLight = true;
|
||||
|
||||
super.init();
|
||||
|
||||
@@ -13,7 +13,8 @@ public enum BuildVisibility{
|
||||
campaignOnly(() -> Vars.state == null || Vars.state.isCampaign()),
|
||||
lightingOnly(() -> Vars.state == null || Vars.state.rules.lighting || Vars.state.isCampaign()),
|
||||
berylliumOnly(() -> !Vars.state.rules.hiddenBuildItems.contains(Items.beryllium)),
|
||||
ammoOnly(() -> Vars.state == null || Vars.state.rules.unitAmmo);
|
||||
ammoOnly(() -> Vars.state == null || Vars.state.rules.unitAmmo),
|
||||
fogOnly(() -> Vars.state == null || Vars.state.rules.fog);
|
||||
|
||||
private final Boolp visible;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user