Better block health scaling system
|
Before Width: | Height: | Size: 833 B After Width: | Height: | Size: 940 B |
|
Before Width: | Height: | Size: 417 B After Width: | Height: | Size: 414 B |
|
Before Width: | Height: | Size: 423 B After Width: | Height: | Size: 420 B |
|
Before Width: | Height: | Size: 330 B After Width: | Height: | Size: 327 B |
|
Before Width: | Height: | Size: 340 B After Width: | Height: | Size: 338 B |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 542 B After Width: | Height: | Size: 540 B |
|
Before Width: | Height: | Size: 550 B After Width: | Height: | Size: 544 B |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -134,7 +134,6 @@ public class Blocks{
|
|||||||
basicAssemblerModule,
|
basicAssemblerModule,
|
||||||
|
|
||||||
//payloads
|
//payloads
|
||||||
//TODO small deconstructor
|
|
||||||
payloadConveyor, payloadRouter, payloadPropulsionTower, smallDeconstructor, deconstructor, constructor, largeConstructor, payloadLoader, payloadUnloader,
|
payloadConveyor, payloadRouter, payloadPropulsionTower, smallDeconstructor, deconstructor, constructor, largeConstructor, payloadLoader, payloadUnloader,
|
||||||
|
|
||||||
//logic
|
//logic
|
||||||
@@ -1492,7 +1491,7 @@ public class Blocks{
|
|||||||
range = 85f;
|
range = 85f;
|
||||||
healPercent = 11f;
|
healPercent = 11f;
|
||||||
phaseBoost = 15f;
|
phaseBoost = 15f;
|
||||||
health = 80 * size * size;
|
scaledHealth = 80;
|
||||||
consumes.item(Items.phaseFabric).boost();
|
consumes.item(Items.phaseFabric).boost();
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -2406,14 +2405,14 @@ public class Blocks{
|
|||||||
requirements(Category.effect, with(Items.titanium, 100));
|
requirements(Category.effect, with(Items.titanium, 100));
|
||||||
size = 2;
|
size = 2;
|
||||||
itemCapacity = 300;
|
itemCapacity = 300;
|
||||||
health = size * size * 55;
|
scaledHealth = 55;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
vault = new StorageBlock("vault"){{
|
vault = new StorageBlock("vault"){{
|
||||||
requirements(Category.effect, with(Items.titanium, 250, Items.thorium, 125));
|
requirements(Category.effect, with(Items.titanium, 250, Items.thorium, 125));
|
||||||
size = 3;
|
size = 3;
|
||||||
itemCapacity = 1000;
|
itemCapacity = 1000;
|
||||||
health = size * size * 55;
|
scaledHealth = 55;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
//TODO move tabs?
|
//TODO move tabs?
|
||||||
@@ -2428,14 +2427,14 @@ public class Blocks{
|
|||||||
size = 3;
|
size = 3;
|
||||||
//TODO should it really be kept the same, at 1000?
|
//TODO should it really be kept the same, at 1000?
|
||||||
itemCapacity = 1200;
|
itemCapacity = 1200;
|
||||||
health = size * size * 120;
|
scaledHealth = 120;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
reinforcedVault = new StorageBlock("reinforced-vault"){{
|
reinforcedVault = new StorageBlock("reinforced-vault"){{
|
||||||
requirements(Category.effect, with(Items.tungsten, 250, Items.carbide, 125));
|
requirements(Category.effect, with(Items.tungsten, 250, Items.carbide, 125));
|
||||||
size = 4;
|
size = 4;
|
||||||
itemCapacity = 2500;
|
itemCapacity = 2500;
|
||||||
health = size * size * 120;
|
scaledHealth = 120;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
@@ -2484,7 +2483,7 @@ public class Blocks{
|
|||||||
inaccuracy = 17f;
|
inaccuracy = 17f;
|
||||||
shootCone = 35f;
|
shootCone = 35f;
|
||||||
|
|
||||||
health = 200 * size * size;
|
scaledHealth = 200;
|
||||||
shootSound = Sounds.shootSnap;
|
shootSound = Sounds.shootSnap;
|
||||||
|
|
||||||
limitRange(2);
|
limitRange(2);
|
||||||
@@ -2541,7 +2540,7 @@ public class Blocks{
|
|||||||
liquidCapacity = 10f;
|
liquidCapacity = 10f;
|
||||||
shootEffect = Fx.shootLiquid;
|
shootEffect = Fx.shootLiquid;
|
||||||
range = 110f;
|
range = 110f;
|
||||||
health = 250 * size * size;
|
scaledHealth = 250;
|
||||||
flags = EnumSet.of(BlockFlag.turret, BlockFlag.extinguisher);
|
flags = EnumSet.of(BlockFlag.turret, BlockFlag.extinguisher);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -2562,7 +2561,7 @@ public class Blocks{
|
|||||||
chargeBeginEffect = Fx.lancerLaserChargeBegin;
|
chargeBeginEffect = Fx.lancerLaserChargeBegin;
|
||||||
heatColor = Color.red;
|
heatColor = Color.red;
|
||||||
size = 2;
|
size = 2;
|
||||||
health = 280 * size * size;
|
scaledHealth = 280;
|
||||||
targetAir = false;
|
targetAir = false;
|
||||||
shootSound = Sounds.laser;
|
shootSound = Sounds.laser;
|
||||||
|
|
||||||
@@ -2609,7 +2608,7 @@ public class Blocks{
|
|||||||
scaledForce = 6f;
|
scaledForce = 6f;
|
||||||
range = 240f;
|
range = 240f;
|
||||||
damage = 0.3f;
|
damage = 0.3f;
|
||||||
health = 160 * size * size;
|
scaledHealth = 160;
|
||||||
rotateSpeed = 10;
|
rotateSpeed = 10;
|
||||||
|
|
||||||
consumes.powerCond(3f, (TractorBeamBuild e) -> e.target != null);
|
consumes.powerCond(3f, (TractorBeamBuild e) -> e.target != null);
|
||||||
@@ -2629,7 +2628,7 @@ public class Blocks{
|
|||||||
range = 240f;
|
range = 240f;
|
||||||
xRand = 6f;
|
xRand = 6f;
|
||||||
size = 2;
|
size = 2;
|
||||||
health = 300 * size * size;
|
scaledHealth = 300;
|
||||||
shootSound = Sounds.missile;
|
shootSound = Sounds.missile;
|
||||||
|
|
||||||
limitRange(5f);
|
limitRange(5f);
|
||||||
@@ -2657,7 +2656,7 @@ public class Blocks{
|
|||||||
spread = 0f;
|
spread = 0f;
|
||||||
shots = 4;
|
shots = 4;
|
||||||
ammoUseEffect = Fx.casing2;
|
ammoUseEffect = Fx.casing2;
|
||||||
health = 240 * size * size;
|
scaledHealth = 240;
|
||||||
shootSound = Sounds.shootBig;
|
shootSound = Sounds.shootBig;
|
||||||
|
|
||||||
limitRange();
|
limitRange();
|
||||||
@@ -2666,7 +2665,7 @@ public class Blocks{
|
|||||||
segment = new PointDefenseTurret("segment"){{
|
segment = new PointDefenseTurret("segment"){{
|
||||||
requirements(Category.turret, with(Items.silicon, 130, Items.thorium, 80, Items.phaseFabric, 40, Items.titanium, 40));
|
requirements(Category.turret, with(Items.silicon, 130, Items.thorium, 80, Items.phaseFabric, 40, Items.titanium, 40));
|
||||||
|
|
||||||
health = 250 * size * size;
|
scaledHealth = 250;
|
||||||
range = 180f;
|
range = 180f;
|
||||||
hasPower = true;
|
hasPower = true;
|
||||||
consumes.powerCond(8f, (PointDefenseBuild b) -> b.target != null);
|
consumes.powerCond(8f, (PointDefenseBuild b) -> b.target != null);
|
||||||
@@ -2695,7 +2694,7 @@ public class Blocks{
|
|||||||
liquidCapacity = 40f;
|
liquidCapacity = 40f;
|
||||||
shootEffect = Fx.shootLiquid;
|
shootEffect = Fx.shootLiquid;
|
||||||
range = 190f;
|
range = 190f;
|
||||||
health = 250 * size * size;
|
scaledHealth = 250;
|
||||||
flags = EnumSet.of(BlockFlag.turret, BlockFlag.extinguisher);
|
flags = EnumSet.of(BlockFlag.turret, BlockFlag.extinguisher);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -2712,7 +2711,7 @@ public class Blocks{
|
|||||||
shootCone = 30;
|
shootCone = 30;
|
||||||
size = 3;
|
size = 3;
|
||||||
|
|
||||||
health = 220 * size * size;
|
scaledHealth = 220;
|
||||||
shootSound = Sounds.shotgun;
|
shootSound = Sounds.shotgun;
|
||||||
|
|
||||||
float brange = range + 10f;
|
float brange = range + 10f;
|
||||||
@@ -2761,7 +2760,7 @@ public class Blocks{
|
|||||||
range = 290f;
|
range = 290f;
|
||||||
minRange = 50f;
|
minRange = 50f;
|
||||||
|
|
||||||
health = 130 * size * size;
|
scaledHealth = 130;
|
||||||
shootSound = Sounds.artillery;
|
shootSound = Sounds.artillery;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -2783,7 +2782,7 @@ public class Blocks{
|
|||||||
shootCone = 30f;
|
shootCone = 30f;
|
||||||
shootSound = Sounds.shootSnap;
|
shootSound = Sounds.shootSnap;
|
||||||
|
|
||||||
health = 145 * size * size;
|
scaledHealth = 145;
|
||||||
limitRange();
|
limitRange();
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -2824,7 +2823,7 @@ public class Blocks{
|
|||||||
|
|
||||||
coolantMultiplier = 0.4f;
|
coolantMultiplier = 0.4f;
|
||||||
|
|
||||||
health = 150 * size * size;
|
scaledHealth = 150;
|
||||||
coolantUsage = 1f;
|
coolantUsage = 1f;
|
||||||
|
|
||||||
consumes.powerCond(10f, TurretBuild::isActive);
|
consumes.powerCond(10f, TurretBuild::isActive);
|
||||||
@@ -2852,7 +2851,7 @@ public class Blocks{
|
|||||||
shootCone = 24f;
|
shootCone = 24f;
|
||||||
shootSound = Sounds.shootBig;
|
shootSound = Sounds.shootBig;
|
||||||
|
|
||||||
health = 160 * size * size;
|
scaledHealth = 160;
|
||||||
coolantUsage = 1f;
|
coolantUsage = 1f;
|
||||||
|
|
||||||
limitRange();
|
limitRange();
|
||||||
@@ -2887,7 +2886,7 @@ public class Blocks{
|
|||||||
ammoMultiplier = 1f;
|
ammoMultiplier = 1f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
health = 200 * size * size;
|
scaledHealth = 200;
|
||||||
consumes.add(new ConsumeCoolant(0.5f)).update(false);
|
consumes.add(new ConsumeCoolant(0.5f)).update(false);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -2943,7 +2942,7 @@ public class Blocks{
|
|||||||
restitution = 0.03f;
|
restitution = 0.03f;
|
||||||
range = 190;
|
range = 190;
|
||||||
shootCone = 3f;
|
shootCone = 3f;
|
||||||
health = 360 * size * size;
|
scaledHealth = 280;
|
||||||
rotateSpeed = 1.6f;
|
rotateSpeed = 1.6f;
|
||||||
|
|
||||||
limitRange();
|
limitRange();
|
||||||
@@ -2952,7 +2951,7 @@ public class Blocks{
|
|||||||
//TODO bad name
|
//TODO bad name
|
||||||
sublimate = new ContinuousTurret("sublimate"){{
|
sublimate = new ContinuousTurret("sublimate"){{
|
||||||
//TODO requirements
|
//TODO requirements
|
||||||
requirements(Category.turret, with(Items.tungsten, 50, Items.silicon, 60, Items.oxide, 30, Items.carbide, 40));
|
requirements(Category.turret, with(Items.tungsten, 120, Items.silicon, 160, Items.oxide, 50));
|
||||||
|
|
||||||
draw = new DrawTurret("reinforced-"){{
|
draw = new DrawTurret("reinforced-"){{
|
||||||
liquidDraw = Liquids.ozone;
|
liquidDraw = Liquids.ozone;
|
||||||
@@ -2988,15 +2987,17 @@ public class Blocks{
|
|||||||
}};
|
}};
|
||||||
outlineColor = Pal.darkOutline;
|
outlineColor = Pal.darkOutline;
|
||||||
|
|
||||||
|
//TODO also consume hydrogen as a different ammo
|
||||||
consumes.liquids(LiquidStack.with(Liquids.cyanogen, 3f / 60f, Liquids.ozone, 2f / 60f));
|
consumes.liquids(LiquidStack.with(Liquids.cyanogen, 3f / 60f, Liquids.ozone, 2f / 60f));
|
||||||
|
|
||||||
range = 170f;
|
range = 170f;
|
||||||
|
|
||||||
//TODO multi ammo
|
|
||||||
shootType = new ContinuousFlameBulletType(){{
|
shootType = new ContinuousFlameBulletType(){{
|
||||||
damage = 4f;
|
damage = 5f;
|
||||||
length = range;
|
length = range;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
scaledHealth = 320;
|
||||||
shootLength = 7f;
|
shootLength = 7f;
|
||||||
size = 3;
|
size = 3;
|
||||||
}};
|
}};
|
||||||
@@ -3006,15 +3007,15 @@ public class Blocks{
|
|||||||
|
|
||||||
ammo(
|
ammo(
|
||||||
//TODO 1 more ammo type, decide on base type
|
//TODO 1 more ammo type, decide on base type
|
||||||
Items.fissileMatter, new ArtilleryBulletType(2.5f, 60, "shell"){{
|
Items.fissileMatter, new ArtilleryBulletType(2.5f, 100, "shell"){{
|
||||||
hitEffect = new MultiEffect(Fx.titanExplosion, Fx.titanSmoke);
|
hitEffect = new MultiEffect(Fx.titanExplosion, Fx.titanSmoke);
|
||||||
despawnEffect = Fx.none;
|
despawnEffect = Fx.none;
|
||||||
knockback = 2f;
|
knockback = 2f;
|
||||||
lifetime = 140f;
|
lifetime = 140f;
|
||||||
height = 17f;
|
height = 19f;
|
||||||
width = 16f;
|
width = 17f;
|
||||||
splashDamageRadius = 65f;
|
splashDamageRadius = 65f;
|
||||||
splashDamage = 150f;
|
splashDamage = 250f;
|
||||||
backColor = hitColor = trailColor = Color.valueOf("ea8878").lerp(Color.valueOf("feb380"), 0.5f);
|
backColor = hitColor = trailColor = Color.valueOf("ea8878").lerp(Color.valueOf("feb380"), 0.5f);
|
||||||
frontColor = Color.white;
|
frontColor = Color.white;
|
||||||
ammoMultiplier = 1f;
|
ammoMultiplier = 1f;
|
||||||
@@ -3022,9 +3023,9 @@ public class Blocks{
|
|||||||
status = StatusEffects.blasted;
|
status = StatusEffects.blasted;
|
||||||
|
|
||||||
trailLength = 32;
|
trailLength = 32;
|
||||||
trailWidth = 2.85f;
|
trailWidth = 3.35f;
|
||||||
trailSinScl = 2.5f;
|
trailSinScl = 2.5f;
|
||||||
trailSinMag = 1f;
|
trailSinMag = 0.5f;
|
||||||
trailEffect = Fx.none;
|
trailEffect = Fx.none;
|
||||||
despawnShake = 7f;
|
despawnShake = 7f;
|
||||||
|
|
||||||
@@ -3040,7 +3041,7 @@ public class Blocks{
|
|||||||
targetAir = false;
|
targetAir = false;
|
||||||
shootShake = 4f;
|
shootShake = 4f;
|
||||||
recoilAmount = 1f;
|
recoilAmount = 1f;
|
||||||
reloadTime = 60f * 2f;
|
reloadTime = 60f * 3f;
|
||||||
shootLength = 7f;
|
shootLength = 7f;
|
||||||
rotateSpeed = 2.5f;
|
rotateSpeed = 2.5f;
|
||||||
|
|
||||||
@@ -3073,6 +3074,7 @@ public class Blocks{
|
|||||||
|
|
||||||
consumes.liquids(LiquidStack.with(Liquids.hydrogen, 2f / 60f));
|
consumes.liquids(LiquidStack.with(Liquids.hydrogen, 2f / 60f));
|
||||||
|
|
||||||
|
scaledHealth = 300;
|
||||||
range = 390f;
|
range = 390f;
|
||||||
size = 4;
|
size = 4;
|
||||||
}};
|
}};
|
||||||
@@ -3083,7 +3085,7 @@ public class Blocks{
|
|||||||
commandCenter = new CommandCenter("command-center"){{
|
commandCenter = new CommandCenter("command-center"){{
|
||||||
requirements(Category.units, ItemStack.with(Items.copper, 200, Items.lead, 250, Items.silicon, 250, Items.graphite, 100));
|
requirements(Category.units, ItemStack.with(Items.copper, 200, Items.lead, 250, Items.silicon, 250, Items.graphite, 100));
|
||||||
size = 2;
|
size = 2;
|
||||||
health = size * size * 55;
|
scaledHealth = 55;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
groundFactory = new UnitFactory("ground-factory"){{
|
groundFactory = new UnitFactory("ground-factory"){{
|
||||||
@@ -3411,7 +3413,7 @@ public class Blocks{
|
|||||||
hasPower = true;
|
hasPower = true;
|
||||||
consumes.power(10f);
|
consumes.power(10f);
|
||||||
buildCostMultiplier = 0.5f;
|
buildCostMultiplier = 0.5f;
|
||||||
health = size * size * 80;
|
scaledHealth = 80;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
//endregion campaign
|
//endregion campaign
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ public class Items{
|
|||||||
hardness = 4;
|
hardness = 4;
|
||||||
radioactivity = 1f;
|
radioactivity = 1f;
|
||||||
cost = 1.1f;
|
cost = 1.1f;
|
||||||
|
healthScaling = 0.2f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
scrap = new Item("scrap", Color.valueOf("777777")){{
|
scrap = new Item("scrap", Color.valueOf("777777")){{
|
||||||
@@ -65,16 +66,19 @@ public class Items{
|
|||||||
flammability = 0.1f;
|
flammability = 0.1f;
|
||||||
explosiveness = 0.2f;
|
explosiveness = 0.2f;
|
||||||
cost = 1.3f;
|
cost = 1.3f;
|
||||||
|
healthScaling = 0.1f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
phaseFabric = new Item("phase-fabric", Color.valueOf("f4ba6e")){{
|
phaseFabric = new Item("phase-fabric", Color.valueOf("f4ba6e")){{
|
||||||
cost = 1.3f;
|
cost = 1.3f;
|
||||||
radioactivity = 0.6f;
|
radioactivity = 0.6f;
|
||||||
|
healthScaling = 0.25f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
surgeAlloy = new Item("surge-alloy", Color.valueOf("f3e979")){{
|
surgeAlloy = new Item("surge-alloy", Color.valueOf("f3e979")){{
|
||||||
cost = 1.2f;
|
cost = 1.2f;
|
||||||
charge = 0.75f;
|
charge = 0.75f;
|
||||||
|
healthScaling = 0.25f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
sporePod = new Item("spore-pod", Color.valueOf("7457ce")){{
|
sporePod = new Item("spore-pod", Color.valueOf("7457ce")){{
|
||||||
@@ -88,25 +92,29 @@ public class Items{
|
|||||||
|
|
||||||
pyratite = new Item("pyratite", Color.valueOf("ffaa5f")){{
|
pyratite = new Item("pyratite", Color.valueOf("ffaa5f")){{
|
||||||
flammability = 1.4f;
|
flammability = 1.4f;
|
||||||
explosiveness = 0.4f;
|
explosiveness = 0.5f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
beryllium = new Item("beryllium", Color.valueOf("3a8f64")){{
|
beryllium = new Item("beryllium", Color.valueOf("3a8f64")){{
|
||||||
hardness = 4;
|
hardness = 4;
|
||||||
cost = 1.3f;
|
cost = 1.3f;
|
||||||
|
healthScaling = 0.6f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
tungsten = new Item("tungsten", Color.valueOf("768a9a")){{
|
tungsten = new Item("tungsten", Color.valueOf("768a9a")){{
|
||||||
hardness = 5;
|
hardness = 5;
|
||||||
cost = 1.5f;
|
cost = 1.5f;
|
||||||
|
healthScaling = 0.8f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
oxide = new Item("oxide", Color.valueOf("e4ffd6")){{
|
oxide = new Item("oxide", Color.valueOf("e4ffd6")){{
|
||||||
cost = 1.1f;
|
cost = 1.2f;
|
||||||
|
healthScaling = 0.5f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
carbide = new Item("carbide", Color.valueOf("89769a")){{
|
carbide = new Item("carbide", Color.valueOf("89769a")){{
|
||||||
cost = 1.3f;
|
cost = 1.6f;
|
||||||
|
healthScaling = 1.1f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
fissileMatter = new Item("fissile-matter", Color.valueOf("5e988d")){{
|
fissileMatter = new Item("fissile-matter", Color.valueOf("5e988d")){{
|
||||||
|
|||||||
@@ -2513,7 +2513,7 @@ public class UnitTypes{
|
|||||||
rotateSpeed = 3.5f;
|
rotateSpeed = 3.5f;
|
||||||
accel = 0.1f;
|
accel = 0.1f;
|
||||||
health = 3000f;
|
health = 3000f;
|
||||||
armor = 4f;
|
armor = 5f;
|
||||||
hitSize = 36f;
|
hitSize = 36f;
|
||||||
payloadCapacity = Mathf.sqr(3f) * tilePayload;
|
payloadCapacity = Mathf.sqr(3f) * tilePayload;
|
||||||
|
|
||||||
@@ -2522,6 +2522,7 @@ public class UnitTypes{
|
|||||||
|
|
||||||
abilities.add(new SuppressionFieldAbility(){{
|
abilities.add(new SuppressionFieldAbility(){{
|
||||||
orbRadius = 5.3f;
|
orbRadius = 5.3f;
|
||||||
|
y = 1f;
|
||||||
}});
|
}});
|
||||||
|
|
||||||
float es = 3.9f;
|
float es = 3.9f;
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ public class SuppressionFieldAbility extends Ability{
|
|||||||
public Color color1 = Pal.sap.cpy().mul(1.6f), color2 = Pal.sap;
|
public Color color1 = Pal.sap.cpy().mul(1.6f), color2 = Pal.sap;
|
||||||
public float layer = Layer.effect;
|
public float layer = Layer.effect;
|
||||||
|
|
||||||
|
public float x = 0f, y = 0f;
|
||||||
public int particles = 15;
|
public int particles = 15;
|
||||||
public float particleSize = 4f;
|
public float particleSize = 4f;
|
||||||
public float particleLen = 7f;
|
public float particleLen = 7f;
|
||||||
@@ -78,12 +79,14 @@ public class SuppressionFieldAbility extends Ability{
|
|||||||
Draw.z(layer);
|
Draw.z(layer);
|
||||||
|
|
||||||
float rad = orbRadius + Mathf.absin(orbSinScl, orbSinMag);
|
float rad = orbRadius + Mathf.absin(orbSinScl, orbSinMag);
|
||||||
|
Tmp.v1.set(x, y).rotate(unit.rotation - 90f);
|
||||||
|
float rx = unit.x + Tmp.v1.x, ry = unit.y + Tmp.v1.y;
|
||||||
|
|
||||||
Draw.color(color2);
|
Draw.color(color2);
|
||||||
Fill.circle(unit.x, unit.y, rad);
|
Fill.circle(rx, ry, rad);
|
||||||
|
|
||||||
Draw.color(color1);
|
Draw.color(color1);
|
||||||
Fill.circle(unit.x, unit.y, rad * orbMidScl);
|
Fill.circle(rx, ry, rad * orbMidScl);
|
||||||
|
|
||||||
float base = (Time.time / particleLife);
|
float base = (Time.time / particleLife);
|
||||||
rand.setSeed(unit.id);
|
rand.setSeed(unit.id);
|
||||||
@@ -93,8 +96,8 @@ public class SuppressionFieldAbility extends Ability{
|
|||||||
float angle = rand.random(360f) + (Time.time / rotateScl + unit.rotation) % 360f;
|
float angle = rand.random(360f) + (Time.time / rotateScl + unit.rotation) % 360f;
|
||||||
float len = particleLen * particleInterp.apply(fout);
|
float len = particleLen * particleInterp.apply(fout);
|
||||||
Fill.circle(
|
Fill.circle(
|
||||||
unit.x + Angles.trnsx(angle, len),
|
rx + Angles.trnsx(angle, len),
|
||||||
unit.y + Angles.trnsy(angle, len),
|
ry + Angles.trnsy(angle, len),
|
||||||
particleSize * Mathf.slope(fin)
|
particleSize * Mathf.slope(fin)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -103,7 +106,7 @@ public class SuppressionFieldAbility extends Ability{
|
|||||||
if(heat > 0.001f){
|
if(heat > 0.001f){
|
||||||
Draw.color(Pal.sapBullet);
|
Draw.color(Pal.sapBullet);
|
||||||
Lines.stroke(1.2f * heat * Mathf.absin(10f, 1f));
|
Lines.stroke(1.2f * heat * Mathf.absin(10f, 1f));
|
||||||
Lines.circle(unit.x, unit.y, range);
|
Lines.circle(rx, ry, range);
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
|
|||||||
@@ -32,7 +32,9 @@ public class Item extends UnlockableContent{
|
|||||||
* 1 cost = 1 tick added to build time
|
* 1 cost = 1 tick added to build time
|
||||||
*/
|
*/
|
||||||
public float cost = 1f;
|
public float cost = 1f;
|
||||||
/** if true, this item is of lowest priority to drills. */
|
/** When this item is present in the build cost, a block's <b>default</b> health is multiplied by 1 + scaling, where 'scaling' is summed together for all item requirement types. */
|
||||||
|
public float healthScaling = 0f;
|
||||||
|
/** if true, this item is of the lowest priority to drills. */
|
||||||
public boolean lowPriority;
|
public boolean lowPriority;
|
||||||
|
|
||||||
/** If >0, this item is animated. */
|
/** If >0, this item is animated. */
|
||||||
|
|||||||
@@ -134,7 +134,9 @@ public class Block extends UnlockableContent{
|
|||||||
public @Nullable Item itemDrop = null;
|
public @Nullable Item itemDrop = null;
|
||||||
/** Array of affinities to certain things. */
|
/** Array of affinities to certain things. */
|
||||||
public Attributes attributes = new Attributes();
|
public Attributes attributes = new Attributes();
|
||||||
/** tile entity health */
|
/** Health per square tile that this block occupies; essentially, this is multiplied by size * size. Overridden if health is > 0. If <0, the default is 40. */
|
||||||
|
public float scaledHealth = -1;
|
||||||
|
/** building health; -1 to use scaledHealth */
|
||||||
public int health = -1;
|
public int health = -1;
|
||||||
/** damage absorption, similar to unit armor */
|
/** damage absorption, similar to unit armor */
|
||||||
public float armor = 0f;
|
public float armor = 0f;
|
||||||
@@ -914,7 +916,25 @@ public class Block extends UnlockableContent{
|
|||||||
public void init(){
|
public void init(){
|
||||||
//initialize default health based on size
|
//initialize default health based on size
|
||||||
if(health == -1){
|
if(health == -1){
|
||||||
health = size * size * 40;
|
boolean round = false;
|
||||||
|
if(scaledHealth < 0){
|
||||||
|
scaledHealth = 40;
|
||||||
|
|
||||||
|
float scaling = 1f;
|
||||||
|
for(var stack : requirements){
|
||||||
|
scaling += stack.item.healthScaling;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(scaling > 1){
|
||||||
|
Log.info("@: @ -> @", name, scaledHealth * size * size, (Mathf.round(scaledHealth * scaling, 5) * size * size));
|
||||||
|
}
|
||||||
|
scaledHealth *= scaling;
|
||||||
|
round = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
health = round ?
|
||||||
|
Mathf.round(size * size * scaledHealth, 5) :
|
||||||
|
(int)(size * size * scaledHealth);
|
||||||
}
|
}
|
||||||
|
|
||||||
clipSize = Math.max(clipSize, size * tilesize);
|
clipSize = Math.max(clipSize, size * tilesize);
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ public class ItemTurret extends Turret{
|
|||||||
for(var entry : ammoTypes.copy().entries()){
|
for(var entry : ammoTypes.copy().entries()){
|
||||||
var copy = entry.value.copy();
|
var copy = entry.value.copy();
|
||||||
float realRange = copy.rangeChange + range;
|
float realRange = copy.rangeChange + range;
|
||||||
|
//doesn't handle drag
|
||||||
copy.lifetime = (realRange + margin) / copy.speed;
|
copy.lifetime = (realRange + margin) / copy.speed;
|
||||||
ammoTypes.put(entry.key, copy);
|
ammoTypes.put(entry.key, copy);
|
||||||
}
|
}
|
||||||
@@ -59,7 +60,8 @@ public class ItemTurret extends Turret{
|
|||||||
@Override
|
@Override
|
||||||
public void build(Building build, Table table){
|
public void build(Building build, Table table){
|
||||||
MultiReqImage image = new MultiReqImage();
|
MultiReqImage image = new MultiReqImage();
|
||||||
content.items().each(i -> filter.get(i) && i.unlockedNow(), item -> image.add(new ReqImage(new ItemImage(item.uiIcon),
|
content.items().each(i -> filter.get(i) && i.unlockedNow(),
|
||||||
|
item -> image.add(new ReqImage(new ItemImage(item.uiIcon),
|
||||||
() -> build instanceof ItemTurretBuild it && !it.ammo.isEmpty() && ((ItemEntry)it.ammo.peek()).item == item)));
|
() -> build instanceof ItemTurretBuild it && !it.ammo.isEmpty() && ((ItemEntry)it.ammo.peek()).item == item)));
|
||||||
|
|
||||||
table.add(image).size(8 * 4);
|
table.add(image).size(8 * 4);
|
||||||
|
|||||||