Fortress builtin map / Attributes / Efficiency stat / Bugfixes
BIN
core/assets-raw/sprites/blocks/environment/spore-moss1.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
core/assets-raw/sprites/blocks/environment/spore-moss2.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
core/assets-raw/sprites/blocks/environment/spore-moss3.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 132 B |
|
Before Width: | Height: | Size: 129 B |
|
Before Width: | Height: | Size: 182 B |
|
Before Width: | Height: | Size: 182 B |
|
Before Width: | Height: | Size: 117 B |
|
Before Width: | Height: | Size: 117 B |
|
Before Width: | Height: | Size: 182 B |
|
Before Width: | Height: | Size: 117 B |
|
Before Width: | Height: | Size: 117 B |
|
Before Width: | Height: | Size: 117 B |
|
Before Width: | Height: | Size: 117 B |
|
Before Width: | Height: | Size: 977 B |
|
Before Width: | Height: | Size: 99 B |
|
Before Width: | Height: | Size: 995 B |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 99 B |
|
Before Width: | Height: | Size: 93 B |
|
Before Width: | Height: | Size: 186 B |
|
Before Width: | Height: | Size: 117 B |
|
Before Width: | Height: | Size: 117 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
@@ -300,7 +300,8 @@ no = No
|
|||||||
info.title = Info
|
info.title = Info
|
||||||
error.title = [crimson]An error has occured
|
error.title = [crimson]An error has occured
|
||||||
error.crashtitle = An error has occured
|
error.crashtitle = An error has occured
|
||||||
blocks.outputspeed = Drill Speed: {0}/s
|
blocks.outputspeed = Drill Speed: {0}/
|
||||||
|
blocks.efficiency = Efficiency: {0}%
|
||||||
blocks.unknown = [LIGHT_GRAY]???
|
blocks.unknown = [LIGHT_GRAY]???
|
||||||
blocks.blockinfo = Block Info
|
blocks.blockinfo = Block Info
|
||||||
blocks.powerbalance = Power: {0}
|
blocks.powerbalance = Power: {0}
|
||||||
@@ -525,6 +526,16 @@ mech.ability = [LIGHT_GRAY]Ability: {0}
|
|||||||
liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0}
|
liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0}
|
||||||
liquid.viscosity = [LIGHT_GRAY]Viscosity: {0}
|
liquid.viscosity = [LIGHT_GRAY]Viscosity: {0}
|
||||||
liquid.temperature = [LIGHT_GRAY]Temperature: {0}
|
liquid.temperature = [LIGHT_GRAY]Temperature: {0}
|
||||||
|
|
||||||
|
block.grass.name = Grass
|
||||||
|
block.salt.name = Salt
|
||||||
|
block.sandrocks.name = Sand Rocks
|
||||||
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.shale.name = Shale
|
||||||
|
block.shale-boulder.name = Shale Boulder
|
||||||
|
block.moss.name = Moss
|
||||||
|
block.spore-moss.name = Spore Moss
|
||||||
|
block.shalerocks.name = Shale Rocks
|
||||||
block.scrap-wall.name = Scrap Wall
|
block.scrap-wall.name = Scrap Wall
|
||||||
block.scrap-wall-large.name = Large Scrap Wall
|
block.scrap-wall-large.name = Large Scrap Wall
|
||||||
block.scrap-wall-huge.name = Huge Scrap Wall
|
block.scrap-wall-huge.name = Huge Scrap Wall
|
||||||
@@ -559,12 +570,6 @@ block.pine.name = Pine
|
|||||||
block.white-tree-dead.name = White Tree Dead
|
block.white-tree-dead.name = White Tree Dead
|
||||||
block.white-tree.name = White Tree
|
block.white-tree.name = White Tree
|
||||||
block.spore-cluster.name = Spore Cluster
|
block.spore-cluster.name = Spore Cluster
|
||||||
block.stained-rocks.name = Stained Rocks
|
|
||||||
block.stained-rocks-red.name = Stained Rocks Red
|
|
||||||
block.stained-stone-red.name = Stained Stone Red
|
|
||||||
block.stained-rocks-yellow.name = Stained Rocks Yellow
|
|
||||||
block.stained-stone-yellow.name = Stained Stone Yellow
|
|
||||||
block.stained-boulder.name = Stained Boulder
|
|
||||||
block.metal-floor.name = Metal Floor
|
block.metal-floor.name = Metal Floor
|
||||||
block.metal-floor-2.name = Metal Floor 2
|
block.metal-floor-2.name = Metal Floor 2
|
||||||
block.metal-floor-3.name = Metal Floor 3
|
block.metal-floor-3.name = Metal Floor 3
|
||||||
@@ -832,4 +837,4 @@ block.power-source.description = Infinitely outputs power. Sandbox only.
|
|||||||
block.power-void.description = Voids all power inputted into it. Sandbox only.
|
block.power-void.description = Voids all power inputted into it. Sandbox only.
|
||||||
liquid.water.description = Commonly used for cooling machines and waste processing.
|
liquid.water.description = Commonly used for cooling machines and waste processing.
|
||||||
liquid.oil.description = Can be burnt, exploded or used as a coolant.
|
liquid.oil.description = Can be burnt, exploded or used as a coolant.
|
||||||
liquid.cryofluid.description = The most efficient liquid for cooling things down.
|
liquid.cryofluid.description = The most efficient liquid for cooling things down.
|
||||||
BIN
core/assets/maps/Fortress.mmap
Normal file
|
Before Width: | Height: | Size: 497 B After Width: | Height: | Size: 500 B |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 236 KiB After Width: | Height: | Size: 237 KiB |
|
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 192 KiB |
@@ -23,7 +23,7 @@ import java.io.IOException;
|
|||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
public class WaveSpawner{
|
public class WaveSpawner{
|
||||||
private static final float shockwaveBase = 380f, shockwaveRand = 50f, maxShockwaveDst = shockwaveBase + shockwaveRand;
|
private static final float shockwaveBase = 380f, shockwaveRand = 0f, maxShockwaveDst = shockwaveBase + shockwaveRand;
|
||||||
private Array<SpawnGroup> groups;
|
private Array<SpawnGroup> groups;
|
||||||
private Array<FlyerSpawn> flySpawns = new Array<>();
|
private Array<FlyerSpawn> flySpawns = new Array<>();
|
||||||
private Array<GroundSpawn> groundSpawns = new Array<>();
|
private Array<GroundSpawn> groundSpawns = new Array<>();
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import io.anuke.mindustry.world.blocks.units.RepairPoint;
|
|||||||
import io.anuke.mindustry.world.blocks.units.UnitFactory;
|
import io.anuke.mindustry.world.blocks.units.UnitFactory;
|
||||||
import io.anuke.mindustry.world.consumers.ConsumeItemFilter;
|
import io.anuke.mindustry.world.consumers.ConsumeItemFilter;
|
||||||
import io.anuke.mindustry.world.consumers.ConsumeLiquidFilter;
|
import io.anuke.mindustry.world.consumers.ConsumeLiquidFilter;
|
||||||
|
import io.anuke.mindustry.world.meta.Attribute;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.state;
|
import static io.anuke.mindustry.Vars.state;
|
||||||
import static io.anuke.mindustry.Vars.world;
|
import static io.anuke.mindustry.Vars.world;
|
||||||
@@ -36,7 +37,7 @@ public class Blocks implements ContentList{
|
|||||||
//environment
|
//environment
|
||||||
air, part, spawn, deepwater, water, tar, stone, craters, charr, sand, ice, snow,
|
air, part, spawn, deepwater, water, tar, stone, craters, charr, sand, ice, snow,
|
||||||
holostone, rocks, icerocks, cliffs, sporePine, pine, whiteTree, whiteTreeDead, sporeCluster,
|
holostone, rocks, icerocks, cliffs, sporePine, pine, whiteTree, whiteTreeDead, sporeCluster,
|
||||||
iceSnow, sandWater, duneRocks, sandRocks, stainedRocks, moss, stainedRocksRed, stainedStoneRed, stainedRocksYellow, stainedStoneYellow, stainedBoulder, grass, salt,
|
iceSnow, sandWater, duneRocks, sandRocks, moss, sporeMoss, shale, shaleRocks, shaleBoulder, grass, salt,
|
||||||
metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor5, ignarock, magmarock, hotrock, snowrocks,
|
metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor5, ignarock, magmarock, hotrock, snowrocks,
|
||||||
|
|
||||||
//ores
|
//ores
|
||||||
@@ -190,15 +191,18 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
iceSnow = new Floor("ice-snow"){{
|
iceSnow = new Floor("ice-snow"){{
|
||||||
variants = 3;
|
variants = 3;
|
||||||
|
attributes.set(Attribute.water, 0.3f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
snow = new Floor("snow"){{
|
snow = new Floor("snow"){{
|
||||||
|
attributes.set(Attribute.water, 0.2f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
ice = new Floor("ice"){{
|
ice = new Floor("ice"){{
|
||||||
//TODO fix
|
//TODO fix drag/speed
|
||||||
dragMultiplier = 1f;
|
dragMultiplier = 1f;
|
||||||
speedMultiplier = 1f;
|
speedMultiplier = 1f;
|
||||||
|
attributes.set(Attribute.water, 0.4f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
cliffs = new StaticWall("cliffs"){{
|
cliffs = new StaticWall("cliffs"){{
|
||||||
@@ -244,32 +248,27 @@ public class Blocks implements ContentList{
|
|||||||
variants = 3;
|
variants = 3;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
stainedRocks = new StaticWall("stained-rocks"){{
|
shale = new Floor("shale"){{
|
||||||
|
variants = 3;
|
||||||
|
attributes.set(Attribute.oil, 0.3f);
|
||||||
|
}};
|
||||||
|
|
||||||
|
shaleRocks = new StaticWall("shalerocks"){{
|
||||||
|
variants = 2;
|
||||||
|
}};
|
||||||
|
|
||||||
|
shaleBoulder = new Rock("shale-boulder"){{
|
||||||
variants = 2;
|
variants = 2;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
moss = new Floor("moss"){{
|
moss = new Floor("moss"){{
|
||||||
variants = 3;
|
variants = 3;
|
||||||
|
attributes.set(Attribute.spores, 0.15f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
stainedRocksRed = new StaticWall("stained-rocks-red"){{
|
sporeMoss = new Floor("spore-moss"){{
|
||||||
variants = 2;
|
variants = 3;
|
||||||
}};
|
attributes.set(Attribute.spores, 0.3f);
|
||||||
|
|
||||||
stainedStoneRed = new Floor("stained-stone-red"){{
|
|
||||||
variants = 1;
|
|
||||||
}};
|
|
||||||
|
|
||||||
stainedRocksYellow = new StaticWall("stained-rocks-yellow"){{
|
|
||||||
variants = 2;
|
|
||||||
}};
|
|
||||||
|
|
||||||
stainedStoneYellow = new Floor("stained-stone-yellow"){{
|
|
||||||
variants = 1;
|
|
||||||
}};
|
|
||||||
|
|
||||||
stainedBoulder = new Rock("stained-boulder"){{
|
|
||||||
variants = 2;
|
|
||||||
}};
|
}};
|
||||||
|
|
||||||
metalFloor = new Floor("metal-floor"){{
|
metalFloor = new Floor("metal-floor"){{
|
||||||
@@ -278,22 +277,18 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
metalFloorDamaged = new Floor("metal-floor-damaged"){{
|
metalFloorDamaged = new Floor("metal-floor-damaged"){{
|
||||||
variants = 6;
|
variants = 6;
|
||||||
blendGroup = metalFloor;
|
|
||||||
}};
|
}};
|
||||||
|
|
||||||
metalFloor2 = new Floor("metal-floor-2"){{
|
metalFloor2 = new Floor("metal-floor-2"){{
|
||||||
variants = 0;
|
variants = 0;
|
||||||
blendGroup = metalFloor;
|
|
||||||
}};
|
}};
|
||||||
|
|
||||||
metalFloor3 = new Floor("metal-floor-3"){{
|
metalFloor3 = new Floor("metal-floor-3"){{
|
||||||
variants = 0;
|
variants = 0;
|
||||||
blendGroup = metalFloor;
|
|
||||||
}};
|
}};
|
||||||
|
|
||||||
metalFloor5 = new Floor("metal-floor-5"){{
|
metalFloor5 = new Floor("metal-floor-5"){{
|
||||||
variants = 0;
|
variants = 0;
|
||||||
blendGroup = metalFloor;
|
|
||||||
}};
|
}};
|
||||||
|
|
||||||
ignarock = new Floor("ignarock"){{
|
ignarock = new Floor("ignarock"){{
|
||||||
@@ -301,12 +296,12 @@ public class Blocks implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
hotrock = new Floor("hotrock"){{
|
hotrock = new Floor("hotrock"){{
|
||||||
heat = 0.5f;
|
attributes.set(Attribute.heat, 0.5f);
|
||||||
blendGroup = ignarock;
|
blendGroup = ignarock;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
magmarock = new Floor("magmarock"){{
|
magmarock = new Floor("magmarock"){{
|
||||||
heat = 0.75f;
|
attributes.set(Attribute.heat, 0.75f);
|
||||||
updateEffect = Fx.magmasmoke;
|
updateEffect = Fx.magmasmoke;
|
||||||
blendGroup = ignarock;
|
blendGroup = ignarock;
|
||||||
}};
|
}};
|
||||||
@@ -975,6 +970,7 @@ public class Blocks implements ContentList{
|
|||||||
size = 2;
|
size = 2;
|
||||||
liquidCapacity = 30f;
|
liquidCapacity = 30f;
|
||||||
rotateSpeed = 1.4f;
|
rotateSpeed = 1.4f;
|
||||||
|
attribute = Attribute.water;
|
||||||
|
|
||||||
consumes.power(0.90f);
|
consumes.power(0.90f);
|
||||||
}};
|
}};
|
||||||
@@ -988,6 +984,7 @@ public class Blocks implements ContentList{
|
|||||||
pumpAmount = 0.25f;
|
pumpAmount = 0.25f;
|
||||||
size = 3;
|
size = 3;
|
||||||
liquidCapacity = 30f;
|
liquidCapacity = 30f;
|
||||||
|
attribute = Attribute.oil;
|
||||||
|
|
||||||
consumes.item(Items.sand);
|
consumes.item(Items.sand);
|
||||||
consumes.power(3f);
|
consumes.power(3f);
|
||||||
|
|||||||
@@ -279,7 +279,7 @@ public class Zones implements ContentList{
|
|||||||
|
|
||||||
stainedMountains = new Zone("stainedMountains", new MapGenerator("stainedMountains", 2)
|
stainedMountains = new Zone("stainedMountains", new MapGenerator("stainedMountains", 2)
|
||||||
.dist(2.5f, true)
|
.dist(2.5f, true)
|
||||||
.decor(new Decoration(Blocks.moss, Blocks.stainedBoulder, 0.01))){{
|
.decor(new Decoration(Blocks.moss, Blocks.shaleBoulder, 0.02))){{
|
||||||
loadout = Loadouts.basicFoundation;
|
loadout = Loadouts.basicFoundation;
|
||||||
baseLaunchCost = ItemStack.with(Items.copper, 100, Items.lead, 200, Items.silicon, 100);
|
baseLaunchCost = ItemStack.with(Items.copper, 100, Items.lead, 200, Items.silicon, 100);
|
||||||
startingItems = ItemStack.list(Items.copper, 400, Items.lead, 100);
|
startingItems = ItemStack.list(Items.copper, 400, Items.lead, 100);
|
||||||
|
|||||||
@@ -110,6 +110,13 @@ public class Control implements ApplicationListener{
|
|||||||
|
|
||||||
//todo high scores for custom maps, as well as other statistics
|
//todo high scores for custom maps, as well as other statistics
|
||||||
|
|
||||||
|
Events.on(WaveEvent.class, event -> {
|
||||||
|
if(world.getMap().getHightScore() < state.wave){
|
||||||
|
hiscore = true;
|
||||||
|
world.getMap().setHighScore(state.wave);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
Events.on(GameOverEvent.class, event -> {
|
Events.on(GameOverEvent.class, event -> {
|
||||||
state.stats.wavesLasted = state.wave;
|
state.stats.wavesLasted = state.wave;
|
||||||
Effects.shake(5, 6, Core.camera.position.x, Core.camera.position.y);
|
Effects.shake(5, 6, Core.camera.position.x, Core.camera.position.y);
|
||||||
|
|||||||
@@ -44,8 +44,15 @@ public class MapIO{
|
|||||||
private static void initBlocks(){
|
private static void initBlocks(){
|
||||||
if(missingBlocks != null) return;
|
if(missingBlocks != null) return;
|
||||||
|
|
||||||
|
//stainedRocks, stainedRocksRed, stainedRocksYellow, stainedStoneYellow, stainedBoulder,
|
||||||
missingBlocks = ObjectMap.of(
|
missingBlocks = ObjectMap.of(
|
||||||
"stained-stone", Blocks.moss
|
"stained-stone", Blocks.shale,
|
||||||
|
"stained-stone-red", Blocks.shale,
|
||||||
|
"stained-stone-yellow", Blocks.shale,
|
||||||
|
"stained-rocks", Blocks.shaleRocks,
|
||||||
|
"stained-boulder", Blocks.shaleBoulder,
|
||||||
|
"stained-rocks-red", Blocks.shaleRocks,
|
||||||
|
"stained-rocks-yellow", Blocks.shaleRocks
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,8 +81,7 @@ public class MapIO{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOreByte(byte b){
|
public void setOreByte(byte b){
|
||||||
if(b != 0)
|
if(b != 0) floor.drawPixel(x, floor.getHeight() - 1 - y, colorFor(floor(), Blocks.air, content.block(b), getTeam()));
|
||||||
floor.drawPixel(x, floor.getHeight() - 1 - y, colorFor(floor(), Blocks.air, content.block(b), getTeam()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -165,7 +171,7 @@ public class MapIO{
|
|||||||
stream.writeByte(tile.link);
|
stream.writeByte(tile.link);
|
||||||
}else if(tile.entity != null){
|
}else if(tile.entity != null){
|
||||||
stream.writeByte(Pack.byteByte(tile.getTeamID(), tile.getRotation())); //team + rotation
|
stream.writeByte(Pack.byteByte(tile.getTeamID(), tile.getRotation())); //team + rotation
|
||||||
stream.writeShort((short)tile.entity.health); //health
|
stream.writeShort(/*(short)tile.entity.health*/tile.block().health); //health
|
||||||
tile.entity.writeConfig(stream);
|
tile.entity.writeConfig(stream);
|
||||||
}else{
|
}else{
|
||||||
//write consecutive non-entity blocks
|
//write consecutive non-entity blocks
|
||||||
@@ -267,13 +273,13 @@ public class MapIO{
|
|||||||
|
|
||||||
Tile tile = tiles.get(x, y);
|
Tile tile = tiles.get(x, y);
|
||||||
tile.setFloor((Floor)content.block(floorid));
|
tile.setFloor((Floor)content.block(floorid));
|
||||||
tile.setOreByte(oreid);
|
tile.setOre(content.block(oreid));
|
||||||
|
|
||||||
for(int j = i + 1; j < i + 1 + consecutives; j++){
|
for(int j = i + 1; j < i + 1 + consecutives; j++){
|
||||||
int newx = j % width, newy = j / width;
|
int newx = j % width, newy = j / width;
|
||||||
Tile newTile = tiles.get(newx, newy);
|
Tile newTile = tiles.get(newx, newy);
|
||||||
newTile.setFloor((Floor)content.block(floorid));
|
newTile.setFloor((Floor)content.block(floorid));
|
||||||
newTile.setOreByte(oreid);
|
newTile.setOre(content.block(oreid));
|
||||||
}
|
}
|
||||||
|
|
||||||
i += consecutives;
|
i += consecutives;
|
||||||
@@ -297,7 +303,7 @@ public class MapIO{
|
|||||||
byte rotation = Pack.rightByte(tr);
|
byte rotation = Pack.rightByte(tr);
|
||||||
|
|
||||||
tile.setTeam(Team.all[team]);
|
tile.setTeam(Team.all[team]);
|
||||||
tile.entity.health = health;
|
tile.entity.health = /*health*/tile.block().health;
|
||||||
tile.setRotation(rotation);
|
tile.setRotation(rotation);
|
||||||
|
|
||||||
tile.entity.readConfig(stream);
|
tile.entity.readConfig(stream);
|
||||||
@@ -432,7 +438,7 @@ public class MapIO{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(oreMap.containsKey(floorb)){
|
if(oreMap.containsKey(floorb)){
|
||||||
tile.setOreByte((byte)oreMap.get(floorb, 0));
|
tile.setOre(content.block(oreMap.get(floorb, 0)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import io.anuke.arc.Core;
|
|||||||
import io.anuke.arc.collection.ObjectMap;
|
import io.anuke.arc.collection.ObjectMap;
|
||||||
import io.anuke.arc.files.FileHandle;
|
import io.anuke.arc.files.FileHandle;
|
||||||
import io.anuke.arc.graphics.Texture;
|
import io.anuke.arc.graphics.Texture;
|
||||||
|
import io.anuke.mindustry.Vars;
|
||||||
import io.anuke.mindustry.io.MapIO;
|
import io.anuke.mindustry.io.MapIO;
|
||||||
|
|
||||||
public class Map{
|
public class Map{
|
||||||
@@ -44,6 +45,15 @@ public class Map{
|
|||||||
return file.nameWithoutExtension();
|
return file.nameWithoutExtension();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getHightScore(){
|
||||||
|
return Core.settings.getInt("hiscore" + fileName(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHighScore(int score){
|
||||||
|
Core.settings.put("hiscore" + fileName(), score);
|
||||||
|
Vars.data.modified();
|
||||||
|
}
|
||||||
|
|
||||||
public String getDisplayName(){
|
public String getDisplayName(){
|
||||||
return tags.get("name", fileName());
|
return tags.get("name", fileName());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import static io.anuke.mindustry.Vars.*;
|
|||||||
|
|
||||||
public class Maps implements Disposable{
|
public class Maps implements Disposable{
|
||||||
/** List of all built-in maps. */
|
/** List of all built-in maps. */
|
||||||
private static final String[] defaultMapNames = {"impact0079"};
|
private static final String[] defaultMapNames = {"Fortress"};
|
||||||
/** All maps stored in an ordered array. */
|
/** All maps stored in an ordered array. */
|
||||||
private Array<Map> maps = new Array<>();
|
private Array<Map> maps = new Array<>();
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ public class Maps implements Disposable{
|
|||||||
|
|
||||||
/** Import a map, then save it. This updates all values and stored data necessary. */
|
/** Import a map, then save it. This updates all values and stored data necessary. */
|
||||||
public void importMap(FileHandle file, Map map) throws IOException{
|
public void importMap(FileHandle file, Map map) throws IOException{
|
||||||
file.copyTo(customMapDirectory.child(file.name()));
|
file.copyTo(customMapDirectory.child(map.name() + ".mmap"));
|
||||||
if(!headless){
|
if(!headless){
|
||||||
map.texture = new Texture(MapIO.generatePreview(map));
|
map.texture = new Texture(MapIO.generatePreview(map));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ public class CustomGameDialog extends FloatingDialog{
|
|||||||
image.row();
|
image.row();
|
||||||
image.add("[accent]" + map.getDisplayName()).pad(3f).growX().wrap().get().setAlignment(Align.center, Align.center);
|
image.add("[accent]" + map.getDisplayName()).pad(3f).growX().wrap().get().setAlignment(Align.center, Align.center);
|
||||||
image.row();
|
image.row();
|
||||||
image.label((() -> Core.bundle.format("level.highscore", Core.settings.getInt("hiscore" + map.fileName(), 0)))).pad(3f);
|
image.label((() -> Core.bundle.format("level.highscore", map.getHightScore()))).pad(3f);
|
||||||
|
|
||||||
BorderImage border = new BorderImage(map.texture, 3f);
|
BorderImage border = new BorderImage(map.texture, 3f);
|
||||||
border.setScaling(Scaling.fit);
|
border.setScaling(Scaling.fit);
|
||||||
|
|||||||
@@ -137,8 +137,6 @@ public class MapsDialog extends FloatingDialog{
|
|||||||
t.add("$editor.description").padRight(10).color(Color.GRAY).top();
|
t.add("$editor.description").padRight(10).color(Color.GRAY).top();
|
||||||
t.row();
|
t.row();
|
||||||
t.add(map.description()).growX().wrap().padTop(2);
|
t.add(map.description()).growX().wrap().padTop(2);
|
||||||
t.row();
|
|
||||||
t.add("$editor.oregen.info").padRight(10).color(Color.GRAY);
|
|
||||||
}).height(mapsize).width(mapsize);
|
}).height(mapsize).width(mapsize);
|
||||||
|
|
||||||
table.row();
|
table.row();
|
||||||
|
|||||||
@@ -8,13 +8,13 @@ import io.anuke.arc.collection.EnumSet;
|
|||||||
import io.anuke.arc.function.BooleanProvider;
|
import io.anuke.arc.function.BooleanProvider;
|
||||||
import io.anuke.arc.function.Function;
|
import io.anuke.arc.function.Function;
|
||||||
import io.anuke.arc.graphics.Color;
|
import io.anuke.arc.graphics.Color;
|
||||||
import io.anuke.arc.graphics.g2d.Draw;
|
import io.anuke.arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.graphics.g2d.Lines;
|
|
||||||
import io.anuke.arc.graphics.g2d.TextureAtlas.AtlasRegion;
|
import io.anuke.arc.graphics.g2d.TextureAtlas.AtlasRegion;
|
||||||
import io.anuke.arc.graphics.g2d.TextureRegion;
|
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.math.Mathf;
|
||||||
import io.anuke.arc.scene.ui.layout.Table;
|
import io.anuke.arc.scene.ui.layout.Table;
|
||||||
|
import io.anuke.arc.util.Align;
|
||||||
import io.anuke.arc.util.Time;
|
import io.anuke.arc.util.Time;
|
||||||
|
import io.anuke.arc.util.pooling.Pools;
|
||||||
import io.anuke.mindustry.entities.Damage;
|
import io.anuke.mindustry.entities.Damage;
|
||||||
import io.anuke.mindustry.entities.bullet.Bullet;
|
import io.anuke.mindustry.entities.bullet.Bullet;
|
||||||
import io.anuke.mindustry.entities.effect.Puddle;
|
import io.anuke.mindustry.entities.effect.Puddle;
|
||||||
@@ -32,10 +32,7 @@ import io.anuke.mindustry.ui.ContentDisplay;
|
|||||||
import io.anuke.mindustry.world.consumers.Consume;
|
import io.anuke.mindustry.world.consumers.Consume;
|
||||||
import io.anuke.mindustry.world.consumers.ConsumeLiquid;
|
import io.anuke.mindustry.world.consumers.ConsumeLiquid;
|
||||||
import io.anuke.mindustry.world.consumers.ConsumePower;
|
import io.anuke.mindustry.world.consumers.ConsumePower;
|
||||||
import io.anuke.mindustry.world.meta.BlockFlag;
|
import io.anuke.mindustry.world.meta.*;
|
||||||
import io.anuke.mindustry.world.meta.BlockGroup;
|
|
||||||
import io.anuke.mindustry.world.meta.BlockStat;
|
|
||||||
import io.anuke.mindustry.world.meta.StatUnit;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
@@ -202,6 +199,28 @@ public class Block extends BlockStorage{
|
|||||||
public void drawPlace(int x, int y, int rotation, boolean valid){
|
public void drawPlace(int x, int y, int rotation, boolean valid){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void drawPlaceText(String text, int x, int y, boolean valid){
|
||||||
|
Color color = valid ? Pal.accent : Pal.remove;
|
||||||
|
BitmapFont font = Core.scene.skin.getFont("default-font");
|
||||||
|
GlyphLayout layout = Pools.obtain(GlyphLayout.class, GlyphLayout::new);
|
||||||
|
boolean ints = font.usesIntegerPositions();
|
||||||
|
font.setUseIntegerPositions(false);
|
||||||
|
font.getData().setScale(1f / 4f);
|
||||||
|
layout.setText(font, text);
|
||||||
|
|
||||||
|
font.setColor(color);
|
||||||
|
float dx = x*tilesize + offset(), dy = y*tilesize + offset() + size*tilesize/2f + 2;
|
||||||
|
font.draw(text, dx, dy + layout.height + 1, Align.center);
|
||||||
|
Lines.stroke(1f, color);
|
||||||
|
Lines.line(dx - layout.width/2f - 2f, dy, dx + layout.width/2f + 2f, dy);
|
||||||
|
|
||||||
|
font.setUseIntegerPositions(ints);
|
||||||
|
font.setColor(Color.WHITE);
|
||||||
|
font.getData().setScale(1f);
|
||||||
|
Draw.reset();
|
||||||
|
Pools.free(layout);
|
||||||
|
}
|
||||||
|
|
||||||
public void draw(Tile tile){
|
public void draw(Tile tile){
|
||||||
Draw.rect(region, tile.drawx(), tile.drawy(), rotate ? tile.getRotation() * 90 : 0);
|
Draw.rect(region, tile.drawx(), tile.drawy(), rotate ? tile.getRotation() * 90 : 0);
|
||||||
}
|
}
|
||||||
@@ -248,6 +267,15 @@ public class Block extends BlockStorage{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float sumAttribute(Attribute attr, int x, int y){
|
||||||
|
Tile tile = world.tile(x, y);
|
||||||
|
float sum = 0;
|
||||||
|
for(Tile other : tile.getLinkedTilesAs(this, tempTiles)){
|
||||||
|
sum += other.floor().attributes.get(attr);
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String localizedName(){
|
public String localizedName(){
|
||||||
return localizedName;
|
return localizedName;
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ public class LegacyColorMapper implements ContentList{
|
|||||||
map("323232", Blocks.stone);
|
map("323232", Blocks.stone);
|
||||||
map("646464", Blocks.stone, Blocks.rocks);
|
map("646464", Blocks.stone, Blocks.rocks);
|
||||||
map("50965a", Blocks.grass);
|
map("50965a", Blocks.grass);
|
||||||
map("5ab464", Blocks.grass, Blocks.stainedRocks);
|
map("5ab464", Blocks.grass, Blocks.pine);
|
||||||
map("506eb4", Blocks.water);
|
map("506eb4", Blocks.water);
|
||||||
map("465a96", Blocks.deepwater);
|
map("465a96", Blocks.deepwater);
|
||||||
map("252525", Blocks.ignarock);
|
map("252525", Blocks.ignarock);
|
||||||
@@ -33,8 +33,8 @@ public class LegacyColorMapper implements ContentList{
|
|||||||
map("c2d1d2", Blocks.snow);
|
map("c2d1d2", Blocks.snow);
|
||||||
map("c4e3e7", Blocks.ice);
|
map("c4e3e7", Blocks.ice);
|
||||||
map("f7feff", Blocks.snow, Blocks.snowrocks);
|
map("f7feff", Blocks.snow, Blocks.snowrocks);
|
||||||
map("6e501e", Blocks.stainedStoneRed);
|
map("6e501e", Blocks.holostone);
|
||||||
map("ed5334", Blocks.stainedStoneRed);
|
map("ed5334", Blocks.magmarock);
|
||||||
map("292929", Blocks.tar);
|
map("292929", Blocks.tar);
|
||||||
map("c3a490", Blocks.stone, Blocks.air, Blocks.oreCopper);
|
map("c3a490", Blocks.stone, Blocks.air, Blocks.oreCopper);
|
||||||
map("161616", Blocks.stone, Blocks.air, Blocks.oreCoal);
|
map("161616", Blocks.stone, Blocks.air, Blocks.oreCoal);
|
||||||
|
|||||||
15
core/src/io/anuke/mindustry/world/blocks/Attributes.java
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package io.anuke.mindustry.world.blocks;
|
||||||
|
|
||||||
|
import io.anuke.mindustry.world.meta.Attribute;
|
||||||
|
|
||||||
|
public class Attributes{
|
||||||
|
private float[] array = new float[Attribute.values().length];
|
||||||
|
|
||||||
|
public float get(Attribute attr){
|
||||||
|
return array[attr.ordinal()];
|
||||||
|
}
|
||||||
|
|
||||||
|
public void set(Attribute attr, float value){
|
||||||
|
array[attr.ordinal()] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -48,8 +48,6 @@ public class Floor extends Block{
|
|||||||
public Item itemDrop = null;
|
public Item itemDrop = null;
|
||||||
/** whether this block can be drowned in */
|
/** whether this block can be drowned in */
|
||||||
public boolean isLiquid;
|
public boolean isLiquid;
|
||||||
/** Heat of this block, 0 at baseline. Used for calculating output of thermal generators.*/
|
|
||||||
public float heat = 0f;
|
|
||||||
/** if true, this block cannot be mined by players. useful for annoying things like sand. */
|
/** if true, this block cannot be mined by players. useful for annoying things like sand. */
|
||||||
public boolean playerUnmineable = false;
|
public boolean playerUnmineable = false;
|
||||||
/**Style of the edge stencil. Loaded by looking up "edge-stencil-{name}".*/
|
/**Style of the edge stencil. Loaded by looking up "edge-stencil-{name}".*/
|
||||||
@@ -58,6 +56,8 @@ public class Floor extends Block{
|
|||||||
public Block blendGroup = this;
|
public Block blendGroup = this;
|
||||||
/**Effect displayed when randomly updated.*/
|
/**Effect displayed when randomly updated.*/
|
||||||
public Effect updateEffect = Fx.none;
|
public Effect updateEffect = Fx.none;
|
||||||
|
/**Array of affinities to certain things.*/
|
||||||
|
public Attributes attributes = new Attributes();
|
||||||
|
|
||||||
protected TextureRegion[][] edges;
|
protected TextureRegion[][] edges;
|
||||||
protected byte eq = 0;
|
protected byte eq = 0;
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
package io.anuke.mindustry.world.blocks.power;
|
package io.anuke.mindustry.world.blocks.power;
|
||||||
|
|
||||||
import io.anuke.mindustry.entities.Effects;
|
import io.anuke.arc.Core;
|
||||||
import io.anuke.mindustry.entities.Effects.Effect;
|
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.math.Mathf;
|
||||||
import io.anuke.mindustry.content.Fx;
|
import io.anuke.mindustry.content.Fx;
|
||||||
|
import io.anuke.mindustry.entities.Effects;
|
||||||
|
import io.anuke.mindustry.entities.Effects.Effect;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
|
import io.anuke.mindustry.world.meta.Attribute;
|
||||||
|
|
||||||
public class ThermalGenerator extends PowerGenerator{
|
public class ThermalGenerator extends PowerGenerator{
|
||||||
protected Effect generateEffect = Fx.none;
|
protected Effect generateEffect = Fx.none;
|
||||||
@@ -24,6 +26,11 @@ public class ThermalGenerator extends PowerGenerator{
|
|||||||
super.update(tile);
|
super.update(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawPlace(int x, int y, int rotation, boolean valid){
|
||||||
|
drawPlaceText(Core.bundle.format("blocks.efficiency", sumAttribute(Attribute.heat, x, y)*100, 1), x, y, valid);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void placed(Tile tile){
|
public void placed(Tile tile){
|
||||||
super.placed(tile);
|
super.placed(tile);
|
||||||
@@ -34,10 +41,7 @@ public class ThermalGenerator extends PowerGenerator{
|
|||||||
super.onProximityAdded(tile);
|
super.onProximityAdded(tile);
|
||||||
|
|
||||||
GeneratorEntity entity = tile.entity();
|
GeneratorEntity entity = tile.entity();
|
||||||
entity.productionEfficiency = 0f;
|
entity.productionEfficiency = sumAttribute(Attribute.heat, tile.x, tile.y);
|
||||||
for(Tile other : tile.getLinkedTiles(tempTiles)){
|
|
||||||
entity.productionEfficiency += other.floor().heat;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -50,6 +54,6 @@ public class ThermalGenerator extends PowerGenerator{
|
|||||||
@Override
|
@Override
|
||||||
public boolean canPlaceOn(Tile tile){
|
public boolean canPlaceOn(Tile tile){
|
||||||
//make sure there's heat at this location
|
//make sure there's heat at this location
|
||||||
return tile.getLinkedTilesAs(this, tempTiles).sum(other -> other.floor().heat) > 0.01f;
|
return tile.getLinkedTilesAs(this, tempTiles).sum(other -> other.floor().attributes.get(Attribute.heat)) > 0.01f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,10 @@ import io.anuke.arc.math.RandomXS128;
|
|||||||
import io.anuke.arc.util.Time;
|
import io.anuke.arc.util.Time;
|
||||||
import io.anuke.mindustry.content.Fx;
|
import io.anuke.mindustry.content.Fx;
|
||||||
import io.anuke.mindustry.entities.type.TileEntity;
|
import io.anuke.mindustry.entities.type.TileEntity;
|
||||||
|
import io.anuke.mindustry.graphics.Pal;
|
||||||
|
import io.anuke.mindustry.ui.Bar;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
|
import io.anuke.mindustry.world.meta.Attribute;
|
||||||
|
|
||||||
import java.io.DataInput;
|
import java.io.DataInput;
|
||||||
import java.io.DataOutput;
|
import java.io.DataOutput;
|
||||||
@@ -46,6 +49,21 @@ public class Cultivator extends GenericCrafter{
|
|||||||
entity.warmup = Mathf.lerpDelta(entity.warmup, entity.cons.valid() ? 1f : 0f, 0.015f);
|
entity.warmup = Mathf.lerpDelta(entity.warmup, entity.cons.valid() ? 1f : 0f, 0.015f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBars(){
|
||||||
|
super.setBars();
|
||||||
|
bars.add("multiplier", entity -> new Bar(() ->
|
||||||
|
Core.bundle.format("blocks.efficiency",
|
||||||
|
((((CultivatorEntity)entity).boost + 1f) * ((CultivatorEntity)entity).warmup)*100f,1),
|
||||||
|
() -> Pal.ammo,
|
||||||
|
() -> ((CultivatorEntity)entity).warmup));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawPlace(int x, int y, int rotation, boolean valid){
|
||||||
|
drawPlaceText(Core.bundle.format("blocks.efficiency", (1+sumAttribute(Attribute.spores, x, y))*100, 1), x, y, valid);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(Tile tile){
|
public void draw(Tile tile){
|
||||||
CultivatorEntity entity = tile.entity();
|
CultivatorEntity entity = tile.entity();
|
||||||
@@ -84,8 +102,23 @@ public class Cultivator extends GenericCrafter{
|
|||||||
return new CultivatorEntity();
|
return new CultivatorEntity();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProximityAdded(Tile tile){
|
||||||
|
super.onProximityAdded(tile);
|
||||||
|
|
||||||
|
CultivatorEntity entity = tile.entity();
|
||||||
|
entity.boost = sumAttribute(Attribute.spores, tile.x, tile.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected float getProgressIncrease(TileEntity entity, float baseTime){
|
||||||
|
CultivatorEntity c = (CultivatorEntity)entity;
|
||||||
|
return super.getProgressIncrease(entity, baseTime) * (1f + c.boost);
|
||||||
|
}
|
||||||
|
|
||||||
public static class CultivatorEntity extends GenericCrafterEntity{
|
public static class CultivatorEntity extends GenericCrafterEntity{
|
||||||
public float warmup;
|
public float warmup;
|
||||||
|
public float boost;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(DataOutput stream) throws IOException{
|
public void write(DataOutput stream) throws IOException{
|
||||||
|
|||||||
@@ -1,17 +1,20 @@
|
|||||||
package io.anuke.mindustry.world.blocks.production;
|
package io.anuke.mindustry.world.blocks.production;
|
||||||
|
|
||||||
import io.anuke.arc.Core;
|
import io.anuke.arc.Core;
|
||||||
|
import io.anuke.arc.graphics.g2d.Draw;
|
||||||
import io.anuke.arc.graphics.g2d.TextureRegion;
|
import io.anuke.arc.graphics.g2d.TextureRegion;
|
||||||
import io.anuke.mindustry.content.Liquids;
|
import io.anuke.arc.math.Mathf;
|
||||||
import io.anuke.mindustry.content.Fx;
|
import io.anuke.mindustry.content.Fx;
|
||||||
import io.anuke.mindustry.entities.type.TileEntity;
|
import io.anuke.mindustry.content.Liquids;
|
||||||
import io.anuke.mindustry.type.Liquid;
|
|
||||||
import io.anuke.mindustry.world.Tile;
|
|
||||||
import io.anuke.mindustry.world.meta.BlockStat;
|
|
||||||
import io.anuke.mindustry.entities.Effects;
|
import io.anuke.mindustry.entities.Effects;
|
||||||
import io.anuke.mindustry.entities.Effects.Effect;
|
import io.anuke.mindustry.entities.Effects.Effect;
|
||||||
import io.anuke.arc.graphics.g2d.Draw;
|
import io.anuke.mindustry.entities.type.TileEntity;
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.mindustry.graphics.Pal;
|
||||||
|
import io.anuke.mindustry.type.Liquid;
|
||||||
|
import io.anuke.mindustry.ui.Bar;
|
||||||
|
import io.anuke.mindustry.world.Tile;
|
||||||
|
import io.anuke.mindustry.world.meta.Attribute;
|
||||||
|
import io.anuke.mindustry.world.meta.BlockStat;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pump that makes liquid from solids and takes in power. Only works on solid floor blocks.
|
* Pump that makes liquid from solids and takes in power. Only works on solid floor blocks.
|
||||||
@@ -21,6 +24,8 @@ public class SolidPump extends Pump{
|
|||||||
protected Effect updateEffect = Fx.none;
|
protected Effect updateEffect = Fx.none;
|
||||||
protected float updateEffectChance = 0.02f;
|
protected float updateEffectChance = 0.02f;
|
||||||
protected float rotateSpeed = 1f;
|
protected float rotateSpeed = 1f;
|
||||||
|
/**Attribute that is checked when calculating output.*/
|
||||||
|
protected Attribute attribute;
|
||||||
|
|
||||||
public SolidPump(String name){
|
public SolidPump(String name){
|
||||||
super(name);
|
super(name);
|
||||||
@@ -34,11 +39,27 @@ public class SolidPump extends Pump{
|
|||||||
liquidRegion = Core.atlas.find(name + "-liquid");
|
liquidRegion = Core.atlas.find(name + "-liquid");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawPlace(int x, int y, int rotation, boolean valid){
|
||||||
|
if(attribute != null){
|
||||||
|
drawPlaceText(Core.bundle.format("blocks.efficiency", (sumAttribute(attribute, x, y) + 1f)*100, 1), x, y, valid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBars(){
|
||||||
|
super.setBars();
|
||||||
|
bars.add("efficiency", entity -> new Bar(() ->
|
||||||
|
Core.bundle.format("blocks.efficiency",
|
||||||
|
((((SolidPumpEntity)entity).boost + 1f) * ((SolidPumpEntity)entity).warmup) * 100, 1),
|
||||||
|
() -> Pal.ammo,
|
||||||
|
() -> ((SolidPumpEntity)entity).warmup));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setStats(){
|
public void setStats(){
|
||||||
super.setStats();
|
super.setStats();
|
||||||
|
|
||||||
// stats.remove(BlockStat.liquidOutput);
|
|
||||||
stats.add(BlockStat.liquidOutput, result);
|
stats.add(BlockStat.liquidOutput, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,6 +97,8 @@ public class SolidPump extends Pump{
|
|||||||
if(isValid(tile)) fraction = 1f;
|
if(isValid(tile)) fraction = 1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fraction += entity.boost;
|
||||||
|
|
||||||
if(tile.entity.cons.valid() && typeLiquid(tile) < liquidCapacity - 0.001f){
|
if(tile.entity.cons.valid() && typeLiquid(tile) < liquidCapacity - 0.001f){
|
||||||
float maxPump = Math.min(liquidCapacity - typeLiquid(tile), pumpAmount * entity.delta() * fraction * entity.power.satisfaction);
|
float maxPump = Math.min(liquidCapacity - typeLiquid(tile), pumpAmount * entity.delta() * fraction * entity.power.satisfaction);
|
||||||
tile.entity.liquids.add(result, maxPump);
|
tile.entity.liquids.add(result, maxPump);
|
||||||
@@ -115,6 +138,16 @@ public class SolidPump extends Pump{
|
|||||||
return new SolidPumpEntity();
|
return new SolidPumpEntity();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProximityAdded(Tile tile){
|
||||||
|
super.onProximityAdded(tile);
|
||||||
|
|
||||||
|
if(attribute != null){
|
||||||
|
SolidPumpEntity entity = tile.entity();
|
||||||
|
entity.boost = sumAttribute(attribute, tile.x, tile.y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public float typeLiquid(Tile tile){
|
public float typeLiquid(Tile tile){
|
||||||
return tile.entity.liquids.total();
|
return tile.entity.liquids.total();
|
||||||
}
|
}
|
||||||
@@ -122,5 +155,6 @@ public class SolidPump extends Pump{
|
|||||||
public static class SolidPumpEntity extends TileEntity{
|
public static class SolidPumpEntity extends TileEntity{
|
||||||
public float warmup;
|
public float warmup;
|
||||||
public float pumpTime;
|
public float pumpTime;
|
||||||
|
public float boost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
12
core/src/io/anuke/mindustry/world/meta/Attribute.java
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
package io.anuke.mindustry.world.meta;
|
||||||
|
|
||||||
|
public enum Attribute{
|
||||||
|
/** Heat of this block. Used for calculating output of thermal generators.*/
|
||||||
|
heat,
|
||||||
|
/** Spore content of this block. Used for increasing cultivator yield.*/
|
||||||
|
spores,
|
||||||
|
/** Water content of this block. Used for increasing water extractor yield.*/
|
||||||
|
water,
|
||||||
|
/** Oil content of this block. Used for increasing oil extractor yield.*/
|
||||||
|
oil
|
||||||
|
}
|
||||||
@@ -18,9 +18,10 @@ public class ConsumeModule extends BlockModule{
|
|||||||
public void update(){
|
public void update(){
|
||||||
boolean prevValid = valid();
|
boolean prevValid = valid();
|
||||||
valid = true;
|
valid = true;
|
||||||
|
boolean docons = entity.tile.block().shouldConsume(entity.tile);
|
||||||
|
|
||||||
for(Consume cons : entity.tile.block().consumes.all()){
|
for(Consume cons : entity.tile.block().consumes.all()){
|
||||||
if(cons.isUpdate() && prevValid && entity.tile.block().shouldConsume(entity.tile) && cons.valid(entity.getTile().block(), entity)){
|
if(docons && cons.isUpdate() && prevValid && cons.valid(entity.getTile().block(), entity)){
|
||||||
cons.update(entity.getTile().block(), entity);
|
cons.update(entity.getTile().block(), entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||