Weather status effects
This commit is contained in:
@@ -1696,7 +1696,7 @@ public class Blocks implements ContentList{
|
||||
requirements(Category.units, with(Items.copper, 50, Items.lead, 120, Items.silicon, 80));
|
||||
plans = new UnitPlan[]{
|
||||
new UnitPlan(UnitTypes.dagger, 60f * 20, with(Items.silicon, 10, Items.lead, 10)),
|
||||
new UnitPlan(UnitTypes.crawler, 60f * 15, with(Items.silicon, 10, Items.blastCompound, 10)),
|
||||
new UnitPlan(UnitTypes.crawler, 60f * 15, with(Items.silicon, 10, Items.coal, 20)),
|
||||
new UnitPlan(UnitTypes.nova, 60f * 40, with(Items.silicon, 30, Items.lead, 20, Items.titanium, 20)),
|
||||
};
|
||||
size = 3;
|
||||
@@ -1706,7 +1706,7 @@ public class Blocks implements ContentList{
|
||||
airFactory = new UnitFactory("air-factory"){{
|
||||
requirements(Category.units, with(Items.copper, 30, Items.lead, 70));
|
||||
plans = new UnitPlan[]{
|
||||
new UnitPlan(UnitTypes.flare, 60f * 15, with(Items.silicon, 10)),
|
||||
new UnitPlan(UnitTypes.flare, 60f * 15, with(Items.silicon, 15)),
|
||||
new UnitPlan(UnitTypes.mono, 60f * 35, with(Items.silicon, 30, Items.lead, 15)),
|
||||
};
|
||||
size = 3;
|
||||
|
||||
@@ -654,13 +654,11 @@ public class Fx{
|
||||
|
||||
}),
|
||||
|
||||
wet = new Effect(40f, e -> {
|
||||
wet = new Effect(80f, e -> {
|
||||
color(Liquids.water.color);
|
||||
alpha(Mathf.clamp(e.fin() * 2f));
|
||||
|
||||
randLenVectors(e.id, 2, 1f + e.fin() * 2f, (x, y) -> {
|
||||
Fill.circle(e.x + x, e.y + y, e.fout() * 1f);
|
||||
});
|
||||
|
||||
Fill.circle(e.x, e.y, e.fout() * 1f);
|
||||
}),
|
||||
|
||||
sapped = new Effect(40f, e -> {
|
||||
|
||||
@@ -47,8 +47,9 @@ public class StatusEffects implements ContentList{
|
||||
|
||||
wet = new StatusEffect("wet"){{
|
||||
color = Color.royal;
|
||||
speedMultiplier = 0.9f;
|
||||
speedMultiplier = 0.94f;
|
||||
effect = Fx.wet;
|
||||
effectChance = 0.09f;
|
||||
|
||||
init(() -> {
|
||||
trans(shocked, ((unit, time, newTime, result) -> {
|
||||
|
||||
@@ -263,7 +263,7 @@ public class UnitTypes implements ContentList{
|
||||
speed = 1f;
|
||||
splashDamageRadius = 55f;
|
||||
instantDisappear = true;
|
||||
splashDamage = 40f;
|
||||
splashDamage = 45f;
|
||||
killShooter = true;
|
||||
hittable = false;
|
||||
collidesAir = true;
|
||||
@@ -527,7 +527,7 @@ public class UnitTypes implements ContentList{
|
||||
}};
|
||||
|
||||
antumbra = new UnitType("antumbra"){{
|
||||
speed = 1.25f;
|
||||
speed = 1.13f;
|
||||
accel = 0.035f;
|
||||
drag = 0.05f;
|
||||
rotateSpeed = 1.9f;
|
||||
@@ -599,7 +599,7 @@ public class UnitTypes implements ContentList{
|
||||
}};
|
||||
|
||||
eclipse = new UnitType("eclipse"){{
|
||||
speed = 1.1f;
|
||||
speed = 1.09f;
|
||||
accel = 0.02f;
|
||||
drag = 0.05f;
|
||||
rotateSpeed = 1f;
|
||||
|
||||
@@ -70,7 +70,6 @@ public class Weathers implements ContentList{
|
||||
}
|
||||
};
|
||||
|
||||
//TODO should apply wet effect
|
||||
rain = new Weather("rain"){
|
||||
float yspeed = 5f, xspeed = 1.5f, padding = 16f, size = 40f, density = 1200f;
|
||||
TextureRegion[] splashes = new TextureRegion[12];
|
||||
@@ -78,6 +77,7 @@ public class Weathers implements ContentList{
|
||||
{
|
||||
attrs.set(Attribute.light, -0.2f);
|
||||
attrs.set(Attribute.water, 0.2f);
|
||||
status = StatusEffects.wet;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -18,7 +18,7 @@ import java.util.regex.*;
|
||||
public class Scripts implements Disposable{
|
||||
private final Seq<String> blacklist = Seq.with(".net.", "java.net", "files", "reflect", "javax", "rhino", "file", "channels", "jdk",
|
||||
"runtime", "util.os", "rmi", "security", "org.", "sun.", "beans", "sql", "http", "exec", "compiler", "process", "system",
|
||||
".awt", "socket", "classloader", "oracle", "invoke", "java.util.function", "java.util.stream");
|
||||
".awt", "socket", "classloader", "oracle", "invoke", "java.util.function", "java.util.stream", "org.");
|
||||
private final Seq<String> whitelist = Seq.with("mindustry.net", "netserver", "netclient", "com.sun.proxy.$proxy", "mindustry.gen.");
|
||||
private final Context context;
|
||||
private final Scriptable scope;
|
||||
|
||||
@@ -56,7 +56,8 @@ public class StatusEffect extends MappableContent{
|
||||
}
|
||||
|
||||
if(effect != Fx.none && Mathf.chanceDelta(effectChance)){
|
||||
effect.at(unit.x + Mathf.range(unit.bounds() / 2f), unit.y + Mathf.range(unit.bounds() / 2f));
|
||||
Tmp.v1.rnd(unit.type().hitsize/2f);
|
||||
effect.at(unit.x + Tmp.v1.x, unit.y + Tmp.v1.y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,12 +5,13 @@ import arc.graphics.g2d.*;
|
||||
import arc.math.*;
|
||||
import arc.util.*;
|
||||
import mindustry.annotations.Annotations.*;
|
||||
import mindustry.content.*;
|
||||
import mindustry.ctype.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.graphics.*;
|
||||
import mindustry.world.blocks.*;
|
||||
|
||||
import static mindustry.Vars.renderer;
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
public abstract class Weather extends MappableContent{
|
||||
/** Default duration of this weather event in ticks. */
|
||||
@@ -20,6 +21,8 @@ public abstract class Weather extends MappableContent{
|
||||
//internals
|
||||
public Rand rand = new Rand();
|
||||
public Prov<WeatherState> type = WeatherState::create;
|
||||
public StatusEffect status = StatusEffects.none;
|
||||
public float statusDuration = 60f * 2;
|
||||
|
||||
public Weather(String name, Prov<WeatherState> type){
|
||||
super(name);
|
||||
@@ -60,6 +63,18 @@ public abstract class Weather extends MappableContent{
|
||||
|
||||
}
|
||||
|
||||
public void updateEffect(WeatherState state){
|
||||
if(status != StatusEffects.none){
|
||||
if(state.effectTimer <= 0){
|
||||
state.effectTimer = statusDuration - 5f;
|
||||
|
||||
Groups.unit.each(u -> u.apply(status, statusDuration));
|
||||
}else{
|
||||
state.effectTimer -= Time.delta;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void drawOver(WeatherState state){
|
||||
|
||||
}
|
||||
@@ -115,7 +130,7 @@ public abstract class Weather extends MappableContent{
|
||||
private static final float fadeTime = 60 * 4;
|
||||
|
||||
Weather weather;
|
||||
float intensity = 1f, opacity = 0f, life;
|
||||
float intensity = 1f, opacity = 0f, life, effectTimer;
|
||||
|
||||
void init(Weather weather){
|
||||
this.weather = weather;
|
||||
@@ -132,6 +147,7 @@ public abstract class Weather extends MappableContent{
|
||||
life -= Time.delta;
|
||||
|
||||
weather.update(base());
|
||||
weather.updateEffect(base());
|
||||
|
||||
if(life < 0){
|
||||
remove();
|
||||
|
||||
Reference in New Issue
Block a user