Added power booster block

This commit is contained in:
Anuken
2017-10-26 22:32:58 -04:00
parent de397a237b
commit 7b413088ab
13 changed files with 89 additions and 50 deletions

View File

@@ -305,7 +305,8 @@ public class Renderer extends RendererModule{
x = tilex*tilesize;
y = tiley*tilesize;
boolean valid = World.validPlace(tilex, tiley, player.recipe.result);
boolean valid = World.validPlace(tilex, tiley, player.recipe.result) && (android ||
Input.cursorNear());
Vector2 offset = player.recipe.result.getPlaceOffset();

View File

@@ -17,6 +17,8 @@ public enum Recipe{
healturret(defense, DefenseBlocks.repairturret, stack(Item.iron, 30)),
megahealturret(defense, DefenseBlocks.megarepairturret, stack(Item.iron, 20), stack(Item.steel, 30)),
titaniumshieldwall(defense, DefenseBlocks.titaniumshieldwall, stack(Item.titanium, 2)),
shieldgenerator(defense, DefenseBlocks.shieldgenerator, stack(Item.titanium, 10), stack(Item.dirium, 10)),
conveyor(distribution, DistributionBlocks.conveyor, stack(Item.stone, 1)),
steelconveyor(distribution, DistributionBlocks.steelconveyor, stack(Item.steel, 1)),
@@ -55,7 +57,7 @@ public enum Recipe{
thermalgenerator(power, ProductionBlocks.thermalgenerator, stack(Item.titanium, 10), stack(Item.dirium, 10)),
combustiongenerator(power, ProductionBlocks.combustiongenerator, stack(Item.titanium, 10), stack(Item.dirium, 10)),
nuclearreactor(power, ProductionBlocks.nuclearReactor, stack(Item.titanium, 10), stack(Item.dirium, 10)),
shieldgenerator(power, DefenseBlocks.shieldgenerator, stack(Item.titanium, 10), stack(Item.dirium, 10)),
powerbooster(power, DistributionBlocks.powerbooster, stack(Item.titanium, 10), stack(Item.dirium, 10)),
pump(production, ProductionBlocks.pump, stack(Item.steel, 10));

View File

@@ -41,5 +41,10 @@ public class DistributionBlocks{
},
liquidjunction = new LiquidJunction("liquidjunction"){
},
powerbooster = new PowerBooster("powerbooster"){
{
formalName = "power booster";
}
};
}

View File

@@ -65,8 +65,19 @@ public class BlockPart extends Block implements PowerAcceptor, LiquidAcceptor{
}
}
@Override
public boolean acceptsPower(Tile tile){
Block block = linked(tile);
if(block instanceof PowerAcceptor){
return ((PowerAcceptor)block).acceptsPower(tile.getLinked());
}else{
return false;
}
}
private Block linked(Tile tile){
return tile.getLinked().block();
}
}

View File

@@ -6,4 +6,5 @@ public interface PowerAcceptor{
/**Attempts to add some power to this block; returns the amount of power <i>not</i> accepted.
* To add no power, you would return amount.*/
public float addPower(Tile tile, float amount);
public boolean acceptsPower(Tile tile);
}

View File

@@ -15,6 +15,7 @@ import io.anuke.ucore.util.Mathf;
public abstract class PowerBlock extends Block implements PowerAcceptor{
public float powerCapacity = 10f;
public float voltage = 0.001f;
public PowerBlock(String name) {
super(name);
@@ -47,8 +48,19 @@ public abstract class PowerBlock extends Block implements PowerAcceptor{
return false;
}
@Override
public boolean acceptsPower(Tile tile){
PowerEntity entity = tile.entity();
return entity.power + 0.001f <= powerCapacity;
}
//TODO voltage requirement so blocks need specific voltage
@Override
public float addPower(Tile tile, float amount){
if(amount < voltage){
return amount;
}
PowerEntity entity = tile.entity();
float canAccept = Math.min(powerCapacity - entity.power, amount);

View File

@@ -14,6 +14,7 @@ public class ShieldBlock extends PowerBlock{
public ShieldBlock(String name) {
super(name);
voltage = powerDrain;
}
@Override
@@ -27,7 +28,7 @@ public class ShieldBlock extends PowerBlock{
}
if(entity.power > powerDrain * Timers.delta()){
if(!entity.shield.active){
if(!entity.shield.active && entity.power > powerDrain * Timers.delta() * 10f){
entity.shield.add();
}

View File

@@ -16,11 +16,9 @@ public class PowerBooster extends Generator{
}
@Override
public float addPower(Tile tile, float amount){
public boolean acceptsPower(Tile tile){
PowerEntity entity = tile.entity();
float canAccept = Math.min(powerCapacity - entity.power, amount);
entity.power += canAccept;
return canAccept;
return entity.power + 0.001f <= powerCapacity;
}
}

View File

@@ -51,7 +51,8 @@ public class Generator extends PowerBlock{
if(Vector2.dst(x, y, 0, 0) < powerRange){
Tile dest = World.tile(tile.x + x, tile.y + y);
if(dest != null && dest.block() instanceof PowerAcceptor){
if(dest != null && dest.block() instanceof PowerAcceptor &&
((PowerAcceptor)dest.block()).acceptsPower(dest)){
if(i == 1){
PowerAcceptor block = (PowerAcceptor) dest.block();
@@ -67,15 +68,15 @@ public class Generator extends PowerBlock{
}
}
//TODO better distribution scheme
if(i == 0 && acceptors > 0){
flow = Mathf.clamp(powerSpeed / acceptors, 0f, p.power / acceptors);
flow = Mathf.clamp(p.power / acceptors, 0f, powerSpeed / acceptors);
}
}
}
//don't accept any power
@Override
public float addPower(Tile tile, float amount){
return amount;
public boolean acceptsPower(Tile tile){
return false;
}
}