Closes #9498
This commit is contained in:
@@ -18,7 +18,7 @@ public abstract class DrawPart{
|
|||||||
public int recoilIndex = -1;
|
public int recoilIndex = -1;
|
||||||
|
|
||||||
public abstract void draw(PartParams params);
|
public abstract void draw(PartParams params);
|
||||||
public abstract void load(String name);
|
public void load(String name){}
|
||||||
public void getOutlines(Seq<TextureRegion> out){}
|
public void getOutlines(Seq<TextureRegion> out){}
|
||||||
|
|
||||||
/** Parameters for drawing a part in draw(). */
|
/** Parameters for drawing a part in draw(). */
|
||||||
@@ -88,7 +88,7 @@ public abstract class DrawPart{
|
|||||||
life = p -> p.life,
|
life = p -> p.life,
|
||||||
/** Current unscaled value of Time.time. */
|
/** Current unscaled value of Time.time. */
|
||||||
time = p -> Time.time;
|
time = p -> Time.time;
|
||||||
|
|
||||||
float get(PartParams p);
|
float get(PartParams p);
|
||||||
|
|
||||||
static PartProgress constant(float value){
|
static PartProgress constant(float value){
|
||||||
@@ -98,11 +98,11 @@ public abstract class DrawPart{
|
|||||||
default float getClamp(PartParams p){
|
default float getClamp(PartParams p){
|
||||||
return getClamp(p, true);
|
return getClamp(p, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
default float getClamp(PartParams p, boolean clamp){
|
default float getClamp(PartParams p, boolean clamp){
|
||||||
return clamp ? Mathf.clamp(get(p)) : get(p);
|
return clamp ? Mathf.clamp(get(p)) : get(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
default PartProgress inv(){
|
default PartProgress inv(){
|
||||||
return p -> 1f - get(p);
|
return p -> 1f - get(p);
|
||||||
}
|
}
|
||||||
@@ -173,11 +173,11 @@ public abstract class DrawPart{
|
|||||||
default PartProgress absin(float scl, float mag){
|
default PartProgress absin(float scl, float mag){
|
||||||
return p -> get(p) + Mathf.absin(scl, mag);
|
return p -> get(p) + Mathf.absin(scl, mag);
|
||||||
}
|
}
|
||||||
|
|
||||||
default PartProgress mod(float amount){
|
default PartProgress mod(float amount){
|
||||||
return p -> Mathf.mod(get(p), amount);
|
return p -> Mathf.mod(get(p), amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
default PartProgress loop(float time){
|
default PartProgress loop(float time){
|
||||||
return p -> Mathf.mod(get(p)/time, 1);
|
return p -> Mathf.mod(get(p)/time, 1);
|
||||||
}
|
}
|
||||||
|
|||||||
57
core/src/mindustry/entities/part/EffectSpawnerPart.java
Normal file
57
core/src/mindustry/entities/part/EffectSpawnerPart.java
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
package mindustry.entities.part;
|
||||||
|
|
||||||
|
import arc.graphics.*;
|
||||||
|
import arc.graphics.g2d.*;
|
||||||
|
import arc.math.*;
|
||||||
|
import mindustry.*;
|
||||||
|
import mindustry.content.*;
|
||||||
|
import mindustry.entities.*;
|
||||||
|
import mindustry.graphics.*;
|
||||||
|
|
||||||
|
import static arc.math.Mathf.random;
|
||||||
|
import static arc.util.Tmp.*;
|
||||||
|
|
||||||
|
/**Spawns effects in a rectangle centered on x and y.*/
|
||||||
|
public class EffectSpawnerPart extends DrawPart{
|
||||||
|
public float x, y, width, height, rotation;
|
||||||
|
public boolean mirror = false;
|
||||||
|
|
||||||
|
public float effectChance = 0.1f, effectRot, effectRandRot;
|
||||||
|
public Effect effect = Fx.sparkShoot;
|
||||||
|
public Color effectColor = Color.white;
|
||||||
|
|
||||||
|
public boolean useProgress = true;
|
||||||
|
public PartProgress progress = PartProgress.warmup;
|
||||||
|
|
||||||
|
/**Shows the spawn rectangles in red.*/
|
||||||
|
public boolean debugDraw = false;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(PartParams params){
|
||||||
|
if(debugDraw){
|
||||||
|
for(int i = 0; i < (mirror ? 2 : 1); i++){
|
||||||
|
float sign = (i == 0 ? 1f : -1f), rot = params.rotation + (rotation * sign);
|
||||||
|
v1.set(x * sign, y).rotate(params.rotation - 90).add(params.x, params.y);
|
||||||
|
|
||||||
|
float z = Draw.z();
|
||||||
|
Draw.z(Layer.buildBeam);
|
||||||
|
Draw.color(Color.red);
|
||||||
|
Draw.rect("error", v1.x, v1.y, width, height, rot - 90f);
|
||||||
|
Draw.color();
|
||||||
|
Draw.z(z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Vars.state.isPaused()) return;
|
||||||
|
|
||||||
|
for(int i = 0; i < (mirror ? 2 : 1); i++){
|
||||||
|
if(!Vars.state.isPaused() && Mathf.chanceDelta(effectChance * (useProgress ? progress.getClamp(params) : 1f))){
|
||||||
|
float sign = (i == 0 ? 1f : -1f), rot = params.rotation + (rotation * sign);
|
||||||
|
v1.set(x * sign, y).rotate(params.rotation - 90).add(params.x, params.y);
|
||||||
|
v1.add(v2.set(random(-height * 0.5f, height * 0.5f), random(-width * 0.5f, width * 0.5f)).rotate(rot));
|
||||||
|
|
||||||
|
effect.at(v1.x, v1.y, rot + (effectRot * sign) + random(-effectRandRot, effectRandRot), effectColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user