Multipress sprite / Shields re-added

This commit is contained in:
Anuken
2019-02-02 22:33:12 -05:00
parent 203612853b
commit f5028a4937
12 changed files with 1374 additions and 1306 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 507 B

After

Width:  |  Height:  |  Size: 509 B

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

@@ -317,7 +317,7 @@ public class Blocks implements ContentList{
craftEffect = Fx.pulverizeMedium; craftEffect = Fx.pulverizeMedium;
output = Items.graphite; output = Items.graphite;
craftTime = 30f; craftTime = 30f;
size = 2; size = 3;
hasItems = true; hasItems = true;
hasLiquids = true; hasLiquids = true;
hasPower = true; hasPower = true;
@@ -811,7 +811,7 @@ public class Blocks implements ContentList{
requirements(Category.power, ItemStack.with(Items.titanium, 15, Items.lead, 20, Items.silicon, 30, Items.surgealloy, 10)); requirements(Category.power, ItemStack.with(Items.titanium, 15, Items.lead, 20, Items.silicon, 30, Items.surgealloy, 10));
size = 2; size = 2;
maxNodes = 2; maxNodes = 2;
laserRange = 40f; laserRange = 30f;
}}; }};
battery = new Battery("battery"){{ battery = new Battery("battery"){{
@@ -884,9 +884,13 @@ public class Blocks implements ContentList{
consumes.liquid(Liquids.cryofluid, maxLiquidUse); consumes.liquid(Liquids.cryofluid, maxLiquidUse);
}}; }};
fusionReactor = new FusionReactor("fusion-reactor"){{ fusionReactor = new ImpactGenerator("fusion-reactor"){{
requirements(Category.power, ItemStack.with(Items.lead, 800, Items.silicon, 600, Items.graphite, 600, Items.thorium, 200, Items.surgealloy, 400, Items.metaglass, 200));
size = 4; size = 4;
health = 600; health = 900;
powerProduction = 70f;
//consumes.power(20f);
consumes.liquid(Liquids.water, 0.5f);
}}; }};
//endregion power //endregion power
+27 -15
View File
@@ -2,12 +2,6 @@ package io.anuke.mindustry.core;
import io.anuke.arc.ApplicationListener; import io.anuke.arc.ApplicationListener;
import io.anuke.arc.Core; import io.anuke.arc.Core;
import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.EntityDraw;
import io.anuke.mindustry.entities.EntityGroup;
import io.anuke.mindustry.entities.impl.EffectEntity;
import io.anuke.mindustry.entities.traits.DrawTrait;
import io.anuke.mindustry.entities.traits.Entity;
import io.anuke.arc.function.Consumer; import io.anuke.arc.function.Consumer;
import io.anuke.arc.function.Predicate; import io.anuke.arc.function.Predicate;
import io.anuke.arc.graphics.Camera; import io.anuke.arc.graphics.Camera;
@@ -15,6 +9,7 @@ import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.Lines; import io.anuke.arc.graphics.g2d.Lines;
import io.anuke.arc.graphics.g2d.SpriteBatch; import io.anuke.arc.graphics.g2d.SpriteBatch;
import io.anuke.arc.graphics.glutils.FrameBuffer;
import io.anuke.arc.math.Mathf; import io.anuke.arc.math.Mathf;
import io.anuke.arc.math.geom.Rectangle; import io.anuke.arc.math.geom.Rectangle;
import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.math.geom.Vector2;
@@ -23,15 +18,22 @@ import io.anuke.arc.util.Time;
import io.anuke.arc.util.pooling.Pools; import io.anuke.arc.util.pooling.Pools;
import io.anuke.mindustry.content.Fx; import io.anuke.mindustry.content.Fx;
import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.EntityDraw;
import io.anuke.mindustry.entities.EntityGroup;
import io.anuke.mindustry.entities.effect.GroundEffectEntity;
import io.anuke.mindustry.entities.effect.GroundEffectEntity.GroundEffect;
import io.anuke.mindustry.entities.impl.EffectEntity;
import io.anuke.mindustry.entities.traits.BelowLiquidTrait;
import io.anuke.mindustry.entities.traits.DrawTrait;
import io.anuke.mindustry.entities.traits.Entity;
import io.anuke.mindustry.entities.type.BaseUnit;
import io.anuke.mindustry.entities.type.Player; import io.anuke.mindustry.entities.type.Player;
import io.anuke.mindustry.entities.type.TileEntity; import io.anuke.mindustry.entities.type.TileEntity;
import io.anuke.mindustry.entities.type.Unit; import io.anuke.mindustry.entities.type.Unit;
import io.anuke.mindustry.entities.effect.GroundEffectEntity;
import io.anuke.mindustry.entities.effect.GroundEffectEntity.GroundEffect;
import io.anuke.mindustry.entities.traits.BelowLiquidTrait;
import io.anuke.mindustry.entities.type.BaseUnit;
import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.graphics.*;
import io.anuke.mindustry.world.blocks.defense.ForceProjector.ShieldEntity;
import static io.anuke.arc.Core.*; import static io.anuke.arc.Core.*;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
@@ -41,6 +43,7 @@ public class Renderer implements ApplicationListener{
public final MinimapRenderer minimap = new MinimapRenderer(); public final MinimapRenderer minimap = new MinimapRenderer();
public final OverlayRenderer overlays = new OverlayRenderer(); public final OverlayRenderer overlays = new OverlayRenderer();
private FrameBuffer shieldBuffer = new FrameBuffer(2, 2);
private Color clearColor; private Color clearColor;
private float targetscale = io.anuke.arc.scene.ui.layout.Unit.dp.scl(4); private float targetscale = io.anuke.arc.scene.ui.layout.Unit.dp.scl(4);
private float camerascale = targetscale; private float camerascale = targetscale;
@@ -198,16 +201,25 @@ public class Renderer implements ApplicationListener{
drawAndInterpolate(playerGroup, p -> true, Player::drawBuildRequests); drawAndInterpolate(playerGroup, p -> true, Player::drawBuildRequests);
//TODO shield //TODO shield
/*
if(shieldGroup.size() > 0){ if(EntityDraw.countInBounds(shieldGroup) > 0){
Graphics.beginShaders(Shaders.shield); if(graphics.getWidth() >= 2 && graphics.getHeight() >= 2 && (shieldBuffer.getWidth() != graphics.getWidth() || shieldBuffer.getHeight() != graphics.getHeight())){
shieldBuffer.resize(graphics.getWidth(), graphics.getHeight());
}
Draw.flush();
shieldBuffer.begin();
graphics.clear(Color.CLEAR);
EntityDraw.draw(shieldGroup); EntityDraw.draw(shieldGroup);
EntityDraw.drawWith(shieldGroup, shield -> true, shield -> ((ShieldEntity)shield).drawOver()); EntityDraw.drawWith(shieldGroup, shield -> true, shield -> ((ShieldEntity)shield).drawOver());
Draw.flush();
shieldBuffer.end();
Draw.shader(Shaders.shield);
Draw.color(Palette.accent); Draw.color(Palette.accent);
Graphics.endShaders(); Draw.rect(Draw.wrap(shieldBuffer.getTexture()), camera.position.x, camera.position.y, camera.width, -camera.height);
Draw.color(); Draw.color();
Draw.shader();
} }
*/
overlays.drawTop(); overlays.drawTop();
@@ -11,11 +11,18 @@ public class EntityDraw{
private static final Rectangle viewport = new Rectangle(); private static final Rectangle viewport = new Rectangle();
private static final Rectangle rect = new Rectangle(); private static final Rectangle rect = new Rectangle();
private static boolean clip = true; private static boolean clip = true;
private static int count = 0;
public static void setClip(boolean clip){ public static void setClip(boolean clip){
EntityDraw.clip = clip; EntityDraw.clip = clip;
} }
public static int countInBounds(EntityGroup<?> group){
count = 0;
drawWith(group, e -> true, e -> count++);
return count;
}
public static void draw(){ public static void draw(){
draw(Entities.defaultGroup()); draw(Entities.defaultGroup());
} }
+2 -7
View File
@@ -500,13 +500,8 @@ public class Block extends BlockStorage{
bars.row(); bars.row();
} }
if(entity.power != null && consumes.has(ConsumePower.class) && consumes.get(ConsumePower.class).isBuffered){ if(entity.power != null && consumes.has(ConsumePower.class)){
bars.add(new Bar("blocks.power", Palette.power, () -> entity.power.satisfaction)).growX(); bars.add(new Bar(consumes.get(ConsumePower.class).isBuffered ? "blocks.power" : "blocks.power.satisfaction", Palette.power, () -> entity.power.satisfaction)).growX();
bars.row();
}
if(entity.power != null && consumes.has(ConsumePower.class) && !consumes.get(ConsumePower.class).isBuffered){
bars.add(new Bar("blocks.power.satisfaction", Palette.power, () -> entity.power.satisfaction)).growX();
bars.row(); bars.row();
} }
} }
@@ -28,22 +28,20 @@ public class FusionReactor extends PowerGenerator{
powerProduction = 2.0f; powerProduction = 2.0f;
liquidCapacity = 30f; liquidCapacity = 30f;
hasItems = true; hasItems = true;
outputsPower = consumesPower = true;
} }
@Override @Override
public void update(Tile tile){ public void update(Tile tile){
FusionReactorEntity entity = tile.entity(); FusionReactorEntity entity = tile.entity();
float increaseOrDecrease = 1.0f;
if(entity.cons.valid()){ if(entity.cons.valid()){
entity.warmup = Mathf.lerpDelta(entity.warmup, 1f, warmupSpeed); entity.warmup = Mathf.lerpDelta(entity.warmup, 1f, warmupSpeed);
}else{ }else{
entity.warmup = Mathf.lerpDelta(entity.warmup, 0f, 0.01f); entity.warmup = Mathf.lerpDelta(entity.warmup, 0f, 0.01f);
increaseOrDecrease = -1.0f;
} }
float efficiencyAdded = Mathf.pow(entity.warmup, 4f) * Time.delta(); entity.productionEfficiency = Mathf.pow(entity.warmup, 5f);
entity.productionEfficiency = Mathf.clamp(entity.productionEfficiency + efficiencyAdded * increaseOrDecrease);
super.update(tile); super.update(tile);
} }
@@ -0,0 +1,24 @@
package io.anuke.mindustry.world.blocks.power;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.Liquid;
public class ImpactGenerator extends TurbineGenerator{
public ImpactGenerator(String name){
super(name);
minItemEfficiency = 0.5f;
minLiquidEfficiency = 0.5f;
randomlyExplode = false;
}
@Override
protected float getItemEfficiency(Item item){
return item.explosiveness;
}
@Override
protected float getLiquidEfficiency(Liquid liquid){
return liquid.explosiveness;
}
}
@@ -36,6 +36,7 @@ public class ItemLiquidGenerator extends PowerGenerator{
protected Effects.Effect explodeEffect = Fx.generatespark; protected Effects.Effect explodeEffect = Fx.generatespark;
protected Color heatColor = Color.valueOf("ff9b59"); protected Color heatColor = Color.valueOf("ff9b59");
protected TextureRegion topRegion; protected TextureRegion topRegion;
protected boolean randomlyExplode = false;
public ItemLiquidGenerator(boolean hasItems, boolean hasLiquids, String name){ public ItemLiquidGenerator(boolean hasItems, boolean hasLiquids, String name){
super(name); super(name);
@@ -107,9 +108,9 @@ public class ItemLiquidGenerator extends PowerGenerator{
if(entity.generateTime > 0f){ if(entity.generateTime > 0f){
entity.generateTime -= Math.min(1f / itemDuration * entity.delta(), entity.generateTime); entity.generateTime -= Math.min(1f / itemDuration * entity.delta(), entity.generateTime);
if(Mathf.chance(entity.delta() * 0.06 * Mathf.clamp(entity.explosiveness - 0.5f))){ if(randomlyExplode && Mathf.chance(entity.delta() * 0.06 * Mathf.clamp(entity.explosiveness - 0.5f))){
//this block is run last so that in the event of a block destruction, no code relies on the block type //this block is run last so that in the event of a block destruction, no code relies on the block type
entity.damage(Mathf.random(8f)); entity.damage(Mathf.random(11f));
Effects.effect(explodeEffect, tile.worldx() + Mathf.range(size * tilesize / 2f), tile.worldy() + Mathf.range(size * tilesize / 2f)); Effects.effect(explodeEffect, tile.worldx() + Mathf.range(size * tilesize / 2f), tile.worldy() + Mathf.range(size * tilesize / 2f));
} }
}else{ }else{
@@ -198,8 +198,7 @@ public class PowerNode extends PowerBlock{
for(int i = 0; i < entity.power.links.size; i++){ for(int i = 0; i < entity.power.links.size; i++){
Tile link = world.tile(entity.power.links.get(i)); Tile link = world.tile(entity.power.links.get(i));
if(linkValid(tile, link) && (!(link.block() instanceof PowerNode) if(linkValid(tile, link)){
|| ((tile.block().size > link.block().size) || (tile.block().size == link.block().size && tile.pos() < link.pos())))){
drawLaser(tile, link); drawLaser(tile, link);
} }
} }