New rule modifiers
This commit is contained in:
@@ -131,6 +131,17 @@ public class Bullet extends SolidEntity implements DamageTrait, ScaleTrait, Pool
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public float damageMultiplier(){
|
||||
if(owner instanceof Unit){
|
||||
return type.damage * ((Unit) owner).getDamageMultipler();
|
||||
}
|
||||
|
||||
if(owner instanceof Lightning && data instanceof Float){
|
||||
return (Float)data;
|
||||
}
|
||||
return 1f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void absorb(){
|
||||
supressCollision = true;
|
||||
@@ -144,16 +155,7 @@ public class Bullet extends SolidEntity implements DamageTrait, ScaleTrait, Pool
|
||||
|
||||
@Override
|
||||
public float damage(){
|
||||
//todo hacky way to get damage, refactor
|
||||
if(owner instanceof Unit){
|
||||
return type.damage * ((Unit) owner).getDamageMultipler();
|
||||
}
|
||||
|
||||
if(owner instanceof Lightning && data instanceof Float){
|
||||
return (Float)data;
|
||||
}
|
||||
|
||||
return type.damage;
|
||||
return type.damage * damageMultiplier();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -125,7 +125,7 @@ public abstract class BulletType extends Content{
|
||||
}
|
||||
|
||||
if(splashDamageRadius > 0){
|
||||
Damage.damage(b.getTeam(), x, y, splashDamageRadius, splashDamage);
|
||||
Damage.damage(b.getTeam(), x, y, splashDamageRadius, splashDamage * b.damageMultiplier());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -217,7 +217,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
|
||||
|
||||
@Override
|
||||
public float maxHealth(){
|
||||
return type.health;
|
||||
return type.health * Vars.state.rules.unitHealthMultiplier;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -91,6 +91,11 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
|
||||
player.mech = (player.isMobile ? Mechs.starterMobile : Mechs.starterDesktop);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getDamageMultipler(){
|
||||
return status.getDamageMultiplier() * state.rules.playerDamageMultiplier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hitbox(Rectangle rectangle){
|
||||
rectangle.setSize(mech.hitsize).setCenter(x, y);
|
||||
|
||||
@@ -28,6 +28,9 @@ public enum RulePreset{
|
||||
respawnTime = 60 * 10;
|
||||
buildCostMultiplier = 0.5f;
|
||||
buildSpeedMultiplier = 2f;
|
||||
playerDamageMultiplier = 0.5f;
|
||||
unitBuildSpeedMultiplier = 3f;
|
||||
unitHealthMultiplier = 2f;
|
||||
}});
|
||||
|
||||
private final Supplier<Rules> rules;
|
||||
|
||||
@@ -19,6 +19,12 @@ public class Rules{
|
||||
public boolean pvp;
|
||||
/**Whether enemy units drop random items on death.*/
|
||||
public boolean unitDrops;
|
||||
/**How fast unit pads build units.*/
|
||||
public float unitBuildSpeedMultiplier = 1f;
|
||||
/**How much health units start with.*/
|
||||
public float unitHealthMultiplier = 1f;
|
||||
/**How much damage player mechs deal.*/
|
||||
public float playerDamageMultiplier = 1f;
|
||||
/**Multiplier for buildings for the player.*/
|
||||
public float buildCostMultiplier = 1f;
|
||||
/**Multiplier for building speed.*/
|
||||
|
||||
@@ -43,6 +43,9 @@ public class CustomRulesDialog extends FloatingDialog{
|
||||
main.row();
|
||||
number("$rules.buildcostmultiplier", f -> rules.buildCostMultiplier = f, () -> rules.buildCostMultiplier);
|
||||
number("$rules.buildspeedmultiplier", f -> rules.buildSpeedMultiplier = f, () -> rules.buildSpeedMultiplier);
|
||||
number("$rules.unitbuildspeedmultiplier", f -> rules.unitBuildSpeedMultiplier = f, () -> rules.unitBuildSpeedMultiplier);
|
||||
number("$rules.unithealthmultiplier", f -> rules.unitHealthMultiplier = f, () -> rules.unitHealthMultiplier);
|
||||
number("$rules.playerdamagemultiplier", f -> rules.playerDamageMultiplier = f, () -> rules.playerDamageMultiplier);
|
||||
number("$rules.enemycorebuildradius", f -> rules.enemyCoreBuildRadius = f*tilesize, () -> Math.min(rules.enemyCoreBuildRadius/tilesize, 200));
|
||||
number("$rules.respawntime", f -> rules.respawnTime = f*60f, () -> rules.respawnTime/60f);
|
||||
number("$rules.wavespacing", f -> rules.waveSpacing = f*60f, () -> rules.waveSpacing/60f);
|
||||
|
||||
@@ -31,7 +31,7 @@ import io.anuke.mindustry.world.Tile;
|
||||
import static io.anuke.mindustry.Vars.*;
|
||||
|
||||
public class BlockInventoryFragment extends Fragment{
|
||||
private final static float holdWithdraw = 40f;
|
||||
private final static float holdWithdraw = 20f;
|
||||
|
||||
private Table table;
|
||||
private Tile tile;
|
||||
|
||||
@@ -176,8 +176,8 @@ public class UnitFactory extends Block{
|
||||
if(!tile.isEnemyCheat()){
|
||||
//player-made spawners have default behavior
|
||||
if(entity.cons.valid()){
|
||||
entity.time += entity.delta() * entity.speedScl;
|
||||
entity.buildTime += entity.delta() * entity.power.satisfaction;
|
||||
entity.time += entity.delta() * entity.speedScl * Vars.state.rules.unitBuildSpeedMultiplier;
|
||||
entity.buildTime += entity.delta() * entity.power.satisfaction * Vars.state.rules.unitBuildSpeedMultiplier;
|
||||
entity.speedScl = Mathf.lerpDelta(entity.speedScl, 1f, 0.05f);
|
||||
}else{
|
||||
entity.speedScl = Mathf.lerpDelta(entity.speedScl, 0f, 0.05f);
|
||||
|
||||
Reference in New Issue
Block a user