Fixed low-FPS continuous bullets
This commit is contained in:
@@ -14,7 +14,7 @@ public class ContinuousLaserBulletType extends ContinuousBulletType{
|
|||||||
public float lightStroke = 40f;
|
public float lightStroke = 40f;
|
||||||
public int divisions = 11;
|
public int divisions = 11;
|
||||||
public Color[] colors = {Color.valueOf("ec745855"), Color.valueOf("ec7458aa"), Color.valueOf("ff9c5a"), Color.white};
|
public Color[] colors = {Color.valueOf("ec745855"), Color.valueOf("ec7458aa"), Color.valueOf("ff9c5a"), Color.white};
|
||||||
public float strokeFrom = 2f, strokeTo = 0.5f;
|
public float strokeFrom = 2f, strokeTo = 0.5f, pointyScaling = 0.75f;
|
||||||
public float backLength = 7f, frontLength = 35f;
|
public float backLength = 7f, frontLength = 35f;
|
||||||
public float width = 9f, oscScl = 0.8f, oscMag = 1.5f;
|
public float width = 9f, oscScl = 0.8f, oscMag = 1.5f;
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ public class ContinuousLaserBulletType extends ContinuousBulletType{
|
|||||||
float colorFin = i / (float)(colors.length - 1);
|
float colorFin = i / (float)(colors.length - 1);
|
||||||
float baseStroke = Mathf.lerp(strokeFrom, strokeTo, colorFin);
|
float baseStroke = Mathf.lerp(strokeFrom, strokeTo, colorFin);
|
||||||
float stroke = (width + Mathf.absin(Time.time, oscScl, oscMag)) * fout * baseStroke;
|
float stroke = (width + Mathf.absin(Time.time, oscScl, oscMag)) * fout * baseStroke;
|
||||||
float ellipseLenScl = Mathf.lerp(1 - i / (float)(colors.length), 1f, 0.75f);
|
float ellipseLenScl = Mathf.lerp(1 - i / (float)(colors.length), 1f, pointyScaling);
|
||||||
|
|
||||||
Lines.stroke(stroke);
|
Lines.stroke(stroke);
|
||||||
Lines.lineAngle(b.x, b.y, rot, length - frontLength, false);
|
Lines.lineAngle(b.x, b.y, rot, length - frontLength, false);
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import static mindustry.Vars.*;
|
|||||||
abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Drawc, Shielderc, Ownerc, Velc, Bulletc, Timerc{
|
abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Drawc, Shielderc, Ownerc, Velc, Bulletc, Timerc{
|
||||||
@Import Team team;
|
@Import Team team;
|
||||||
@Import Entityc owner;
|
@Import Entityc owner;
|
||||||
@Import float x, y, damage, lastX, lastY;
|
@Import float x, y, damage, lastX, lastY, time, lifetime;
|
||||||
@Import Vec2 vel;
|
@Import Vec2 vel;
|
||||||
|
|
||||||
IntSeq collided = new IntSeq(6);
|
IntSeq collided = new IntSeq(6);
|
||||||
@@ -37,6 +37,8 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
|
|||||||
@ReadOnly
|
@ReadOnly
|
||||||
private float rotation;
|
private float rotation;
|
||||||
|
|
||||||
|
//setting this variable to true prevents lifetime from decreasing for a frame.
|
||||||
|
transient boolean keepAlive;
|
||||||
transient @Nullable Tile aimTile;
|
transient @Nullable Tile aimTile;
|
||||||
transient float originX, originY;
|
transient float originX, originY;
|
||||||
transient @Nullable Mover mover;
|
transient @Nullable Mover mover;
|
||||||
@@ -140,6 +142,11 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
|
|||||||
hit = true;
|
hit = true;
|
||||||
remove();
|
remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(keepAlive){
|
||||||
|
time -= Time.delta;
|
||||||
|
keepAlive = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void moveRelative(float x, float y){
|
public void moveRelative(float x, float y){
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ public class ContinuousTurret extends Turret{
|
|||||||
|
|
||||||
if(isShooting() && hasAmmo()){
|
if(isShooting() && hasAmmo()){
|
||||||
entry.bullet.time = entry.bullet.lifetime * entry.bullet.type.optimalLifeFract * shootWarmup;
|
entry.bullet.time = entry.bullet.lifetime * entry.bullet.type.optimalLifeFract * shootWarmup;
|
||||||
|
entry.bullet.keepAlive = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ public class LaserTurret extends PowerTurret{
|
|||||||
entry.bullet.rotation(angle);
|
entry.bullet.rotation(angle);
|
||||||
entry.bullet.set(bulletX, bulletY);
|
entry.bullet.set(bulletX, bulletY);
|
||||||
entry.bullet.time = entry.bullet.type.lifetime * entry.bullet.type.optimalLifeFract;
|
entry.bullet.time = entry.bullet.type.lifetime * entry.bullet.type.optimalLifeFract;
|
||||||
|
entry.bullet.keepAlive = true;
|
||||||
entry.life -= Time.delta / Math.max(efficiency, 0.00001f);
|
entry.life -= Time.delta / Math.max(efficiency, 0.00001f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user