Flying unit factory implementation, bugfixes
@@ -25,7 +25,7 @@ allprojects {
|
|||||||
appName = 'Mindustry'
|
appName = 'Mindustry'
|
||||||
gdxVersion = '1.9.8'
|
gdxVersion = '1.9.8'
|
||||||
aiVersion = '1.8.1'
|
aiVersion = '1.8.1'
|
||||||
uCoreVersion = '64d13cc'
|
uCoreVersion = '238babe'
|
||||||
|
|
||||||
getVersionString = {
|
getVersionString = {
|
||||||
String buildVersion = getBuildVersion()
|
String buildVersion = getBuildVersion()
|
||||||
|
|||||||
BIN
core/assets-raw/sprites/blocks/production/flierfactory-top.png
Normal file
|
After Width: | Height: | Size: 255 B |
|
Before Width: | Height: | Size: 421 B After Width: | Height: | Size: 297 B |
BIN
core/assets-raw/sprites/units/flier.png
Normal file
|
After Width: | Height: | Size: 307 B |
|
Before Width: | Height: | Size: 195 B After Width: | Height: | Size: 195 B |
|
Before Width: | Height: | Size: 177 B After Width: | Height: | Size: 177 B |
|
Before Width: | Height: | Size: 264 B After Width: | Height: | Size: 264 B |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
@@ -1,7 +1,7 @@
|
|||||||
#Autogenerated file. Do not modify.
|
#Autogenerated file. Do not modify.
|
||||||
#Sun Mar 25 13:11:36 EDT 2018
|
#Sun Mar 25 15:04:04 EDT 2018
|
||||||
version=release
|
version=release
|
||||||
androidBuildCode=641
|
androidBuildCode=650
|
||||||
name=Mindustry
|
name=Mindustry
|
||||||
code=3.4
|
code=3.4
|
||||||
build=custom build
|
build=custom build
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package io.anuke.mindustry.content.blocks;
|
|||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.types.PowerBlock;
|
import io.anuke.mindustry.world.blocks.types.PowerBlock;
|
||||||
import io.anuke.mindustry.world.blocks.types.generation.PowerDistributor;
|
import io.anuke.mindustry.world.blocks.types.power.PowerDistributor;
|
||||||
|
|
||||||
public class DebugBlocks {
|
public class DebugBlocks {
|
||||||
public static final Block
|
public static final Block
|
||||||
|
|||||||
@@ -7,18 +7,18 @@ import io.anuke.mindustry.world.Block;
|
|||||||
import io.anuke.mindustry.world.blocks.types.defense.RepairTurret;
|
import io.anuke.mindustry.world.blocks.types.defense.RepairTurret;
|
||||||
import io.anuke.mindustry.world.blocks.types.defense.ShieldBlock;
|
import io.anuke.mindustry.world.blocks.types.defense.ShieldBlock;
|
||||||
import io.anuke.mindustry.world.blocks.types.distribution.Teleporter;
|
import io.anuke.mindustry.world.blocks.types.distribution.Teleporter;
|
||||||
import io.anuke.mindustry.world.blocks.types.generation.*;
|
import io.anuke.mindustry.world.blocks.types.power.ItemPowerGenerator;
|
||||||
|
|
||||||
public class PowerBlocks {
|
public class PowerBlocks {
|
||||||
public static final Block
|
public static final Block
|
||||||
|
|
||||||
coalgenerator = new ItemPowerGenerator("coalgenerator") {{
|
coalgenerator = new io.anuke.mindustry.world.blocks.types.power.ItemPowerGenerator("coalgenerator") {{
|
||||||
generateItem = Items.coal;
|
generateItem = Items.coal;
|
||||||
powerOutput = 0.04f;
|
powerOutput = 0.04f;
|
||||||
powerCapacity = 40f;
|
powerCapacity = 40f;
|
||||||
}},
|
}},
|
||||||
|
|
||||||
thermalgenerator = new LiquidPowerGenerator("thermalgenerator") {{
|
thermalgenerator = new io.anuke.mindustry.world.blocks.types.power.LiquidPowerGenerator("thermalgenerator") {{
|
||||||
generateLiquid = Liquids.lava;
|
generateLiquid = Liquids.lava;
|
||||||
maxLiquidGenerate = 0.5f;
|
maxLiquidGenerate = 0.5f;
|
||||||
powerPerLiquid = 0.08f;
|
powerPerLiquid = 0.08f;
|
||||||
@@ -26,7 +26,7 @@ public class PowerBlocks {
|
|||||||
generateEffect = Fx.redgeneratespark;
|
generateEffect = Fx.redgeneratespark;
|
||||||
}},
|
}},
|
||||||
|
|
||||||
combustiongenerator = new LiquidPowerGenerator("combustiongenerator") {{
|
combustiongenerator = new io.anuke.mindustry.world.blocks.types.power.LiquidPowerGenerator("combustiongenerator") {{
|
||||||
generateLiquid = Liquids.oil;
|
generateLiquid = Liquids.oil;
|
||||||
maxLiquidGenerate = 0.4f;
|
maxLiquidGenerate = 0.4f;
|
||||||
powerPerLiquid = 0.12f;
|
powerPerLiquid = 0.12f;
|
||||||
@@ -40,16 +40,16 @@ public class PowerBlocks {
|
|||||||
itemDuration = 240f;
|
itemDuration = 240f;
|
||||||
}},
|
}},
|
||||||
|
|
||||||
solarpanel = new SolarGenerator("solarpanel") {{
|
solarpanel = new io.anuke.mindustry.world.blocks.types.power.SolarGenerator("solarpanel") {{
|
||||||
generation = 0.003f;
|
generation = 0.003f;
|
||||||
}},
|
}},
|
||||||
|
|
||||||
largesolarpanel = new SolarGenerator("largesolarpanel") {{
|
largesolarpanel = new io.anuke.mindustry.world.blocks.types.power.SolarGenerator("largesolarpanel") {{
|
||||||
size = 3;
|
size = 3;
|
||||||
generation = 0.012f;
|
generation = 0.012f;
|
||||||
}},
|
}},
|
||||||
|
|
||||||
nuclearReactor = new NuclearReactor("nuclearreactor") {{
|
nuclearReactor = new io.anuke.mindustry.world.blocks.types.power.NuclearReactor("nuclearreactor") {{
|
||||||
size = 3;
|
size = 3;
|
||||||
health = 600;
|
health = 600;
|
||||||
breaktime *= 2.3f;
|
breaktime *= 2.3f;
|
||||||
@@ -74,16 +74,16 @@ public class PowerBlocks {
|
|||||||
health = 400;
|
health = 400;
|
||||||
}},
|
}},
|
||||||
|
|
||||||
battery = new PowerGenerator("battery") {{
|
battery = new io.anuke.mindustry.world.blocks.types.power.PowerGenerator("battery") {{
|
||||||
powerCapacity = 320f;
|
powerCapacity = 320f;
|
||||||
}},
|
}},
|
||||||
|
|
||||||
batteryLarge = new PowerGenerator("batterylarge") {{
|
batteryLarge = new io.anuke.mindustry.world.blocks.types.power.PowerGenerator("batterylarge") {{
|
||||||
size = 3;
|
size = 3;
|
||||||
powerCapacity = 2000f;
|
powerCapacity = 2000f;
|
||||||
}},
|
}},
|
||||||
|
|
||||||
powernode = new PowerDistributor("powernode"),
|
powernode = new io.anuke.mindustry.world.blocks.types.power.PowerDistributor("powernode"),
|
||||||
|
|
||||||
teleporter = new Teleporter("teleporter");
|
teleporter = new Teleporter("teleporter");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package io.anuke.mindustry.content.blocks;
|
package io.anuke.mindustry.content.blocks;
|
||||||
|
|
||||||
|
import io.anuke.mindustry.content.Items;
|
||||||
import io.anuke.mindustry.content.UnitTypes;
|
import io.anuke.mindustry.content.UnitTypes;
|
||||||
|
import io.anuke.mindustry.resource.ItemStack;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.blocks.types.production.UnitFactory;
|
import io.anuke.mindustry.world.blocks.types.production.UnitFactory;
|
||||||
|
|
||||||
@@ -9,5 +11,10 @@ public class UnitBlocks {
|
|||||||
|
|
||||||
flierFactory = new UnitFactory("flierfactory"){{
|
flierFactory = new UnitFactory("flierfactory"){{
|
||||||
type = UnitTypes.flier;
|
type = UnitTypes.flier;
|
||||||
|
produceTime = 400;
|
||||||
|
size = 2;
|
||||||
|
requirements = new ItemStack[]{
|
||||||
|
new ItemStack(Items.stone, 5)
|
||||||
|
};
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ public class Units {
|
|||||||
Unit[] result = {null};
|
Unit[] result = {null};
|
||||||
float[] cdist = {0};
|
float[] cdist = {0};
|
||||||
|
|
||||||
|
rect.setSize(range*2f).setCenter(x, y);
|
||||||
|
|
||||||
getNearbyEnemies(team, rect, e -> {
|
getNearbyEnemies(team, rect, e -> {
|
||||||
if (!predicate.test(e))
|
if (!predicate.test(e))
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import io.anuke.ucore.util.Timer;
|
|||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
|
||||||
|
import static io.anuke.mindustry.Vars.state;
|
||||||
import static io.anuke.mindustry.Vars.unitGroups;
|
import static io.anuke.mindustry.Vars.unitGroups;
|
||||||
|
|
||||||
public class BaseUnit extends Unit {
|
public class BaseUnit extends Unit {
|
||||||
@@ -71,7 +72,7 @@ public class BaseUnit extends Unit {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean collides(SolidEntity other){
|
public boolean collides(SolidEntity other){
|
||||||
return (other instanceof Bullet) && !(((Bullet) other).owner instanceof BaseUnit);
|
return other instanceof Bullet && state.teams.areEnemies((((Bullet) other).team), team);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -2,27 +2,47 @@ package io.anuke.mindustry.entities.units;
|
|||||||
|
|
||||||
import com.badlogic.gdx.math.Vector2;
|
import com.badlogic.gdx.math.Vector2;
|
||||||
import com.badlogic.gdx.utils.ObjectSet;
|
import com.badlogic.gdx.utils.ObjectSet;
|
||||||
|
import io.anuke.mindustry.entities.BulletType;
|
||||||
import io.anuke.mindustry.entities.Unit;
|
import io.anuke.mindustry.entities.Unit;
|
||||||
import io.anuke.mindustry.game.TeamInfo.TeamData;
|
import io.anuke.mindustry.game.TeamInfo.TeamData;
|
||||||
|
import io.anuke.mindustry.graphics.Fx;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
|
import io.anuke.ucore.core.Effects;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
|
import io.anuke.ucore.util.Angles;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.state;
|
import static io.anuke.mindustry.Vars.state;
|
||||||
|
|
||||||
public class FlyingUnitType extends UnitType {
|
public class FlyingUnitType extends UnitType {
|
||||||
private static Vector2 vec = new Vector2();
|
private static Vector2 vec = new Vector2();
|
||||||
|
|
||||||
|
protected float boosterLength = 4.5f;
|
||||||
|
|
||||||
public FlyingUnitType(String name) {
|
public FlyingUnitType(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
speed = 1f;
|
speed = 0.2f;
|
||||||
|
maxVelocity = 4f;
|
||||||
|
drag = 0.01f;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(BaseUnit unit) {
|
||||||
|
super.update(unit);
|
||||||
|
|
||||||
|
unit.rotation = unit.velocity.angle();
|
||||||
|
|
||||||
|
if(unit.velocity.len() > 0.2f && unit.timer.get(timerBoost, 2f)){
|
||||||
|
Effects.effect(Fx.dashsmoke, unit.x + Angles.trnsx(unit.rotation + 180f, boosterLength),
|
||||||
|
unit.y + Angles.trnsy(unit.rotation + 180f, boosterLength));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(BaseUnit unit) {
|
public void draw(BaseUnit unit) {
|
||||||
Draw.alpha(unit.hitTime / Unit.hitDuration);
|
Draw.alpha(unit.hitTime / Unit.hitDuration);
|
||||||
|
|
||||||
Draw.rect(name, unit.x, unit.y, unit.rotation);
|
Draw.rect(name, unit.x, unit.y, unit.rotation - 90);
|
||||||
|
|
||||||
Draw.alpha(1f);
|
Draw.alpha(1f);
|
||||||
}
|
}
|
||||||
@@ -30,10 +50,22 @@ public class FlyingUnitType extends UnitType {
|
|||||||
@Override
|
@Override
|
||||||
public void behavior(BaseUnit unit) {
|
public void behavior(BaseUnit unit) {
|
||||||
vec.set(unit.target.x - unit.x, unit.target.y - unit.y);
|
vec.set(unit.target.x - unit.x, unit.target.y - unit.y);
|
||||||
vec.setLength(speed);
|
|
||||||
|
|
||||||
unit.velocity.lerp(vec, 0.1f * Timers.delta()); //TODO clamp it so it doesn't glitch out at low fps
|
float ang = vec.angle();
|
||||||
|
|
||||||
|
float circleLength = 40f;
|
||||||
|
|
||||||
|
if(vec.len() < circleLength){
|
||||||
|
vec.rotate((circleLength-vec.len())/circleLength * 180f);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec.setLength(speed * Timers.delta());
|
||||||
|
|
||||||
|
unit.velocity.add(vec); //TODO clamp it so it doesn't glitch out at low fps
|
||||||
|
|
||||||
|
if(unit.timer.get(timerReload, reload)){
|
||||||
|
shoot(unit, BulletType.shot, ang, 4f);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package io.anuke.mindustry.entities.units;
|
package io.anuke.mindustry.entities.units;
|
||||||
|
|
||||||
import com.badlogic.gdx.utils.Array;
|
import com.badlogic.gdx.utils.Array;
|
||||||
|
import io.anuke.mindustry.entities.Bullet;
|
||||||
import io.anuke.mindustry.entities.BulletType;
|
import io.anuke.mindustry.entities.BulletType;
|
||||||
import io.anuke.mindustry.entities.Unit;
|
import io.anuke.mindustry.entities.Unit;
|
||||||
import io.anuke.mindustry.entities.Units;
|
import io.anuke.mindustry.entities.Units;
|
||||||
@@ -9,6 +10,7 @@ import io.anuke.mindustry.net.Net;
|
|||||||
import io.anuke.mindustry.net.NetEvents;
|
import io.anuke.mindustry.net.NetEvents;
|
||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
|
import io.anuke.ucore.util.Angles;
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.tilesize;
|
import static io.anuke.mindustry.Vars.tilesize;
|
||||||
@@ -21,6 +23,8 @@ public abstract class UnitType {
|
|||||||
private static int timerIndex = 0;
|
private static int timerIndex = 0;
|
||||||
|
|
||||||
protected static final int timerTarget = timerIndex++;
|
protected static final int timerTarget = timerIndex++;
|
||||||
|
protected static final int timerBoost = timerIndex++;
|
||||||
|
protected static final int timerReload = timerIndex++;
|
||||||
|
|
||||||
public final String name;
|
public final String name;
|
||||||
public final byte id;
|
public final byte id;
|
||||||
@@ -35,6 +39,8 @@ public abstract class UnitType {
|
|||||||
protected float mass = 1f;
|
protected float mass = 1f;
|
||||||
protected boolean isFlying;
|
protected boolean isFlying;
|
||||||
protected float drag = 0.1f;
|
protected float drag = 0.1f;
|
||||||
|
protected float maxVelocity = 5f;
|
||||||
|
protected float reload = 40f;
|
||||||
|
|
||||||
public UnitType(String name){
|
public UnitType(String name){
|
||||||
this.id = lastid++;
|
this.id = lastid++;
|
||||||
@@ -64,6 +70,7 @@ public abstract class UnitType {
|
|||||||
|
|
||||||
//TODO logic
|
//TODO logic
|
||||||
|
|
||||||
|
unit.velocity.limit(maxVelocity);
|
||||||
unit.x += unit.velocity.x / mass;
|
unit.x += unit.velocity.x / mass;
|
||||||
unit.y += unit.velocity.y / mass;
|
unit.y += unit.velocity.y / mass;
|
||||||
|
|
||||||
@@ -88,8 +95,10 @@ public abstract class UnitType {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onShoot(BaseUnit unit, BulletType type, float rotation){
|
public void shoot(BaseUnit unit, BulletType type, float rotation, float translation){
|
||||||
//TODO remove?
|
new Bullet(type, unit,
|
||||||
|
unit.x + Angles.trnsx(rotation, translation),
|
||||||
|
unit.y + Angles.trnsy(rotation, translation), rotation).add();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onDeath(BaseUnit unit){
|
public void onDeath(BaseUnit unit){
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import io.anuke.mindustry.world.blocks.types.defense.Turret;
|
|||||||
import io.anuke.mindustry.world.blocks.types.distribution.Conveyor;
|
import io.anuke.mindustry.world.blocks.types.distribution.Conveyor;
|
||||||
import io.anuke.mindustry.world.blocks.types.distribution.Router;
|
import io.anuke.mindustry.world.blocks.types.distribution.Router;
|
||||||
import io.anuke.mindustry.world.blocks.types.production.Drill;
|
import io.anuke.mindustry.world.blocks.types.production.Drill;
|
||||||
import io.anuke.mindustry.world.blocks.types.generation.PowerDistributor;
|
import io.anuke.mindustry.world.blocks.types.power.PowerDistributor;
|
||||||
import io.anuke.mindustry.world.blocks.types.production.Smelter;
|
import io.anuke.mindustry.world.blocks.types.production.Smelter;
|
||||||
import io.anuke.ucore.util.Bundles;
|
import io.anuke.ucore.util.Bundles;
|
||||||
|
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ public class MapIO {
|
|||||||
Pixmap pixmap = new Pixmap(data.width(), data.height(), Format.RGBA8888);
|
Pixmap pixmap = new Pixmap(data.width(), data.height(), Format.RGBA8888);
|
||||||
data.position(0, 0);
|
data.position(0, 0);
|
||||||
|
|
||||||
for(int x = 0; x < data.width(); x ++){
|
for(int y = 0; y < data.height(); y ++){
|
||||||
for(int y = 0; y < data.height(); y ++){
|
for(int x = 0; x < data.width(); x ++){
|
||||||
TileDataMarker marker = data.read();
|
TileDataMarker marker = data.read();
|
||||||
Block floor = Block.getByID(marker.floor);
|
Block floor = Block.getByID(marker.floor);
|
||||||
Block wall = Block.getByID(marker.wall);
|
Block wall = Block.getByID(marker.wall);
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package io.anuke.mindustry.io.versions;
|
|||||||
import com.badlogic.gdx.utils.IntMap;
|
import com.badlogic.gdx.utils.IntMap;
|
||||||
import com.badlogic.gdx.utils.TimeUtils;
|
import com.badlogic.gdx.utils.TimeUtils;
|
||||||
import io.anuke.mindustry.content.Weapons;
|
import io.anuke.mindustry.content.Weapons;
|
||||||
|
import io.anuke.mindustry.content.blocks.Blocks;
|
||||||
|
import io.anuke.mindustry.content.blocks.StorageBlocks;
|
||||||
import io.anuke.mindustry.entities.units.BaseUnit;
|
import io.anuke.mindustry.entities.units.BaseUnit;
|
||||||
import io.anuke.mindustry.entities.units.UnitType;
|
import io.anuke.mindustry.entities.units.UnitType;
|
||||||
import io.anuke.mindustry.game.Difficulty;
|
import io.anuke.mindustry.game.Difficulty;
|
||||||
@@ -13,9 +15,9 @@ import io.anuke.mindustry.resource.Item;
|
|||||||
import io.anuke.mindustry.resource.Upgrade;
|
import io.anuke.mindustry.resource.Upgrade;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.content.blocks.Blocks;
|
|
||||||
import io.anuke.mindustry.world.blocks.types.BlockPart;
|
import io.anuke.mindustry.world.blocks.types.BlockPart;
|
||||||
import io.anuke.ucore.core.Core;
|
import io.anuke.ucore.core.Core;
|
||||||
|
import io.anuke.ucore.entities.Entities;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.util.Bits;
|
import io.anuke.ucore.util.Bits;
|
||||||
|
|
||||||
@@ -140,6 +142,8 @@ public class Save16 extends SaveFileVersion {
|
|||||||
short width = stream.readShort();
|
short width = stream.readShort();
|
||||||
short height = stream.readShort();
|
short height = stream.readShort();
|
||||||
|
|
||||||
|
Entities.resizeTree(0, 0, width * tilesize, height * tilesize);
|
||||||
|
|
||||||
Tile[][] tiles = world.createTiles(width, height);
|
Tile[][] tiles = world.createTiles(width, height);
|
||||||
|
|
||||||
for(int x = 0; x < width; x ++){
|
for(int x = 0; x < width; x ++){
|
||||||
@@ -161,6 +165,8 @@ public class Save16 extends SaveFileVersion {
|
|||||||
byte team = Bits.getLeftByte(tr);
|
byte team = Bits.getLeftByte(tr);
|
||||||
byte rotation = Bits.getRightByte(tr);
|
byte rotation = Bits.getRightByte(tr);
|
||||||
|
|
||||||
|
Team t = Team.values()[team];
|
||||||
|
|
||||||
tile.setTeam(Team.values()[team]);
|
tile.setTeam(Team.values()[team]);
|
||||||
tile.entity.health = health;
|
tile.entity.health = health;
|
||||||
tile.setRotation(rotation);
|
tile.setRotation(rotation);
|
||||||
@@ -170,6 +176,11 @@ public class Save16 extends SaveFileVersion {
|
|||||||
if (tile.entity.liquid != null) tile.entity.liquid.read(stream);
|
if (tile.entity.liquid != null) tile.entity.liquid.read(stream);
|
||||||
|
|
||||||
tile.entity.read(stream);
|
tile.entity.read(stream);
|
||||||
|
|
||||||
|
if(tile.block() == StorageBlocks.core &&
|
||||||
|
state.teams.has(t)){
|
||||||
|
state.teams.get(t).cores.add(tile);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tiles[x][y] = tile;
|
tiles[x][y] = tile;
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ public enum BarType {
|
|||||||
inventory(Color.GREEN),
|
inventory(Color.GREEN),
|
||||||
power(Color.YELLOW),
|
power(Color.YELLOW),
|
||||||
liquid(Color.ROYAL),
|
liquid(Color.ROYAL),
|
||||||
heat(Color.CORAL);
|
heat(Color.CORAL),
|
||||||
|
production(Color.PURPLE);
|
||||||
|
|
||||||
public final Color color;
|
public final Color color;
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import io.anuke.mindustry.game.Team;
|
|||||||
import io.anuke.mindustry.io.MapTileData;
|
import io.anuke.mindustry.io.MapTileData;
|
||||||
import io.anuke.mindustry.io.MapTileData.TileDataMarker;
|
import io.anuke.mindustry.io.MapTileData.TileDataMarker;
|
||||||
import io.anuke.ucore.noise.Noise;
|
import io.anuke.ucore.noise.Noise;
|
||||||
import io.anuke.ucore.util.Log;
|
|
||||||
|
|
||||||
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;
|
||||||
@@ -27,9 +26,9 @@ public class WorldGenerator {
|
|||||||
Noise.setSeed(world.getSeed());
|
Noise.setSeed(world.getSeed());
|
||||||
|
|
||||||
IntArray multiblocks = new IntArray();
|
IntArray multiblocks = new IntArray();
|
||||||
|
|
||||||
for(int x = 0; x < data.width(); x ++){
|
for(int y = 0; y < data.height(); y ++){
|
||||||
for(int y = 0; y < data.height(); y ++){
|
for(int x = 0; x < data.width(); x ++){
|
||||||
TileDataMarker tile = data.read();
|
TileDataMarker tile = data.read();
|
||||||
tiles[x][y] = new Tile(x, y, tile.floor, tile.wall, tile.rotation, tile.team);
|
tiles[x][y] = new Tile(x, y, tile.floor, tile.wall, tile.rotation, tile.team);
|
||||||
|
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ public class Turret extends Block{
|
|||||||
|
|
||||||
if(entity.timer.get(timerTarget, targetInterval)){
|
if(entity.timer.get(timerTarget, targetInterval)){
|
||||||
entity.target = Units.getClosestEnemy(tile.getTeam(),
|
entity.target = Units.getClosestEnemy(tile.getTeam(),
|
||||||
tile.worldx(), tile.worldy(), range, e -> !e.isDead());
|
tile.drawx(), tile.drawy(), range, e -> !e.isDead());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(entity.target != null){
|
if(entity.target != null){
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.anuke.mindustry.world.blocks.types.generation;
|
package io.anuke.mindustry.world.blocks.types.power;
|
||||||
|
|
||||||
import com.badlogic.gdx.graphics.Color;
|
import com.badlogic.gdx.graphics.Color;
|
||||||
import io.anuke.mindustry.graphics.Fx;
|
import io.anuke.mindustry.graphics.Fx;
|
||||||
@@ -6,7 +6,6 @@ import io.anuke.mindustry.resource.Item;
|
|||||||
import io.anuke.mindustry.world.BarType;
|
import io.anuke.mindustry.world.BarType;
|
||||||
import io.anuke.mindustry.world.BlockBar;
|
import io.anuke.mindustry.world.BlockBar;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.types.generation.PowerGenerator.GeneratorEntity;
|
|
||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
import io.anuke.ucore.core.Effects.Effect;
|
import io.anuke.ucore.core.Effects.Effect;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.anuke.mindustry.world.blocks.types.generation;
|
package io.anuke.mindustry.world.blocks.types.power;
|
||||||
|
|
||||||
import io.anuke.mindustry.entities.TileEntity;
|
import io.anuke.mindustry.entities.TileEntity;
|
||||||
import io.anuke.mindustry.graphics.Fx;
|
import io.anuke.mindustry.graphics.Fx;
|
||||||
@@ -11,7 +11,7 @@ import io.anuke.ucore.graphics.Draw;
|
|||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
import io.anuke.ucore.util.Strings;
|
import io.anuke.ucore.util.Strings;
|
||||||
|
|
||||||
public class LiquidPowerGenerator extends PowerGenerator {
|
public class LiquidPowerGenerator extends io.anuke.mindustry.world.blocks.types.power.PowerGenerator {
|
||||||
public Liquid generateLiquid;
|
public Liquid generateLiquid;
|
||||||
public float powerPerLiquid = 0.13f;
|
public float powerPerLiquid = 0.13f;
|
||||||
/**Maximum liquid used per frame.*/
|
/**Maximum liquid used per frame.*/
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.anuke.mindustry.world.blocks.types.generation;
|
package io.anuke.mindustry.world.blocks.types.power;
|
||||||
|
|
||||||
import com.badlogic.gdx.graphics.Color;
|
import com.badlogic.gdx.graphics.Color;
|
||||||
import io.anuke.mindustry.content.Liquids;
|
import io.anuke.mindustry.content.Liquids;
|
||||||
@@ -24,7 +24,7 @@ import java.io.IOException;
|
|||||||
|
|
||||||
import static io.anuke.mindustry.Vars.tilesize;
|
import static io.anuke.mindustry.Vars.tilesize;
|
||||||
|
|
||||||
public class NuclearReactor extends LiquidPowerGenerator{
|
public class NuclearReactor extends io.anuke.mindustry.world.blocks.types.power.LiquidPowerGenerator {
|
||||||
protected final int timerFuel = timers++;
|
protected final int timerFuel = timers++;
|
||||||
|
|
||||||
protected final Translator tr = new Translator();
|
protected final Translator tr = new Translator();
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.anuke.mindustry.world.blocks.types.generation;
|
package io.anuke.mindustry.world.blocks.types.power;
|
||||||
|
|
||||||
import com.badlogic.gdx.graphics.Color;
|
import com.badlogic.gdx.graphics.Color;
|
||||||
import com.badlogic.gdx.math.Vector2;
|
import com.badlogic.gdx.math.Vector2;
|
||||||
@@ -258,7 +258,8 @@ public class PowerDistributor extends PowerBlock{
|
|||||||
return Vector2.dst(tile.worldx(), tile.worldy(), link.worldx(), link.worldy()) <= Math.max(laserRange * tilesize,
|
return Vector2.dst(tile.worldx(), tile.worldy(), link.worldx(), link.worldy()) <= Math.max(laserRange * tilesize,
|
||||||
((PowerDistributor)link.block()).laserRange * tilesize) - tilesize/2f;
|
((PowerDistributor)link.block()).laserRange * tilesize) - tilesize/2f;
|
||||||
}else{
|
}else{
|
||||||
return Vector2.dst(tile.worldx(), tile.worldy(), link.worldx(), link.worldy()) <= laserRange * tilesize - tilesize/2f;
|
return Vector2.dst(tile.worldx(), tile.worldy(), link.worldx(), link.worldy())
|
||||||
|
<= laserRange * tilesize - tilesize/2f + (link.block().size-1)*tilesize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.anuke.mindustry.world.blocks.types.generation;
|
package io.anuke.mindustry.world.blocks.types.power;
|
||||||
|
|
||||||
import com.badlogic.gdx.math.GridPoint2;
|
import com.badlogic.gdx.math.GridPoint2;
|
||||||
import io.anuke.mindustry.entities.TileEntity;
|
import io.anuke.mindustry.entities.TileEntity;
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package io.anuke.mindustry.world.blocks.types.generation;
|
package io.anuke.mindustry.world.blocks.types.power;
|
||||||
|
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
|
|
||||||
public class SolarGenerator extends PowerGenerator {
|
public class SolarGenerator extends io.anuke.mindustry.world.blocks.types.power.PowerGenerator {
|
||||||
/**power generated per frame*/
|
/**power generated per frame*/
|
||||||
protected float generation = 0.005f;
|
protected float generation = 0.005f;
|
||||||
|
|
||||||
@@ -1,13 +1,22 @@
|
|||||||
package io.anuke.mindustry.world.blocks.types.production;
|
package io.anuke.mindustry.world.blocks.types.production;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||||
|
import io.anuke.mindustry.Vars;
|
||||||
import io.anuke.mindustry.entities.TileEntity;
|
import io.anuke.mindustry.entities.TileEntity;
|
||||||
import io.anuke.mindustry.entities.units.BaseUnit;
|
import io.anuke.mindustry.entities.units.BaseUnit;
|
||||||
import io.anuke.mindustry.entities.units.UnitType;
|
import io.anuke.mindustry.entities.units.UnitType;
|
||||||
|
import io.anuke.mindustry.resource.Item;
|
||||||
import io.anuke.mindustry.resource.ItemStack;
|
import io.anuke.mindustry.resource.ItemStack;
|
||||||
|
import io.anuke.mindustry.world.BarType;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
|
import io.anuke.mindustry.world.BlockBar;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.types.modules.InventoryModule;
|
import io.anuke.mindustry.world.blocks.types.modules.InventoryModule;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
|
import io.anuke.ucore.graphics.Draw;
|
||||||
|
import io.anuke.ucore.graphics.Lines;
|
||||||
|
import io.anuke.ucore.util.Mathf;
|
||||||
|
import io.anuke.ucore.util.Tmp;
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
@@ -18,6 +27,7 @@ public class UnitFactory extends Block {
|
|||||||
protected ItemStack[] requirements;
|
protected ItemStack[] requirements;
|
||||||
protected float produceTime = 1000f;
|
protected float produceTime = 1000f;
|
||||||
protected float powerUse = 0.1f;
|
protected float powerUse = 0.1f;
|
||||||
|
protected String unitRegion;
|
||||||
|
|
||||||
public UnitFactory(String name) {
|
public UnitFactory(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
@@ -26,6 +36,43 @@ public class UnitFactory extends Block {
|
|||||||
hasPower = true;
|
hasPower = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBars() {
|
||||||
|
super.setBars();
|
||||||
|
|
||||||
|
bars.add(new BlockBar(BarType.production, true, tile -> tile.<UnitFactoryEntity>entity().buildTime / produceTime));
|
||||||
|
bars.remove(BarType.inventory);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(Tile tile) {
|
||||||
|
UnitFactoryEntity entity = tile.entity();
|
||||||
|
TextureRegion region = Draw.region(unitRegion == null ? type.name : unitRegion);
|
||||||
|
|
||||||
|
int w = (int)(entity.buildTime/produceTime * region.getRegionWidth());
|
||||||
|
|
||||||
|
Draw.rect(name(), tile.drawx(), tile.drawy());
|
||||||
|
|
||||||
|
Draw.alpha(0.2f);
|
||||||
|
//Draw.rect(region, tile.drawx(), tile.drawy());
|
||||||
|
Draw.color();
|
||||||
|
|
||||||
|
Tmp.tr1.setRegion(region, region.getRegionWidth() - w, 0, w, region.getRegionHeight());
|
||||||
|
Draw.rect(Tmp.tr1, tile.drawx(), tile.drawy());
|
||||||
|
|
||||||
|
Draw.color("accent");
|
||||||
|
|
||||||
|
Lines.lineAngleCenter(
|
||||||
|
tile.drawx() + Mathf.sin(Timers.time(), 5f, Vars.tilesize/2f*size - 2f),
|
||||||
|
tile.drawy(),
|
||||||
|
90,
|
||||||
|
size * Vars.tilesize - 4f);
|
||||||
|
|
||||||
|
Draw.reset();
|
||||||
|
|
||||||
|
Draw.rect(name + "-top", tile.drawx(), tile.drawy());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(Tile tile) {
|
public void update(Tile tile) {
|
||||||
UnitFactoryEntity entity = tile.entity();
|
UnitFactoryEntity entity = tile.entity();
|
||||||
@@ -40,7 +87,8 @@ public class UnitFactory extends Block {
|
|||||||
|
|
||||||
if(entity.buildTime >= produceTime){
|
if(entity.buildTime >= produceTime){
|
||||||
BaseUnit unit = new BaseUnit(type, tile.getTeam());
|
BaseUnit unit = new BaseUnit(type, tile.getTeam());
|
||||||
unit.set(tile.drawx(), tile.drawy());
|
unit.set(tile.drawx(), tile.drawy()).add();
|
||||||
|
unit.velocity.y = 4f;
|
||||||
entity.buildTime = 0f;
|
entity.buildTime = 0f;
|
||||||
|
|
||||||
for(ItemStack stack : requirements){
|
for(ItemStack stack : requirements){
|
||||||
@@ -50,6 +98,16 @@ public class UnitFactory extends Block {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean acceptItem(Item item, Tile tile, Tile source) {
|
||||||
|
for(ItemStack stack : requirements){
|
||||||
|
if(item == stack.item && tile.entity.inventory.getItem(item) <= stack.amount*2){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TileEntity getEntity() {
|
public TileEntity getEntity() {
|
||||||
return new UnitFactoryEntity();
|
return new UnitFactoryEntity();
|
||||||
|
|||||||