diff --git a/core/assets-raw/sprites/blocks/weaponfactory.png b/core/assets-raw/sprites/blocks/weaponfactory.png new file mode 100644 index 0000000000..e2943a001d Binary files /dev/null and b/core/assets-raw/sprites/blocks/weaponfactory.png differ diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 9d8444d0c4..6b5af486b2 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -266,18 +266,20 @@ keybind.weapon_6.name=weapon_6 mode.waves.name=waves mode.sandbox.name=sandbox mode.freebuild.name=freebuild -weapon.blaster.name=blaster -weapon.blaster.description=Shoots a slow, weak bullet. -weapon.triblaster.name=triblaster -weapon.triblaster.description=Shoots 3 bullets in a spread. -weapon.multigun.name=multigun -weapon.multigun.description=Shoots inaccurate bullets with a high\nrate of fire. -weapon.flamer.name=flamer -weapon.flamer.description=Shoots a stream of fire. -weapon.railgun.name=railgun -weapon.railgun.description=Shoots one long-range bullet. -weapon.mortar.name=mortar -weapon.mortar.description=Shoots a slow, but damaging shell. +upgrade.standard.name=standard +upgrade.standard.description=The standard mech. +upgrade.blaster.name=blaster +upgrade.blaster.description=Shoots a slow, weak bullet. +upgrade.triblaster.name=triblaster +upgrade.triblaster.description=Shoots 3 bullets in a spread. +upgrade.multigun.name=multigun +upgrade.multigun.description=Shoots inaccurate bullets with a high\nrate of fire. +upgrade.flamer.name=flamer +upgrade.flamer.description=Shoots a stream of fire. +upgrade.railgun.name=railgun +upgrade.railgun.description=Shoots one long-range bullet. +upgrade.mortar.name=mortar +upgrade.mortar.description=Shoots a slow, but damaging shell. item.stone.name=stone item.iron.name=iron item.coal.name=coal @@ -289,6 +291,7 @@ liquid.water.name=water liquid.plasma.name=plasma liquid.lava.name=lava liquid.oil.name=oil +block.weaponfactory.name=weapon factory block.air.name=air block.blockpart.name=blockpart block.deepwater.name=deepwater diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index 99851e2016..d36d43d5fb 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -95,6 +95,13 @@ blocks/block-2x2 orig: 16, 16 offset: 0, 0 index: -1 +blocks/weaponfactory + rotate: false + xy: 844, 495 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 blocks/block-3x3 rotate: false xy: 698, 313 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 05bdfbdeae..ddb978e49e 100644 Binary files a/core/assets/sprites/sprites.png and b/core/assets/sprites/sprites.png differ diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/io/anuke/mindustry/core/NetClient.java index 7e3a7746e7..650de8cbdd 100644 --- a/core/src/io/anuke/mindustry/core/NetClient.java +++ b/core/src/io/anuke/mindustry/core/NetClient.java @@ -17,6 +17,7 @@ import io.anuke.mindustry.net.Net.SendMode; import io.anuke.mindustry.net.Packets.*; import io.anuke.mindustry.net.Syncable; import io.anuke.mindustry.net.Syncable.Interpolator; +import io.anuke.mindustry.resource.Upgrade; import io.anuke.mindustry.resource.Weapon; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; @@ -148,7 +149,7 @@ public class NetClient extends Module { Net.handle(ShootPacket.class, packet -> { Player player = Vars.control.playerGroup.getByID(packet.playerid); - Weapon weapon = Weapon.values()[packet.weaponid]; + Weapon weapon = (Weapon) Upgrade.getByID(packet.weaponid); weapon.shoot(player, packet.x, packet.y, packet.rotation); }); @@ -266,7 +267,7 @@ public class NetClient extends Module { public void handleUpgrade(Weapon weapon){ UpgradePacket packet = new UpgradePacket(); - packet.id = weapon.ordinal(); + packet.id = weapon.id; Net.send(packet, SendMode.tcp); } @@ -283,7 +284,7 @@ public class NetClient extends Module { public void handleShoot(Weapon weapon, float x, float y, float angle){ ShootPacket packet = new ShootPacket(); - packet.weaponid = (byte)weapon.ordinal(); + packet.weaponid = (byte)weapon.id; packet.x = x; packet.y = y; packet.rotation = angle; diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index 0c2fb6ad92..647bbcbb18 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -15,9 +15,7 @@ import io.anuke.mindustry.io.NetworkIO; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Net.SendMode; import io.anuke.mindustry.net.Packets.*; -import io.anuke.mindustry.resource.ItemStack; -import io.anuke.mindustry.resource.Recipe; -import io.anuke.mindustry.resource.Weapon; +import io.anuke.mindustry.resource.*; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.UCore; @@ -118,7 +116,7 @@ public class NetServer extends Module{ Net.handleServer(ShootPacket.class, packet -> { Player player = connections.get(Net.getLastConnection()); - Weapon weapon = Weapon.values()[packet.weaponid]; + Weapon weapon = (Weapon)Upgrade.getByID(packet.weaponid); weapon.shoot(player, packet.x, packet.y, packet.rotation); packet.playerid = player.id; @@ -129,7 +127,7 @@ public class NetServer extends Module{ Vars.control.input.placeBlockInternal(packet.x, packet.y, Block.getByID(packet.block), packet.rotation, true, false); packet.playerid = connections.get(Net.getLastConnection()).id; - Recipe recipe = Recipe.getByResult(Block.getByID(packet.block)); + Recipe recipe = Recipes.getByResult(Block.getByID(packet.block)); if(recipe != null){ for(ItemStack stack : recipe.requirements){ Vars.control.removeItem(stack); @@ -157,8 +155,9 @@ public class NetServer extends Module{ }); Net.handleServer(UpgradePacket.class, packet -> { - Weapon weapon = Weapon.values()[packet.id]; - Vars.control.removeItems(weapon.requirements); + Weapon weapon = (Weapon)Upgrade.getByID(packet.id); + //TODO + //Vars.control.removeItems(weapon.requirements); }); } diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index b280aacf2f..8f31600b8f 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -16,15 +16,16 @@ import io.anuke.ucore.util.Mathf; import static io.anuke.mindustry.Vars.*; public class Player extends DestructibleEntity implements Syncable{ - private static final float speed = 1.1f; - private static final float dashSpeed = 1.8f; + static final float speed = 1.1f; + static final float dashSpeed = 1.8f; public String name = "name"; - public Weapon weapon = Weapon.blaster; - public Mech mech = Mech.standard; - public float angle; public boolean isAndroid; + public Weapon weapon = Weapon.blaster; + public Mech mech = Mech.standard; + + public float angle; public transient float targetAngle = 0f; public transient int clientid; @@ -90,9 +91,9 @@ public class Player extends DestructibleEntity implements Syncable{ String part = isAndroid ? "ship" : "mech"; if(Vars.snapCamera && Settings.getBool("smoothcam") && Settings.getBool("pixelate") && isLocal){ - Draw.rect(part+"-"+mech.name(), (int)x, (int)y, angle-90); + Draw.rect(part + "-" + mech.name, (int)x, (int)y, angle-90); }else{ - Draw.rect(part+"-"+mech.name(), x, y, angle-90); + Draw.rect(part + "-" + mech.name, x, y, angle-90); } } diff --git a/core/src/io/anuke/mindustry/input/InputHandler.java b/core/src/io/anuke/mindustry/input/InputHandler.java index 0bf239a3b3..aa8715f585 100644 --- a/core/src/io/anuke/mindustry/input/InputHandler.java +++ b/core/src/io/anuke/mindustry/input/InputHandler.java @@ -10,6 +10,7 @@ import io.anuke.mindustry.graphics.Fx; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.resource.ItemStack; import io.anuke.mindustry.resource.Recipe; +import io.anuke.mindustry.resource.Recipes; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.SpawnPoint; import io.anuke.mindustry.world.Tile; @@ -237,7 +238,7 @@ public abstract class InputHandler extends InputAdapter{ Block block = tile.isLinked() ? tile.getLinked().block() : tile.block(); Recipe result = null; - for(Recipe recipe : Recipe.values()){ + for(Recipe recipe : Recipes.all()){ if(recipe.result == block){ result = recipe; break; diff --git a/core/src/io/anuke/mindustry/io/BundleGen.java b/core/src/io/anuke/mindustry/io/BundleGen.java index dc65da789e..2a0834c194 100644 --- a/core/src/io/anuke/mindustry/io/BundleGen.java +++ b/core/src/io/anuke/mindustry/io/BundleGen.java @@ -7,7 +7,6 @@ import io.anuke.mindustry.core.Tutorial; import io.anuke.mindustry.core.Tutorial.Stage; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.Liquid; -import io.anuke.mindustry.resource.Weapon; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.GameMode; import io.anuke.mindustry.world.Map; @@ -47,10 +46,6 @@ public class BundleGen { for(GameMode mode : GameMode.values()){ write("mode." + mode.name() + ".name=" + mode.name()); } - for(Weapon weapon : Weapon.values()){ - write("weapon." + weapon.name() + ".name=" + weapon.name()); - write("weapon." + weapon.name() + ".description=" + weapon.description); - } for(Item item : Item.getAllItems()){ write("item." + item.name + ".name=" + item.name); } diff --git a/core/src/io/anuke/mindustry/io/versions/Save12.java b/core/src/io/anuke/mindustry/io/versions/Save12.java index 85a8410f11..02877137c2 100644 --- a/core/src/io/anuke/mindustry/io/versions/Save12.java +++ b/core/src/io/anuke/mindustry/io/versions/Save12.java @@ -7,6 +7,7 @@ import io.anuke.mindustry.entities.enemies.Enemy; import io.anuke.mindustry.entities.enemies.EnemyType; import io.anuke.mindustry.io.SaveFileVersion; import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.resource.Upgrade; import io.anuke.mindustry.resource.Weapon; import io.anuke.mindustry.world.BlockLoader; import io.anuke.mindustry.world.GameMode; @@ -65,7 +66,7 @@ public class Save12 extends SaveFileVersion { int weapons = stream.readByte(); for(int i = 0; i < weapons; i ++){ - Vars.control.addWeapon(Weapon.values()[stream.readByte()]); + Vars.control.addWeapon((Weapon)Upgrade.getByID(stream.readByte())); } Vars.ui.weaponfrag.update(); @@ -194,7 +195,7 @@ public class Save12 extends SaveFileVersion { //start at 1, because the first weapon is always the starter - ignore that for(int i = 1; i < Vars.control.getWeapons().size; i ++){ - stream.writeByte(Vars.control.getWeapons().get(i).ordinal()); //weapon ordinal + stream.writeByte(Vars.control.getWeapons().get(i).id); //weapon ordinal } //--INVENTORY-- diff --git a/core/src/io/anuke/mindustry/io/versions/Save13.java b/core/src/io/anuke/mindustry/io/versions/Save13.java index ba4ccbee17..bd000fa9ef 100644 --- a/core/src/io/anuke/mindustry/io/versions/Save13.java +++ b/core/src/io/anuke/mindustry/io/versions/Save13.java @@ -7,6 +7,7 @@ import io.anuke.mindustry.entities.enemies.Enemy; import io.anuke.mindustry.entities.enemies.EnemyType; import io.anuke.mindustry.io.SaveFileVersion; import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.resource.Upgrade; import io.anuke.mindustry.resource.Weapon; import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.blocks.Blocks; @@ -65,7 +66,7 @@ public class Save13 extends SaveFileVersion { int weapons = stream.readByte(); for(int i = 0; i < weapons; i ++){ - Vars.control.addWeapon(Weapon.values()[stream.readByte()]); + Vars.control.addWeapon((Weapon) Upgrade.getByID(stream.readByte())); } Vars.ui.weaponfrag.update(); @@ -204,7 +205,7 @@ public class Save13 extends SaveFileVersion { //start at 1, because the first weapon is always the starter - ignore that for(int i = 1; i < Vars.control.getWeapons().size; i ++){ - stream.writeByte(Vars.control.getWeapons().get(i).ordinal()); //weapon ordinal + stream.writeByte(Vars.control.getWeapons().get(i).id); //weapon ordinal } //--INVENTORY-- diff --git a/core/src/io/anuke/mindustry/io/versions/Save14.java b/core/src/io/anuke/mindustry/io/versions/Save14.java index a17bb8a914..18c045f74a 100644 --- a/core/src/io/anuke/mindustry/io/versions/Save14.java +++ b/core/src/io/anuke/mindustry/io/versions/Save14.java @@ -8,6 +8,7 @@ import io.anuke.mindustry.entities.enemies.Enemy; import io.anuke.mindustry.entities.enemies.EnemyType; import io.anuke.mindustry.io.SaveFileVersion; import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.resource.Upgrade; import io.anuke.mindustry.resource.Weapon; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.GameMode; @@ -83,7 +84,7 @@ public class Save14 extends SaveFileVersion{ int weapons = stream.readByte(); for(int i = 0; i < weapons; i ++){ - Vars.control.addWeapon(Weapon.values()[stream.readByte()]); + Vars.control.addWeapon((Weapon) Upgrade.getByID(stream.readByte())); } Vars.ui.weaponfrag.update(); @@ -232,7 +233,7 @@ public class Save14 extends SaveFileVersion{ //start at 1, because the first weapon is always the starter - ignore that for(int i = 1; i < Vars.control.getWeapons().size; i ++){ - stream.writeByte(Vars.control.getWeapons().get(i).ordinal()); //weapon ordinal + stream.writeByte(Vars.control.getWeapons().get(i).id); //weapon ordinal } //--INVENTORY-- diff --git a/core/src/io/anuke/mindustry/net/Packets.java b/core/src/io/anuke/mindustry/net/Packets.java index cef7f1dcca..c839caba21 100644 --- a/core/src/io/anuke/mindustry/net/Packets.java +++ b/core/src/io/anuke/mindustry/net/Packets.java @@ -116,6 +116,6 @@ public class Packets { } public static class UpgradePacket{ - public int id; //weapon ID only, currently + public byte id; //weapon ID only, currently } } diff --git a/core/src/io/anuke/mindustry/resource/Mech.java b/core/src/io/anuke/mindustry/resource/Mech.java index 7080cb7ec4..57a9bf4800 100644 --- a/core/src/io/anuke/mindustry/resource/Mech.java +++ b/core/src/io/anuke/mindustry/resource/Mech.java @@ -1,15 +1,11 @@ package io.anuke.mindustry.resource; -public enum Mech{ - standard, - scout{{ - - }}; - public float speedBoost = 1f, damageBoost = 1f; - public int regenRate = 10; - public int health = 20; +public class Mech extends Upgrade{ + public static final Mech - private Mech(){ - + standard = new Mech("standard"); + + public Mech(String name){ + super(name); } } diff --git a/core/src/io/anuke/mindustry/resource/Recipe.java b/core/src/io/anuke/mindustry/resource/Recipe.java index b2203cd380..9030f4ea34 100644 --- a/core/src/io/anuke/mindustry/resource/Recipe.java +++ b/core/src/io/anuke/mindustry/resource/Recipe.java @@ -1,114 +1,15 @@ package io.anuke.mindustry.resource; -import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.blocks.*; -import static io.anuke.mindustry.resource.Section.*; +public class Recipe { + public Block result; + public ItemStack[] requirements; + public Section section; -public enum Recipe{ - stonewall(defense, DefenseBlocks.stonewall, stack(Item.stone, 12)), - ironwall(defense, DefenseBlocks.ironwall, stack(Item.iron, 12)), - steelwall(defense, DefenseBlocks.steelwall, stack(Item.steel, 12)), - titaniumwall(defense, DefenseBlocks.titaniumwall, stack(Item.titanium, 12)), - duriumwall(defense, DefenseBlocks.diriumwall, stack(Item.dirium, 12)), - //compositewall(defense, DefenseBlocks.compositewall, stack(Item.dirium, 2), stack(Item.titanium, 2), stack(Item.steel, 2), stack(Item.iron, 2)), - steelwalllarge(defense, DefenseBlocks.steelwalllarge, stack(Item.steel, 12*4)), - titaniumwalllarge(defense, DefenseBlocks.titaniumwalllarge, stack(Item.titanium, 12*4)), - duriumwalllarge(defense, DefenseBlocks.diriumwalllarge, stack(Item.dirium, 12*4)), - door(defense, DefenseBlocks.door, stack(Item.steel, 3), stack(Item.iron, 3*4)), - largedoor(defense, DefenseBlocks.largedoor, stack(Item.steel, 3*4), stack(Item.iron, 3*4*4)), - titaniumshieldwall(defense, DefenseBlocks.titaniumshieldwall, stack(Item.titanium, 16)), - - conveyor(distribution, DistributionBlocks.conveyor, stack(Item.stone, 1)), - steelconveyor(distribution, DistributionBlocks.steelconveyor, stack(Item.steel, 1)), - poweredconveyor(distribution, DistributionBlocks.pulseconveyor, stack(Item.dirium, 1)), - router(distribution, DistributionBlocks.router, stack(Item.stone, 2)), - junction(distribution, DistributionBlocks.junction, stack(Item.iron, 2)), - tunnel(distribution, DistributionBlocks.tunnel, stack(Item.iron, 2)), - conduit(distribution, DistributionBlocks.conduit, stack(Item.steel, 1)), - pulseconduit(distribution, DistributionBlocks.pulseconduit, stack(Item.titanium, 1), stack(Item.steel, 1)), - liquidrouter(distribution, DistributionBlocks.liquidrouter, stack(Item.steel, 2)), - liquidjunction(distribution, DistributionBlocks.liquidjunction, stack(Item.steel, 2)), - sorter(distribution, DistributionBlocks.sorter, stack(Item.steel, 2)), - - turret(weapon, WeaponBlocks.turret, stack(Item.stone, 4)), - dturret(weapon, WeaponBlocks.doubleturret, stack(Item.stone, 7)), - machineturret(weapon, WeaponBlocks.machineturret, stack(Item.iron, 8), stack(Item.stone, 10)), - shotgunturret(weapon, WeaponBlocks.shotgunturret, stack(Item.iron, 10), stack(Item.stone, 10)), - flameturret(weapon, WeaponBlocks.flameturret, stack(Item.iron, 12), stack(Item.steel, 9)), - sniperturret(weapon, WeaponBlocks.sniperturret, stack(Item.iron, 15), stack(Item.steel, 10)), - laserturret(weapon, WeaponBlocks.laserturret, stack(Item.steel, 12), stack(Item.titanium, 12)), - mortarturret(weapon, WeaponBlocks.mortarturret, stack(Item.steel, 25), stack(Item.titanium, 15)), - teslaturret(weapon, WeaponBlocks.teslaturret, stack(Item.steel, 20), stack(Item.titanium, 25), stack(Item.dirium, 15)), - plasmaturret(weapon, WeaponBlocks.plasmaturret, stack(Item.steel, 10), stack(Item.titanium, 20), stack(Item.dirium, 15)), - chainturret(weapon, WeaponBlocks.chainturret, stack(Item.steel, 50), stack(Item.titanium, 25), stack(Item.dirium, 40)), - titanturret(weapon, WeaponBlocks.titanturret, stack(Item.steel, 70), stack(Item.titanium, 50), stack(Item.dirium, 55)), - - smelter(crafting, ProductionBlocks.smelter, stack(Item.stone, 40), stack(Item.iron, 40)), - crucible(crafting, ProductionBlocks.crucible, stack(Item.titanium, 40), stack(Item.steel, 40)), - coalpurifier(crafting, ProductionBlocks.coalpurifier, stack(Item.steel, 10), stack(Item.iron, 10)), - titaniumpurifier(crafting, ProductionBlocks.titaniumpurifier, stack(Item.steel, 30), stack(Item.iron, 30)), - oilrefinery(crafting, ProductionBlocks.oilrefinery, stack(Item.steel, 15), stack(Item.iron, 15)), - stoneformer(crafting, ProductionBlocks.stoneformer, stack(Item.steel, 10), stack(Item.iron, 10)), - lavasmelter(crafting, ProductionBlocks.lavasmelter, stack(Item.steel, 30), stack(Item.titanium, 15)), - - stonedrill(production, ProductionBlocks.stonedrill, stack(Item.stone, 12)), - irondrill(production, ProductionBlocks.irondrill, stack(Item.stone, 25)), - coaldrill(production, ProductionBlocks.coaldrill, stack(Item.stone, 25), stack(Item.iron, 40)), - titaniumdrill(production, ProductionBlocks.titaniumdrill, stack(Item.iron, 40), stack(Item.steel, 50)), - uraniumdrill(production, ProductionBlocks.uraniumdrill, stack(Item.iron, 40), stack(Item.steel, 40)), - omnidrill(production, ProductionBlocks.omnidrill, stack(Item.titanium, 30), stack(Item.dirium, 40)), - - coalgenerator(power, ProductionBlocks.coalgenerator, stack(Item.iron, 30), stack(Item.stone, 20)), - thermalgenerator(power, ProductionBlocks.thermalgenerator, stack(Item.steel, 30), stack(Item.iron, 30)), - combustiongenerator(power, ProductionBlocks.combustiongenerator, stack(Item.iron, 30), stack(Item.stone, 20)), - rtgenerator(power, ProductionBlocks.rtgenerator, stack(Item.titanium, 20), stack(Item.steel, 20)), - nuclearreactor(power, ProductionBlocks.nuclearReactor, stack(Item.titanium, 40), stack(Item.dirium, 40), stack(Item.steel, 50)), - powerbooster(power, DistributionBlocks.powerbooster, stack(Item.steel, 8), stack(Item.iron, 8)), - powerlaser(power, DistributionBlocks.powerlaser, stack(Item.steel, 3), stack(Item.iron, 3)), - powerlasercorner(power, DistributionBlocks.powerlasercorner, stack(Item.steel, 4), stack(Item.iron, 4)), - powerlaserrouter(power, DistributionBlocks.powerlaserrouter, stack(Item.steel, 5), stack(Item.iron, 5)), - - shieldgenerator(power, DefenseBlocks.shieldgenerator, stack(Item.titanium, 30), stack(Item.dirium, 30)), - - teleporter(distribution, DistributionBlocks.teleporter, stack(Item.steel, 20), stack(Item.dirium, 15)), - - healturret(power, DefenseBlocks.repairturret, stack(Item.iron, 30)), - megahealturret(power, DefenseBlocks.megarepairturret, stack(Item.iron, 20), stack(Item.steel, 30)), - - pump(production, ProductionBlocks.pump, stack(Item.steel, 10)), - fluxpump(production, ProductionBlocks.fluxpump, stack(Item.steel, 10), stack(Item.dirium, 5)); - - public Block result; - public ItemStack[] requirements; - public Section section; - - private Recipe(Section section, Block result, ItemStack... requirements){ - this.result = result; - this.requirements = requirements; - this.section = section; - } - - private static ItemStack stack(Item item, int amount){ - return new ItemStack(item, amount); - } - - public static Recipe getByResult(Block block){ - for(Recipe recipe : Recipe.values()){ - if(recipe.result == block){ - return recipe; - } - } - return null; - } - - public static Array getBy(Section section, Array r){ - for(Recipe recipe : Recipe.values()){ - if(recipe.section == section) - r.add(recipe); - } - - return r; - } + public Recipe(Section section, Block result, ItemStack... requirements){ + this.result = result; + this.requirements = requirements; + this.section = section; + } } diff --git a/core/src/io/anuke/mindustry/resource/Recipes.java b/core/src/io/anuke/mindustry/resource/Recipes.java new file mode 100644 index 0000000000..2cf60328db --- /dev/null +++ b/core/src/io/anuke/mindustry/resource/Recipes.java @@ -0,0 +1,113 @@ +package io.anuke.mindustry.resource; + +import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.blocks.DefenseBlocks; +import io.anuke.mindustry.world.blocks.DistributionBlocks; +import io.anuke.mindustry.world.blocks.ProductionBlocks; +import io.anuke.mindustry.world.blocks.WeaponBlocks; + +import static io.anuke.mindustry.resource.Section.*; + +public class Recipes { + private static final Array list = Array.with( + new Recipe(defense, DefenseBlocks.stonewall, stack(Item.stone, 12)), + new Recipe(defense, DefenseBlocks.ironwall, stack(Item.iron, 12)), + new Recipe(defense, DefenseBlocks.steelwall, stack(Item.steel, 12)), + new Recipe(defense, DefenseBlocks.titaniumwall, stack(Item.titanium, 12)), + new Recipe(defense, DefenseBlocks.diriumwall, stack(Item.dirium, 12)), + new Recipe(defense, DefenseBlocks.steelwalllarge, stack(Item.steel, 12*4)), + new Recipe(defense, DefenseBlocks.titaniumwalllarge, stack(Item.titanium, 12*4)), + new Recipe(defense, DefenseBlocks.diriumwalllarge, stack(Item.dirium, 12*4)), + new Recipe(defense, DefenseBlocks.door, stack(Item.steel, 3), stack(Item.iron, 3*4)), + new Recipe(defense, DefenseBlocks.largedoor, stack(Item.steel, 3*4), stack(Item.iron, 3*4*4)), + new Recipe(defense, DefenseBlocks.titaniumshieldwall, stack(Item.titanium, 16)), + + new Recipe(distribution, DistributionBlocks.conveyor, stack(Item.stone, 1)), + new Recipe(distribution, DistributionBlocks.steelconveyor, stack(Item.steel, 1)), + new Recipe(distribution, DistributionBlocks.pulseconveyor, stack(Item.dirium, 1)), + new Recipe(distribution, DistributionBlocks.router, stack(Item.stone, 2)), + new Recipe(distribution, DistributionBlocks.junction, stack(Item.iron, 2)), + new Recipe(distribution, DistributionBlocks.tunnel, stack(Item.iron, 2)), + new Recipe(distribution, DistributionBlocks.conduit, stack(Item.steel, 1)), + new Recipe(distribution, DistributionBlocks.pulseconduit, stack(Item.titanium, 1), stack(Item.steel, 1)), + new Recipe(distribution, DistributionBlocks.liquidrouter, stack(Item.steel, 2)), + new Recipe(distribution, DistributionBlocks.liquidjunction, stack(Item.steel, 2)), + new Recipe(distribution, DistributionBlocks.sorter, stack(Item.steel, 2)), + + new Recipe(weapon, WeaponBlocks.turret, stack(Item.stone, 4)), + new Recipe(weapon, WeaponBlocks.doubleturret, stack(Item.stone, 7)), + new Recipe(weapon, WeaponBlocks.machineturret, stack(Item.iron, 8), stack(Item.stone, 10)), + new Recipe(weapon, WeaponBlocks.shotgunturret, stack(Item.iron, 10), stack(Item.stone, 10)), + new Recipe(weapon, WeaponBlocks.flameturret, stack(Item.iron, 12), stack(Item.steel, 9)), + new Recipe(weapon, WeaponBlocks.sniperturret, stack(Item.iron, 15), stack(Item.steel, 10)), + new Recipe(weapon, WeaponBlocks.laserturret, stack(Item.steel, 12), stack(Item.titanium, 12)), + new Recipe(weapon, WeaponBlocks.mortarturret, stack(Item.steel, 25), stack(Item.titanium, 15)), + new Recipe(weapon, WeaponBlocks.teslaturret, stack(Item.steel, 20), stack(Item.titanium, 25), stack(Item.dirium, 15)), + new Recipe(weapon, WeaponBlocks.plasmaturret, stack(Item.steel, 10), stack(Item.titanium, 20), stack(Item.dirium, 15)), + new Recipe(weapon, WeaponBlocks.chainturret, stack(Item.steel, 50), stack(Item.titanium, 25), stack(Item.dirium, 40)), + new Recipe(weapon, WeaponBlocks.titanturret, stack(Item.steel, 70), stack(Item.titanium, 50), stack(Item.dirium, 55)), + + new Recipe(crafting, ProductionBlocks.smelter, stack(Item.stone, 40), stack(Item.iron, 40)), + new Recipe(crafting, ProductionBlocks.crucible, stack(Item.titanium, 40), stack(Item.steel, 40)), + new Recipe(crafting, ProductionBlocks.coalpurifier, stack(Item.steel, 10), stack(Item.iron, 10)), + new Recipe(crafting, ProductionBlocks.titaniumpurifier, stack(Item.steel, 30), stack(Item.iron, 30)), + new Recipe(crafting, ProductionBlocks.oilrefinery, stack(Item.steel, 15), stack(Item.iron, 15)), + new Recipe(crafting, ProductionBlocks.stoneformer, stack(Item.steel, 10), stack(Item.iron, 10)), + new Recipe(crafting, ProductionBlocks.lavasmelter, stack(Item.steel, 30), stack(Item.titanium, 15)), + new Recipe(crafting, ProductionBlocks.weaponFactory, stack(Item.steel, 30), stack(Item.titanium, 15)), + + new Recipe(production, ProductionBlocks.stonedrill, stack(Item.stone, 12)), + new Recipe(production, ProductionBlocks.irondrill, stack(Item.stone, 25)), + new Recipe(production, ProductionBlocks.coaldrill, stack(Item.stone, 25), stack(Item.iron, 40)), + new Recipe(production, ProductionBlocks.titaniumdrill, stack(Item.iron, 40), stack(Item.steel, 50)), + new Recipe(production, ProductionBlocks.uraniumdrill, stack(Item.iron, 40), stack(Item.steel, 40)), + new Recipe(production, ProductionBlocks.omnidrill, stack(Item.titanium, 30), stack(Item.dirium, 40)), + + new Recipe(power, ProductionBlocks.coalgenerator, stack(Item.iron, 30), stack(Item.stone, 20)), + new Recipe(power, ProductionBlocks.thermalgenerator, stack(Item.steel, 30), stack(Item.iron, 30)), + new Recipe(power, ProductionBlocks.combustiongenerator, stack(Item.iron, 30), stack(Item.stone, 20)), + new Recipe(power, ProductionBlocks.rtgenerator, stack(Item.titanium, 20), stack(Item.steel, 20)), + new Recipe(power, ProductionBlocks.nuclearReactor, stack(Item.titanium, 40), stack(Item.dirium, 40), stack(Item.steel, 50)), + new Recipe(power, DistributionBlocks.powerbooster, stack(Item.steel, 8), stack(Item.iron, 8)), + new Recipe(power, DistributionBlocks.powerlaser, stack(Item.steel, 3), stack(Item.iron, 3)), + new Recipe(power, DistributionBlocks.powerlasercorner, stack(Item.steel, 4), stack(Item.iron, 4)), + new Recipe(power, DistributionBlocks.powerlaserrouter, stack(Item.steel, 5), stack(Item.iron, 5)), + + new Recipe(power, DefenseBlocks.shieldgenerator, stack(Item.titanium, 30), stack(Item.dirium, 30)), + + new Recipe(distribution, DistributionBlocks.teleporter, stack(Item.steel, 20), stack(Item.dirium, 15)), + + new Recipe(power, DefenseBlocks.repairturret, stack(Item.iron, 30)), + new Recipe(power, DefenseBlocks.megarepairturret, stack(Item.iron, 20), stack(Item.steel, 30)), + + new Recipe(production, ProductionBlocks.pump, stack(Item.steel, 10)), + new Recipe(production, ProductionBlocks.fluxpump, stack(Item.steel, 10), stack(Item.dirium, 5)) + ); + + private static ItemStack stack(Item item, int amount){ + return new ItemStack(item, amount); + } + + public static Array all(){ + return list; + } + + public static Recipe getByResult(Block block){ + for(Recipe recipe : list){ + if(recipe.result == block){ + return recipe; + } + } + return null; + } + + public static Array getBy(Section section, Array r){ + for(Recipe recipe : list){ + if(recipe.section == section) + r.add(recipe); + } + + return r; + } +} diff --git a/core/src/io/anuke/mindustry/resource/Upgrade.java b/core/src/io/anuke/mindustry/resource/Upgrade.java index 5894ad9867..423528a483 100644 --- a/core/src/io/anuke/mindustry/resource/Upgrade.java +++ b/core/src/io/anuke/mindustry/resource/Upgrade.java @@ -1,18 +1,28 @@ package io.anuke.mindustry.resource; import com.badlogic.gdx.utils.Array; +import io.anuke.ucore.util.Bundles; public abstract class Upgrade { private static Array upgrades = new Array<>(); private static byte lastid; public final byte id; + public final String name; + public final String description; - public Upgrade(){ + public Upgrade(String name){ this.id = lastid ++; + this.name = name; + this.description = Bundles.getNotNull("upgrade."+name+".description"); + upgrades.add(this); } + public String localized(){ + return Bundles.get("upgrade." + name + ".name"); + } + public static Upgrade getByID(byte id){ return upgrades.get(id); } diff --git a/core/src/io/anuke/mindustry/resource/Weapon.java b/core/src/io/anuke/mindustry/resource/Weapon.java index dac9b4a4e8..f73bb61819 100644 --- a/core/src/io/anuke/mindustry/resource/Weapon.java +++ b/core/src/io/anuke/mindustry/resource/Weapon.java @@ -11,7 +11,6 @@ import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.core.Timers; import io.anuke.ucore.entities.Entity; import io.anuke.ucore.util.Angles; -import io.anuke.ucore.util.Bundles; import io.anuke.ucore.util.Mathf; public class Weapon extends Upgrade{ @@ -22,31 +21,31 @@ public class Weapon extends Upgrade{ effect = Fx.shoot3; } }, - triblaster = new Weapon("blaster", 13, BulletType.shot){ + triblaster = new Weapon("triblaster", 13, BulletType.shot){ { shots = 3; effect = Fx.shoot; } }, - multigun = new Weapon("blaster", 6, BulletType.multishot){ + multigun = new Weapon("multigun", 6, BulletType.multishot){ { effect = Fx.shoot2; inaccuracy = 8f; } }, - flamer = new Weapon("blaster", 5, BulletType.flame){ + flamer = new Weapon("flamer", 5, BulletType.flame){ { shootsound = "flame2"; inaccuracy = 12f; } }, - railgun = new Weapon("blaster", 40, BulletType.sniper){ + railgun = new Weapon("railgun", 40, BulletType.sniper){ { shootsound = "railgun"; effect = Fx.railshoot; } }, - mortar = new Weapon("blaster", 100, BulletType.shell){ + mortar = new Weapon("mortar", 100, BulletType.shell){ { shootsound = "bigshot"; effect = Fx.mortarshoot; @@ -60,15 +59,11 @@ public class Weapon extends Upgrade{ float inaccuracy = 0f; float shake = 0f; Effect effect; - - public final String description; - public final String name; private Weapon(String name, float reload, BulletType type){ + super(name); this.reload = reload; this.type = type; - this.name = name; - this.description = Bundles.getNotNull("weapon."+name+".description"); } public void update(Player p){ @@ -77,7 +72,6 @@ public class Weapon extends Upgrade{ } } - void shootInternal(Player p, float x, float y, float rotation){ Angles.shotgun(shots, 12f, rotation, f -> bullet(p, x, y, f + Mathf.range(inaccuracy))); Angles.translation(rotation, 3f); @@ -86,7 +80,7 @@ public class Weapon extends Upgrade{ Effects.sound(shootsound, x, y); } - void shoot(Player p, float x, float y, float angle){ + public void shoot(Player p, float x, float y, float angle){ shootInternal(p, x, y, angle); if(Net.active() && p == Vars.player){ @@ -98,10 +92,6 @@ public class Weapon extends Upgrade{ Angles.translation(angle, 3f); new Bullet(type, owner, x + Angles.x(), y + Angles.y(), angle).add(); } - - public String localized(){ - return Bundles.get("weapon."+name + ".name"); - } private static ItemStack stack(Item item, int amount){ return new ItemStack(item, amount); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/UpgradeDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/UpgradeDialog.java index 8000210ee4..f6182bbca3 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/UpgradeDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/UpgradeDialog.java @@ -1,24 +1,6 @@ package io.anuke.mindustry.ui.dialogs; -import com.badlogic.gdx.graphics.Color; -import io.anuke.mindustry.Vars; -import io.anuke.mindustry.core.GameState; -import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.net.Net; -import io.anuke.mindustry.resource.ItemStack; -import io.anuke.mindustry.resource.Weapon; -import io.anuke.ucore.core.Draw; -import io.anuke.ucore.core.Effects; -import io.anuke.ucore.function.Listenable; -import io.anuke.ucore.scene.ui.Image; -import io.anuke.ucore.scene.ui.TextButton; -import io.anuke.ucore.scene.ui.Tooltip; -import io.anuke.ucore.scene.ui.layout.Table; - -import static io.anuke.mindustry.Vars.control; -import static io.anuke.mindustry.Vars.ui; - public class UpgradeDialog extends FloatingDialog{ boolean wasPaused = false; @@ -28,6 +10,7 @@ public class UpgradeDialog extends FloatingDialog{ } void setup(){ + /* addCloseButton(); hidden(()->{ @@ -43,10 +26,14 @@ public class UpgradeDialog extends FloatingDialog{ weptab.margin(20); int i = 0; - for(Weapon weapon : Weapon.values()){ - TextButton button = new TextButton("$weapon."+weapon.name()+".name"); + for(Upgrade upgrade : Upgrade.getAllUpgrades()){ + if(!(upgrade instanceof Weapon)) continue; + + Weapon weapon = (Weapon)upgrade; + + TextButton button = new TextButton(weapon.localized()); - Image img = new Image(Draw.region(weapon.name())); + Image img = new Image(Draw.region(weapon.name)); button.add(img).size(8*5); button.getCells().reverse(); button.row(); @@ -139,6 +126,7 @@ public class UpgradeDialog extends FloatingDialog{ content().row(); content().add(weptab); content().row(); + */ } } diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java index 009f549e0e..d8e8420843 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java @@ -35,7 +35,7 @@ public class BlockConfigFragment implements Fragment { table.update(()->{ table.setOrigin(Align.center); - Vector2 pos = Graphics.screen(tile.worldx(), tile.worldy()); + Vector2 pos = Graphics.screen(tile.worldx() + tile.block().getPlaceOffset().x, tile.worldy() + tile.block().getPlaceOffset().y); table.setPosition(pos.x, pos.y, Align.center); if(configTile == null || configTile.block() == Blocks.air){ hideConfig(); diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java index 3c23a3ca78..a27486933c 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java @@ -9,10 +9,7 @@ import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.GameState; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.input.InputHandler; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.ItemStack; -import io.anuke.mindustry.resource.Recipe; -import io.anuke.mindustry.resource.Section; +import io.anuke.mindustry.resource.*; import io.anuke.mindustry.ui.dialogs.FloatingDialog; import io.anuke.ucore.core.Draw; import io.anuke.ucore.graphics.Hue; @@ -72,17 +69,17 @@ public class BlocksFragment implements Fragment{ Stack stack = new Stack(); ButtonGroup group = new ButtonGroup<>(); - Array recipes = new Array(); + Array recipes = new Array<>(); for (Section sec : Section.values()) { recipes.clear(); - Recipe.getBy(sec, recipes); + Recipes.getBy(sec, recipes); maxcol = Math.max((int) ((float) recipes.size / rows + 1), maxcol); } for (Section sec : Section.values()) { recipes.clear(); - Recipe.getBy(sec, recipes); + Recipes.getBy(sec, recipes); Table table = new Table(); diff --git a/core/src/io/anuke/mindustry/ui/fragments/WeaponFragment.java b/core/src/io/anuke/mindustry/ui/fragments/WeaponFragment.java index 3d69f44ee1..81a3822331 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/WeaponFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/WeaponFragment.java @@ -33,7 +33,7 @@ public class WeaponFragment implements Fragment{ weapontable.defaults().size(58, 62); for(Weapon weapon : control.getWeapons()){ - ImageButton button = new ImageButton(Draw.region(weapon.name()), "toggle"); + ImageButton button = new ImageButton(Draw.region(weapon.name), "toggle"); button.getImageCell().size(8*5); group.add(button); @@ -52,7 +52,7 @@ public class WeaponFragment implements Fragment{ String description = weapon.description; tiptable.background("button"); - tiptable.add("$weapon."+weapon.name()+".name", 0.5f).left().padBottom(3f); + tiptable.add("$weapon."+weapon.name+".name", 0.5f).left().padBottom(3f); tiptable.row(); tiptable.row(); @@ -65,7 +65,5 @@ public class WeaponFragment implements Fragment{ button.addListener(tip); } - - weapontable.addImageButton("icon-menu", 8*4, ui.upgrades::show); } } diff --git a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java b/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java index b81afdd768..159de661e1 100644 --- a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java @@ -199,5 +199,10 @@ public class ProductionBlocks{ health = 600; breaktime *= 2.3f; } + }, + weaponFactory = new WeaponFactory("weaponfactory"){ + { + width = height = 2; + } }; } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/WeaponFactory.java b/core/src/io/anuke/mindustry/world/blocks/types/production/WeaponFactory.java new file mode 100644 index 0000000000..f36fbff522 --- /dev/null +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/WeaponFactory.java @@ -0,0 +1,101 @@ +package io.anuke.mindustry.world.blocks.types.production; + +import com.badlogic.gdx.utils.ObjectMap; +import io.anuke.mindustry.resource.ItemStack; +import io.anuke.mindustry.resource.Upgrade; +import io.anuke.mindustry.resource.Weapon; +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.blocks.types.Configurable; +import io.anuke.ucore.core.Draw; +import io.anuke.ucore.function.Listenable; +import io.anuke.ucore.scene.style.TextureRegionDrawable; +import io.anuke.ucore.scene.ui.ImageButton; +import io.anuke.ucore.scene.ui.Tooltip; +import io.anuke.ucore.scene.ui.layout.Table; + +import static io.anuke.mindustry.Vars.control; + +public class WeaponFactory extends Block implements Configurable{ + protected ObjectMap costs = new ObjectMap<>(); + + public WeaponFactory(String name){ + super(name); + solid = true; + breakable = true; + } + + @Override + public void buildTable(Tile tile, Table table) { + int i = 0; + + Table content = new Table(); + + content.add("$text.upgrades").colspan(3).row(); + + for(Upgrade upgrade : Upgrade.getAllUpgrades()){ + if(!(upgrade instanceof Weapon)) continue; + Weapon weapon = (Weapon)upgrade; + + ItemStack[] requirements = costs.get(weapon); + + Table tiptable = new Table(); + + Listenable run = ()->{ + tiptable.clearChildren(); + + String description = weapon.description; + + tiptable.background("pane"); + tiptable.add("[orange]" + weapon.localized(), 0.5f).left().padBottom(4f); + + Table reqtable = new Table(); + + tiptable.row(); + tiptable.add(reqtable).left(); + + if(!control.hasWeapon(weapon)){ + for(ItemStack s : requirements){ + + int amount = Math.min(control.getAmount(s.item), s.amount); + reqtable.addImage(Draw.region("icon-" + s.item.name)).padRight(3).size(8*2); + reqtable.add( + (amount >= s.amount ? "" : "[RED]") + + amount + " / " +s.amount, 0.5f).left(); + reqtable.row(); + } + } + + tiptable.row(); + tiptable.add().size(10); + tiptable.row(); + tiptable.add("[gray]" + description).left(); + tiptable.row(); + if(control.hasWeapon(weapon)){ + tiptable.add("$text.purchased").padTop(6).left(); + } + tiptable.margin(14f); + }; + + run.listen(); + + Tooltip tip = new Tooltip<>(tiptable, run); + + tip.setInstant(true); + + ImageButton button = content.addImageButton("white", 8*4, () -> { + + }).size(49f, 54f).padBottom(-5) + .get(); + + button.getStyle().imageUp = new TextureRegionDrawable(Draw.region(weapon.name)); + button.addListener(tip); + + if(++i % 3 == 0){ + content.row(); + } + } + + table.add(content).padTop(140f); + } +} diff --git a/kryonet/src/io/anuke/kryonet/KryoClient.java b/kryonet/src/io/anuke/kryonet/KryoClient.java index 8ff3020aeb..71267eaf3b 100644 --- a/kryonet/src/io/anuke/kryonet/KryoClient.java +++ b/kryonet/src/io/anuke/kryonet/KryoClient.java @@ -136,6 +136,7 @@ public class KryoClient implements ClientProvider{ for(Class c : types){ client.getKryo().register(c); } + KryoRegistrator.register(client.getKryo()); } @Override diff --git a/kryonet/src/io/anuke/kryonet/KryoRegistrator.java b/kryonet/src/io/anuke/kryonet/KryoRegistrator.java new file mode 100644 index 0000000000..e7d2deb624 --- /dev/null +++ b/kryonet/src/io/anuke/kryonet/KryoRegistrator.java @@ -0,0 +1,38 @@ +package io.anuke.kryonet; + +import com.esotericsoftware.kryo.Kryo; +import com.esotericsoftware.kryo.Serializer; +import com.esotericsoftware.kryo.io.Input; +import com.esotericsoftware.kryo.io.Output; +import io.anuke.mindustry.resource.Mech; +import io.anuke.mindustry.resource.Upgrade; +import io.anuke.mindustry.resource.Weapon; + +public class KryoRegistrator { + + public static void register(Kryo kryo){ + kryo.register(Weapon.class, new Serializer() { + @Override + public void write(Kryo kryo, Output output, Weapon object) { + output.writeByte(object.id); + } + + @Override + public Weapon read(Kryo kryo, Input input, Class type) { + return (Weapon)Upgrade.getByID(input.readByte()); + } + }); + + kryo.register(Mech.class, new Serializer() { + @Override + public void write(Kryo kryo, Output output, Mech object) { + output.writeByte(object.id); + } + + @Override + public Mech read(Kryo kryo, Input input, Class type) { + return (Mech)Upgrade.getByID(input.readByte()); + } + }); + } +} diff --git a/kryonet/src/io/anuke/kryonet/KryoServer.java b/kryonet/src/io/anuke/kryonet/KryoServer.java index 1ce34c3e62..95d008f087 100644 --- a/kryonet/src/io/anuke/kryonet/KryoServer.java +++ b/kryonet/src/io/anuke/kryonet/KryoServer.java @@ -190,6 +190,7 @@ public class KryoServer implements ServerProvider { for(Class c : types){ server.getKryo().register(c); } + KryoRegistrator.register(server.getKryo()); } @Override