Added power booster block
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -41,5 +41,10 @@ public class DistributionBlocks{
|
||||
},
|
||||
liquidjunction = new LiquidJunction("liquidjunction"){
|
||||
|
||||
},
|
||||
powerbooster = new PowerBooster("powerbooster"){
|
||||
{
|
||||
formalName = "power booster";
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user