Latum mostly done
This commit is contained in:
BIN
core/assets-raw/sprites/units/latum-spine.png
Normal file
BIN
core/assets-raw/sprites/units/latum-spine.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 215 B |
Binary file not shown.
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
core/assets-raw/sprites/units/weapons/latum-point-defense.png
Normal file
BIN
core/assets-raw/sprites/units/weapons/latum-point-defense.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 345 B |
BIN
core/assets-raw/sprites/units/weapons/latum-weapon-heat.png
Normal file
BIN
core/assets-raw/sprites/units/weapons/latum-weapon-heat.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 470 B |
BIN
core/assets-raw/sprites/units/weapons/latum-weapon.png
Normal file
BIN
core/assets-raw/sprites/units/weapons/latum-weapon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 268 B |
@@ -2731,7 +2731,7 @@ public class Blocks{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
shootY = 3f;
|
shootY = 3f;
|
||||||
reloadTime = 20f;
|
reload = 20f;
|
||||||
restitution = 0.03f;
|
restitution = 0.03f;
|
||||||
range = 110;
|
range = 110;
|
||||||
shootCone = 15f;
|
shootCone = 15f;
|
||||||
@@ -2751,7 +2751,7 @@ public class Blocks{
|
|||||||
Items.lead, Bullets.flakLead,
|
Items.lead, Bullets.flakLead,
|
||||||
Items.metaglass, Bullets.flakGlass
|
Items.metaglass, Bullets.flakGlass
|
||||||
);
|
);
|
||||||
reloadTime = 18f;
|
reload = 18f;
|
||||||
range = 220f;
|
range = 220f;
|
||||||
size = 2;
|
size = 2;
|
||||||
targetGround = false;
|
targetGround = false;
|
||||||
@@ -2778,7 +2778,7 @@ public class Blocks{
|
|||||||
Items.pyratite, Bullets.pyraFlame
|
Items.pyratite, Bullets.pyraFlame
|
||||||
);
|
);
|
||||||
recoilAmount = 0f;
|
recoilAmount = 0f;
|
||||||
reloadTime = 6f;
|
reload = 6f;
|
||||||
coolantMultiplier = 1.5f;
|
coolantMultiplier = 1.5f;
|
||||||
range = 60f;
|
range = 60f;
|
||||||
shootCone = 50f;
|
shootCone = 50f;
|
||||||
@@ -2797,7 +2797,7 @@ public class Blocks{
|
|||||||
Items.pyratite, Bullets.artilleryIncendiary
|
Items.pyratite, Bullets.artilleryIncendiary
|
||||||
);
|
);
|
||||||
targetAir = false;
|
targetAir = false;
|
||||||
reloadTime = 60f;
|
reload = 60f;
|
||||||
recoilAmount = 2f;
|
recoilAmount = 2f;
|
||||||
range = 235f;
|
range = 235f;
|
||||||
inaccuracy = 1f;
|
inaccuracy = 1f;
|
||||||
@@ -2818,7 +2818,7 @@ public class Blocks{
|
|||||||
);
|
);
|
||||||
size = 2;
|
size = 2;
|
||||||
recoilAmount = 0f;
|
recoilAmount = 0f;
|
||||||
reloadTime = 3f;
|
reload = 3f;
|
||||||
inaccuracy = 5f;
|
inaccuracy = 5f;
|
||||||
shootCone = 50f;
|
shootCone = 50f;
|
||||||
liquidCapacity = 10f;
|
liquidCapacity = 10f;
|
||||||
@@ -2836,7 +2836,7 @@ public class Blocks{
|
|||||||
shoot.firstShotDelay = 40f;
|
shoot.firstShotDelay = 40f;
|
||||||
|
|
||||||
recoilAmount = 2f;
|
recoilAmount = 2f;
|
||||||
reloadTime = 80f;
|
reload = 80f;
|
||||||
cooldown = 0.03f;
|
cooldown = 0.03f;
|
||||||
shootShake = 2f;
|
shootShake = 2f;
|
||||||
shootEffect = Fx.lancerLaserShoot;
|
shootEffect = Fx.lancerLaserShoot;
|
||||||
@@ -2874,7 +2874,7 @@ public class Blocks{
|
|||||||
collidesAir = false;
|
collidesAir = false;
|
||||||
ammoMultiplier = 1f;
|
ammoMultiplier = 1f;
|
||||||
}};
|
}};
|
||||||
reloadTime = 35f;
|
reload = 35f;
|
||||||
shootCone = 40f;
|
shootCone = 40f;
|
||||||
rotateSpeed = 8f;
|
rotateSpeed = 8f;
|
||||||
targetAir = false;
|
targetAir = false;
|
||||||
@@ -2920,7 +2920,7 @@ public class Blocks{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
shootY = 7f;
|
shootY = 7f;
|
||||||
reloadTime = 30f;
|
reload = 30f;
|
||||||
inaccuracy = 10f;
|
inaccuracy = 10f;
|
||||||
range = 240f;
|
range = 240f;
|
||||||
size = 2;
|
size = 2;
|
||||||
@@ -2944,7 +2944,7 @@ public class Blocks{
|
|||||||
|
|
||||||
size = 2;
|
size = 2;
|
||||||
range = 190f;
|
range = 190f;
|
||||||
reloadTime = 31f;
|
reload = 31f;
|
||||||
restitution = 0.03f;
|
restitution = 0.03f;
|
||||||
ammoEjectBack = 3f;
|
ammoEjectBack = 3f;
|
||||||
cooldown = 0.03f;
|
cooldown = 0.03f;
|
||||||
@@ -2971,7 +2971,7 @@ public class Blocks{
|
|||||||
size = 2;
|
size = 2;
|
||||||
shootLength = 5f;
|
shootLength = 5f;
|
||||||
bulletDamage = 30f;
|
bulletDamage = 30f;
|
||||||
reloadTime = 8f;
|
reload = 8f;
|
||||||
envEnabled |= Env.space;
|
envEnabled |= Env.space;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -2984,7 +2984,7 @@ public class Blocks{
|
|||||||
Liquids.oil, Bullets.heavyOilShot
|
Liquids.oil, Bullets.heavyOilShot
|
||||||
);
|
);
|
||||||
size = 3;
|
size = 3;
|
||||||
reloadTime = 3f;
|
reload = 3f;
|
||||||
shoot.shots = 2;
|
shoot.shots = 2;
|
||||||
velocityInaccuracy = 0.1f;
|
velocityInaccuracy = 0.1f;
|
||||||
inaccuracy = 4f;
|
inaccuracy = 4f;
|
||||||
@@ -3001,7 +3001,7 @@ public class Blocks{
|
|||||||
fuse = new ItemTurret("fuse"){{
|
fuse = new ItemTurret("fuse"){{
|
||||||
requirements(Category.turret, with(Items.copper, 225, Items.graphite, 225, Items.thorium, 100));
|
requirements(Category.turret, with(Items.copper, 225, Items.graphite, 225, Items.thorium, 100));
|
||||||
|
|
||||||
reloadTime = 35f;
|
reload = 35f;
|
||||||
shootShake = 4f;
|
shootShake = 4f;
|
||||||
range = 90f;
|
range = 90f;
|
||||||
recoilAmount = 5f;
|
recoilAmount = 5f;
|
||||||
@@ -3054,7 +3054,7 @@ public class Blocks{
|
|||||||
size = 3;
|
size = 3;
|
||||||
shoot.shots = 4;
|
shoot.shots = 4;
|
||||||
inaccuracy = 12f;
|
inaccuracy = 12f;
|
||||||
reloadTime = 60f;
|
reload = 60f;
|
||||||
ammoEjectBack = 5f;
|
ammoEjectBack = 5f;
|
||||||
ammoUseEffect = Fx.casing3Double;
|
ammoUseEffect = Fx.casing3Double;
|
||||||
ammoPerShot = 2;
|
ammoPerShot = 2;
|
||||||
@@ -3087,7 +3087,7 @@ public class Blocks{
|
|||||||
-3f, 0f, 0f,
|
-3f, 0f, 0f,
|
||||||
};
|
};
|
||||||
}};
|
}};
|
||||||
reloadTime = 8f;
|
reload = 8f;
|
||||||
range = 200f;
|
range = 200f;
|
||||||
size = 3;
|
size = 3;
|
||||||
recoilAmount = 3f;
|
recoilAmount = 3f;
|
||||||
@@ -3124,7 +3124,7 @@ public class Blocks{
|
|||||||
maxAmmo = 40;
|
maxAmmo = 40;
|
||||||
ammoPerShot = 5;
|
ammoPerShot = 5;
|
||||||
rotateSpeed = 2f;
|
rotateSpeed = 2f;
|
||||||
reloadTime = 200f;
|
reload = 200f;
|
||||||
ammoUseEffect = Fx.casing3Double;
|
ammoUseEffect = Fx.casing3Double;
|
||||||
recoilAmount = 5f;
|
recoilAmount = 5f;
|
||||||
restitution = 0.009f;
|
restitution = 0.009f;
|
||||||
@@ -3150,7 +3150,7 @@ public class Blocks{
|
|||||||
Items.pyratite, Bullets.standardIncendiaryBig,
|
Items.pyratite, Bullets.standardIncendiaryBig,
|
||||||
Items.thorium, Bullets.standardThoriumBig
|
Items.thorium, Bullets.standardThoriumBig
|
||||||
);
|
);
|
||||||
reloadTime = 7f;
|
reload = 7f;
|
||||||
coolantMultiplier = 0.5f;
|
coolantMultiplier = 0.5f;
|
||||||
restitution = 0.1f;
|
restitution = 0.1f;
|
||||||
ammoUseEffect = Fx.casing3;
|
ammoUseEffect = Fx.casing3;
|
||||||
@@ -3179,7 +3179,7 @@ public class Blocks{
|
|||||||
size = 4;
|
size = 4;
|
||||||
shootShake = 2f;
|
shootShake = 2f;
|
||||||
range = 195f;
|
range = 195f;
|
||||||
reloadTime = 90f;
|
reload = 90f;
|
||||||
firingMoveFract = 0.5f;
|
firingMoveFract = 0.5f;
|
||||||
shootDuration = 230f;
|
shootDuration = 230f;
|
||||||
shootSound = Sounds.laserbig;
|
shootSound = Sounds.laserbig;
|
||||||
@@ -3253,7 +3253,7 @@ public class Blocks{
|
|||||||
outlineColor = Pal.darkOutline;
|
outlineColor = Pal.darkOutline;
|
||||||
size = 3;
|
size = 3;
|
||||||
envEnabled |= Env.space;
|
envEnabled |= Env.space;
|
||||||
reloadTime = 40f;
|
reload = 40f;
|
||||||
recoilAmount = 2f;
|
recoilAmount = 2f;
|
||||||
restitution = 0.03f;
|
restitution = 0.03f;
|
||||||
range = 190;
|
range = 190;
|
||||||
@@ -3380,7 +3380,7 @@ public class Blocks{
|
|||||||
targetAir = false;
|
targetAir = false;
|
||||||
shootShake = 4f;
|
shootShake = 4f;
|
||||||
recoilAmount = 1f;
|
recoilAmount = 1f;
|
||||||
reloadTime = 60f * 2.3f;
|
reload = 60f * 2.3f;
|
||||||
shootY = 7f;
|
shootY = 7f;
|
||||||
rotateSpeed = 1.4f;
|
rotateSpeed = 1.4f;
|
||||||
minWarmup = 0.85f;
|
minWarmup = 0.85f;
|
||||||
@@ -3453,7 +3453,7 @@ public class Blocks{
|
|||||||
}});
|
}});
|
||||||
|
|
||||||
|
|
||||||
reloadTime = 9f;
|
reload = 9f;
|
||||||
shootY = 15f;
|
shootY = 15f;
|
||||||
rotateSpeed = 5f;
|
rotateSpeed = 5f;
|
||||||
shootCone = 30f;
|
shootCone = 30f;
|
||||||
|
|||||||
@@ -2477,7 +2477,7 @@ public class UnitTypes{
|
|||||||
treadPullOffset = 5;
|
treadPullOffset = 5;
|
||||||
speed = 0.7f;
|
speed = 0.7f;
|
||||||
rotateSpeed = 2.6f;
|
rotateSpeed = 2.6f;
|
||||||
health = 800;
|
health = 2000;
|
||||||
armor = 7f;
|
armor = 7f;
|
||||||
areaDamage = 8f;
|
areaDamage = 8f;
|
||||||
treadRects = new Rect[]{new Rect(17, 10, 19, 76)};
|
treadRects = new Rect[]{new Rect(17, 10, 19, 76)};
|
||||||
@@ -2778,7 +2778,8 @@ public class UnitTypes{
|
|||||||
drag = 0.1f;
|
drag = 0.1f;
|
||||||
hitSize = 14f;
|
hitSize = 14f;
|
||||||
rotateSpeed = 3f;
|
rotateSpeed = 3f;
|
||||||
health = 700;
|
health = 1100;
|
||||||
|
armor = 5f;
|
||||||
|
|
||||||
legCount = 4;
|
legCount = 4;
|
||||||
legLength = 14f;
|
legLength = 14f;
|
||||||
@@ -2793,28 +2794,70 @@ public class UnitTypes{
|
|||||||
|
|
||||||
legMoveSpace = 1f;
|
legMoveSpace = 1f;
|
||||||
hovering = true;
|
hovering = true;
|
||||||
armor = 5f;
|
|
||||||
|
|
||||||
visualElevation = 0.2f;
|
visualElevation = 0.2f;
|
||||||
groundLayer = Layer.legUnit - 1f;
|
groundLayer = Layer.legUnit - 1f;
|
||||||
|
|
||||||
if(false)
|
for(int i = 0; i < 5; i++){
|
||||||
weapons.add(new Weapon("eruption"){{
|
int fi = i;
|
||||||
top = false;
|
parts.add(new RegionPart("-spine"){{
|
||||||
shootY = 3f;
|
y = 21f / 4f - 45f / 4f * fi / 4f;
|
||||||
reload = 9f;
|
moveX = 21f / 4f + Mathf.slope(fi / 4f) * 1.25f;
|
||||||
ejectEffect = Fx.none;
|
moveRot = 10f - fi * 14f;
|
||||||
recoil = 1f;
|
float fin = fi / 4f;
|
||||||
x = 7f;
|
progress = PartProgress.reload.inv().mul(1.3f).add(0.1f).sustain(fin * 0.34f, 0.14f, 0.14f);
|
||||||
shootSound = Sounds.flame;
|
layerOffset = -0.001f;
|
||||||
|
mirror = true;
|
||||||
|
}});
|
||||||
|
}
|
||||||
|
|
||||||
bullet = new LiquidBulletType(Liquids.slag){{
|
weapons.add(new Weapon("latum-weapon"){{
|
||||||
damage = 13;
|
x = 14f / 4f;
|
||||||
speed = 2.5f;
|
y = 33f / 4f;
|
||||||
drag = 0.009f;
|
reload = 30f;
|
||||||
shootEffect = Fx.shootSmall;
|
layerOffset = -0.002f;
|
||||||
lifetime = 57f;
|
alternate = false;
|
||||||
collidesAir = false;
|
heatColor = Color.red;
|
||||||
|
cooldownTime = 25f;
|
||||||
|
smoothReloadSpeed = 0.15f;
|
||||||
|
recoil = 2f;
|
||||||
|
|
||||||
|
bullet = new BasicBulletType(3.5f, 40){{
|
||||||
|
backColor = trailColor = hitColor = Pal.techBlue;
|
||||||
|
frontColor = Color.white;
|
||||||
|
width = 7.5f;
|
||||||
|
height = 10f;
|
||||||
|
lifetime = 55f;
|
||||||
|
trailWidth = 2f;
|
||||||
|
trailLength = 4;
|
||||||
|
shake = 0.5f;
|
||||||
|
recoil = 0.1f;
|
||||||
|
|
||||||
|
trailEffect = Fx.missileTrail;
|
||||||
|
trailParam = 1.8f;
|
||||||
|
trailInterval = 8f;
|
||||||
|
|
||||||
|
hitEffect = despawnEffect = Fx.hitBulletColor;
|
||||||
|
shootEffect = new MultiEffect(Fx.shootBigColor, Fx.hitLaserColor);
|
||||||
|
smokeEffect = Fx.shootSmallSmoke;
|
||||||
|
ammoMultiplier = 2;
|
||||||
|
}};
|
||||||
|
}});
|
||||||
|
|
||||||
|
weapons.add(new PointDefenseWeapon("latum-point-defense"){{
|
||||||
|
x = 16f / 4f;
|
||||||
|
y = -20f / 4f;
|
||||||
|
reload = 10f;
|
||||||
|
|
||||||
|
targetInterval = 9f;
|
||||||
|
targetSwitchInterval = 12f;
|
||||||
|
recoil = 0.5f;
|
||||||
|
|
||||||
|
bullet = new BulletType(){{
|
||||||
|
shootEffect = Fx.sparkShoot;
|
||||||
|
hitEffect = Fx.pointHit;
|
||||||
|
maxRange = 100f;
|
||||||
|
damage = 30f;
|
||||||
}};
|
}};
|
||||||
}});
|
}});
|
||||||
}};
|
}};
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package mindustry.entities.part;
|
|||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
|
import arc.util.*;
|
||||||
|
|
||||||
public abstract class DrawPart{
|
public abstract class DrawPart{
|
||||||
public static final PartParams params = new PartParams();
|
public static final PartParams params = new PartParams();
|
||||||
@@ -88,6 +89,10 @@ public abstract class DrawPart{
|
|||||||
return p -> get(p) + amount;
|
return p -> get(p) + amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default PartProgress add(PartProgress other){
|
||||||
|
return p -> get(p) + other.get(p);
|
||||||
|
}
|
||||||
|
|
||||||
default PartProgress delay(float amount){
|
default PartProgress delay(float amount){
|
||||||
return p -> (get(p) - amount) / (1f - amount);
|
return p -> (get(p) - amount) / (1f - amount);
|
||||||
}
|
}
|
||||||
@@ -96,6 +101,13 @@ public abstract class DrawPart{
|
|||||||
return p -> (get(p) - offset) / duration;
|
return p -> (get(p) - offset) / duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default PartProgress sustain(float offset, float grow, float sustain){
|
||||||
|
return p -> {
|
||||||
|
float val = get(p) - offset;
|
||||||
|
return Math.min(Math.max(val, 0f) / grow, (grow + sustain + grow - val) / grow);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
default PartProgress shorten(float amount){
|
default PartProgress shorten(float amount){
|
||||||
return p -> get(p) / (1f - amount);
|
return p -> get(p) / (1f - amount);
|
||||||
}
|
}
|
||||||
@@ -116,6 +128,10 @@ public abstract class DrawPart{
|
|||||||
return p -> Math.min(get(p), other.get(p));
|
return p -> Math.min(get(p), other.get(p));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default PartProgress sin(float offset, float scl, float mag){
|
||||||
|
return p -> get(p) + Mathf.sin(Time.time + offset, scl, mag);
|
||||||
|
}
|
||||||
|
|
||||||
default PartProgress sin(float scl, float mag){
|
default PartProgress sin(float scl, float mag){
|
||||||
return p -> get(p) + Mathf.sin(scl, mag);
|
return p -> get(p) + Mathf.sin(scl, mag);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,5 +58,7 @@ public class PointDefenseWeapon extends Weapon{
|
|||||||
bullet.shootEffect.at(shootX, shootY, rotation, color);
|
bullet.shootEffect.at(shootX, shootY, rotation, color);
|
||||||
bullet.hitEffect.at(target.x, target.y, color);
|
bullet.hitEffect.at(target.x, target.y, color);
|
||||||
shootSound.at(shootX, shootY, Mathf.random(0.9f, 1.1f));
|
shootSound.at(shootX, shootY, Mathf.random(0.9f, 1.1f));
|
||||||
|
mount.recoil = recoil;
|
||||||
|
mount.heat = 1f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ public class LaserTurret extends PowerTurret{
|
|||||||
super.setStats();
|
super.setStats();
|
||||||
|
|
||||||
stats.remove(Stat.booster);
|
stats.remove(Stat.booster);
|
||||||
stats.add(Stat.input, StatValues.boosters(reloadTime, coolant.amount, coolantMultiplier, false, this::consumesLiquid));
|
stats.add(Stat.input, StatValues.boosters(reload, coolant.amount, coolantMultiplier, false, this::consumesLiquid));
|
||||||
}
|
}
|
||||||
|
|
||||||
public class LaserTurretBuild extends PowerTurretBuild{
|
public class LaserTurretBuild extends PowerTurretBuild{
|
||||||
@@ -66,13 +66,13 @@ public class LaserTurret extends PowerTurret{
|
|||||||
wasShooting = true;
|
wasShooting = true;
|
||||||
heat = 1f;
|
heat = 1f;
|
||||||
recoil = recoilAmount;
|
recoil = recoilAmount;
|
||||||
}else if(reload > 0){
|
}else if(reloadCounter > 0){
|
||||||
wasShooting = true;
|
wasShooting = true;
|
||||||
//TODO does not handle multi liquid req?
|
//TODO does not handle multi liquid req?
|
||||||
Liquid liquid = liquids.current();
|
Liquid liquid = liquids.current();
|
||||||
float maxUsed = coolant.amount;
|
float maxUsed = coolant.amount;
|
||||||
float used = (cheating() ? maxUsed : Math.min(liquids.get(liquid), maxUsed)) * delta();
|
float used = (cheating() ? maxUsed : Math.min(liquids.get(liquid), maxUsed)) * delta();
|
||||||
reload -= used * liquid.heatCapacity * coolantMultiplier;
|
reloadCounter -= used * liquid.heatCapacity * coolantMultiplier;
|
||||||
liquids.remove(liquid, used);
|
liquids.remove(liquid, used);
|
||||||
|
|
||||||
if(Mathf.chance(0.06 * used)){
|
if(Mathf.chance(0.06 * used)){
|
||||||
@@ -83,7 +83,7 @@ public class LaserTurret extends PowerTurret{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float progress(){
|
public float progress(){
|
||||||
return 1f - Mathf.clamp(reload / reloadTime);
|
return 1f - Mathf.clamp(reloadCounter / reload);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -97,12 +97,12 @@ public class LaserTurret extends PowerTurret{
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(reload <= 0 && efficiency > 0 && !charging() && shootWarmup >= minWarmup){
|
if(reloadCounter <= 0 && efficiency > 0 && !charging() && shootWarmup >= minWarmup){
|
||||||
BulletType type = peekAmmo();
|
BulletType type = peekAmmo();
|
||||||
|
|
||||||
shoot(type);
|
shoot(type);
|
||||||
|
|
||||||
reload = reloadTime;
|
reloadCounter = reload;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public class PointDefenseTurret extends ReloadTurret{
|
|||||||
super(name);
|
super(name);
|
||||||
|
|
||||||
rotateSpeed = 20f;
|
rotateSpeed = 20f;
|
||||||
reloadTime = 30f;
|
reload = 30f;
|
||||||
|
|
||||||
coolantMultiplier = 2f;
|
coolantMultiplier = 2f;
|
||||||
}
|
}
|
||||||
@@ -49,7 +49,7 @@ public class PointDefenseTurret extends ReloadTurret{
|
|||||||
public void setStats(){
|
public void setStats(){
|
||||||
super.setStats();
|
super.setStats();
|
||||||
|
|
||||||
stats.add(Stat.reload, 60f / reloadTime, StatUnit.perSecond);
|
stats.add(Stat.reload, 60f / reload, StatUnit.perSecond);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class PointDefenseBuild extends ReloadTurretBuild{
|
public class PointDefenseBuild extends ReloadTurretBuild{
|
||||||
@@ -76,10 +76,10 @@ public class PointDefenseTurret extends ReloadTurret{
|
|||||||
if(target != null && target.within(this, range) && target.team != team && target.type() != null && target.type().hittable){
|
if(target != null && target.within(this, range) && target.team != team && target.type() != null && target.type().hittable){
|
||||||
float dest = angleTo(target);
|
float dest = angleTo(target);
|
||||||
rotation = Angles.moveToward(rotation, dest, rotateSpeed * edelta());
|
rotation = Angles.moveToward(rotation, dest, rotateSpeed * edelta());
|
||||||
reload += edelta();
|
reloadCounter += edelta();
|
||||||
|
|
||||||
//shoot when possible
|
//shoot when possible
|
||||||
if(Angles.within(rotation, dest, shootCone) && reload >= reloadTime){
|
if(Angles.within(rotation, dest, shootCone) && reloadCounter >= reload){
|
||||||
if(target.damage() > bulletDamage){
|
if(target.damage() > bulletDamage){
|
||||||
target.damage(target.damage() - bulletDamage);
|
target.damage(target.damage() - bulletDamage);
|
||||||
}else{
|
}else{
|
||||||
@@ -92,7 +92,7 @@ public class PointDefenseTurret extends ReloadTurret{
|
|||||||
shootEffect.at(x + Tmp.v1.x, y + Tmp.v1.y, rotation, color);
|
shootEffect.at(x + Tmp.v1.x, y + Tmp.v1.y, rotation, color);
|
||||||
hitEffect.at(target.x, target.y, color);
|
hitEffect.at(target.x, target.y, color);
|
||||||
shootSound.at(x + Tmp.v1.x, y + Tmp.v1.y, Mathf.random(0.9f, 1.1f));
|
shootSound.at(x + Tmp.v1.x, y + Tmp.v1.y, Mathf.random(0.9f, 1.1f));
|
||||||
reload = 0;
|
reloadCounter = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import mindustry.world.meta.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class ReloadTurret extends BaseTurret{
|
public class ReloadTurret extends BaseTurret{
|
||||||
public float reloadTime = 10f;
|
public float reload = 10f;
|
||||||
|
|
||||||
public ReloadTurret(String name){
|
public ReloadTurret(String name){
|
||||||
super(name);
|
super(name);
|
||||||
@@ -18,25 +18,25 @@ public class ReloadTurret extends BaseTurret{
|
|||||||
super.setStats();
|
super.setStats();
|
||||||
|
|
||||||
if(coolant != null){
|
if(coolant != null){
|
||||||
stats.add(Stat.booster, StatValues.boosters(reloadTime, coolant.amount, coolantMultiplier, true, l -> l.coolant && consumesLiquid(l)));
|
stats.add(Stat.booster, StatValues.boosters(reload, coolant.amount, coolantMultiplier, true, l -> l.coolant && consumesLiquid(l)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ReloadTurretBuild extends BaseTurretBuild{
|
public class ReloadTurretBuild extends BaseTurretBuild{
|
||||||
public float reload;
|
public float reloadCounter;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void created(){
|
public void created(){
|
||||||
super.created();
|
super.created();
|
||||||
//for visual reasons, the turret does not need reloading when placed
|
//for visual reasons, the turret does not need reloading when placed
|
||||||
reload = reloadTime;
|
reloadCounter = reload;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateCooling(){
|
protected void updateCooling(){
|
||||||
if(reload < reloadTime && coolant != null && coolant.efficiency(this) > 0){
|
if(reloadCounter < reload && coolant != null && coolant.efficiency(this) > 0){
|
||||||
float capacity = coolant instanceof ConsumeLiquidFilter filter ? filter.getConsumed(this).heatCapacity : 1f;
|
float capacity = coolant instanceof ConsumeLiquidFilter filter ? filter.getConsumed(this).heatCapacity : 1f;
|
||||||
coolant.update(this);
|
coolant.update(this);
|
||||||
reload += coolant.amount * edelta() * capacity * coolantMultiplier;
|
reloadCounter += coolant.amount * edelta() * capacity * coolantMultiplier;
|
||||||
|
|
||||||
if(Mathf.chance(0.06 * coolant.amount)){
|
if(Mathf.chance(0.06 * coolant.amount)){
|
||||||
coolEffect.at(x + Mathf.range(size * tilesize / 2f), y + Mathf.range(size * tilesize / 2f));
|
coolEffect.at(x + Mathf.range(size * tilesize / 2f), y + Mathf.range(size * tilesize / 2f));
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ public class Turret extends ReloadTurret{
|
|||||||
super.setStats();
|
super.setStats();
|
||||||
|
|
||||||
stats.add(Stat.inaccuracy, (int)inaccuracy, StatUnit.degrees);
|
stats.add(Stat.inaccuracy, (int)inaccuracy, StatUnit.degrees);
|
||||||
stats.add(Stat.reload, 60f / (reloadTime) * shoot.shots, StatUnit.perSecond);
|
stats.add(Stat.reload, 60f / (reload) * shoot.shots, StatUnit.perSecond);
|
||||||
stats.add(Stat.targetsAir, targetAir);
|
stats.add(Stat.targetsAir, targetAir);
|
||||||
stats.add(Stat.targetsGround, targetGround);
|
stats.add(Stat.targetsGround, targetGround);
|
||||||
if(ammoPerShot != 1) stats.add(Stat.ammoUse, ammoPerShot, StatUnit.perShot);
|
if(ammoPerShot != 1) stats.add(Stat.ammoUse, ammoPerShot, StatUnit.perShot);
|
||||||
@@ -180,7 +180,7 @@ public class Turret extends ReloadTurret{
|
|||||||
|
|
||||||
public float estimateDps(){
|
public float estimateDps(){
|
||||||
if(!hasAmmo()) return 0f;
|
if(!hasAmmo()) return 0f;
|
||||||
return shoot.shots / reloadTime * 60f * peekAmmo().estimateDPS() * efficiency * timeScale;
|
return shoot.shots / reload * 60f * peekAmmo().estimateDPS() * efficiency * timeScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -252,7 +252,7 @@ public class Turret extends ReloadTurret{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float progress(){
|
public float progress(){
|
||||||
return Mathf.clamp(reload / reloadTime);
|
return Mathf.clamp(reloadCounter / reload);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isShooting(){
|
public boolean isShooting(){
|
||||||
@@ -332,7 +332,7 @@ public class Turret extends ReloadTurret{
|
|||||||
updateReload();
|
updateReload();
|
||||||
|
|
||||||
if(hasAmmo()){
|
if(hasAmmo()){
|
||||||
if(Float.isNaN(reload)) reload = 0;
|
if(Float.isNaN(reloadCounter)) reloadCounter = 0;
|
||||||
|
|
||||||
if(timer(timerTarget, targetInterval)){
|
if(timer(timerTarget, targetInterval)){
|
||||||
findTarget();
|
findTarget();
|
||||||
@@ -451,20 +451,20 @@ public class Turret extends ReloadTurret{
|
|||||||
|
|
||||||
protected void updateReload(){
|
protected void updateReload(){
|
||||||
float multiplier = hasAmmo() ? peekAmmo().reloadMultiplier : 1f;
|
float multiplier = hasAmmo() ? peekAmmo().reloadMultiplier : 1f;
|
||||||
reload += delta() * multiplier * baseReloadSpeed();
|
reloadCounter += delta() * multiplier * baseReloadSpeed();
|
||||||
|
|
||||||
//cap reload for visual reasons
|
//cap reload for visual reasons
|
||||||
reload = Math.min(reload, reloadTime);
|
reloadCounter = Math.min(reloadCounter, reload);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateShooting(){
|
protected void updateShooting(){
|
||||||
|
|
||||||
if(reload >= reloadTime && !charging() && shootWarmup >= minWarmup){
|
if(reloadCounter >= reload && !charging() && shootWarmup >= minWarmup){
|
||||||
BulletType type = peekAmmo();
|
BulletType type = peekAmmo();
|
||||||
|
|
||||||
shoot(type);
|
shoot(type);
|
||||||
|
|
||||||
reload %= reloadTime;
|
reloadCounter %= reload;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -530,7 +530,7 @@ public class Turret extends ReloadTurret{
|
|||||||
@Override
|
@Override
|
||||||
public void write(Writes write){
|
public void write(Writes write){
|
||||||
super.write(write);
|
super.write(write);
|
||||||
write.f(reload);
|
write.f(reloadCounter);
|
||||||
write.f(rotation);
|
write.f(rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -539,7 +539,7 @@ public class Turret extends ReloadTurret{
|
|||||||
super.read(read, revision);
|
super.read(read, revision);
|
||||||
|
|
||||||
if(revision >= 1){
|
if(revision >= 1){
|
||||||
reload = read.f();
|
reloadCounter = read.f();
|
||||||
rotation = read.f();
|
rotation = read.f();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user