From 97cac3377330793fcb3d4bc8fab0fa37798c1452 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 16 May 2018 14:27:25 -0700 Subject: [PATCH] New build limits, recipe refactoring --- .gitignore | 1 + core/src/io/anuke/mindustry/Vars.java | 2 + .../io/anuke/mindustry/content/Recipes.java | 239 ++++++++---------- .../io/anuke/mindustry/core/NetClient.java | 7 +- .../io/anuke/mindustry/core/NetServer.java | 8 +- .../io/anuke/mindustry/entities/Player.java | 4 +- .../anuke/mindustry/input/AndroidInput.java | 2 +- .../anuke/mindustry/input/InputHandler.java | 17 +- .../src/io/anuke/mindustry/net/NetEvents.java | 9 +- core/src/io/anuke/mindustry/net/Packets.java | 7 +- .../io/anuke/mindustry/resource/Recipe.java | 47 +++- .../ui/fragments/BlocksFragment.java | 5 +- .../io/anuke/mindustry/world/Placement.java | 8 +- .../world/blocks/types/BuildBlock.java | 8 +- 14 files changed, 187 insertions(+), 177 deletions(-) diff --git a/.gitignore b/.gitignore index ee86d3949c..9dd94c143d 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ /core/lib/ /kryonet/build/ /server/build/ +/annotations/build/ /android/assets/mindustry-maps/ /android/assets/mindustry-saves/ /core/assets/gifexport/ diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index 9ac2b61d56..4e678eeff4 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -49,6 +49,8 @@ public class Vars{ public static final float aheadPathfinding = 60*15; //how far away from spawn points the player can't place blocks public static final float enemyspawnspace = 65; + + public static final float coreBuildRange = 1000f; //discord group URL public static final String discordURL = "https://discord.gg/BKADYds"; diff --git a/core/src/io/anuke/mindustry/content/Recipes.java b/core/src/io/anuke/mindustry/content/Recipes.java index f166671a2a..3aacb01132 100644 --- a/core/src/io/anuke/mindustry/content/Recipes.java +++ b/core/src/io/anuke/mindustry/content/Recipes.java @@ -1,159 +1,124 @@ package io.anuke.mindustry.content; -import com.badlogic.gdx.utils.Array; -import io.anuke.mindustry.Vars; import io.anuke.mindustry.content.blocks.*; -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.world.Block; - -import static io.anuke.mindustry.Vars.debug; 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(Items.iron, 12)), - new Recipe(defense, DefenseBlocks.steelwall, stack(Items.steel, 12)), - new Recipe(defense, DefenseBlocks.titaniumwall, stack(Items.titanium, 12)), - new Recipe(defense, DefenseBlocks.diriumwall, stack(Items.densealloy, 12)), - new Recipe(defense, DefenseBlocks.steelwalllarge, stack(Items.steel, 12*4)), - new Recipe(defense, DefenseBlocks.titaniumwalllarge, stack(Items.titanium, 12*4)), - new Recipe(defense, DefenseBlocks.diriumwall, stack(Items.densealloy, 12*4)), - new Recipe(defense, DefenseBlocks.door, stack(Items.steel, 3), stack(Items.iron, 3*4)).setDesktop(), - new Recipe(defense, DefenseBlocks.largedoor, stack(Items.steel, 3*4), stack(Items.iron, 3*4*4)).setDesktop(), - new Recipe(defense, DefenseBlocks.titaniumshieldwall, stack(Items.titanium, 16)), + static { + new Recipe(defense, DefenseBlocks.ironwall, new ItemStack(Items.iron, 12)); + new Recipe(defense, DefenseBlocks.steelwall, new ItemStack(Items.steel, 12)); + new Recipe(defense, DefenseBlocks.titaniumwall, new ItemStack(Items.titanium, 12)); + new Recipe(defense, DefenseBlocks.diriumwall, new ItemStack(Items.densealloy, 12)); + new Recipe(defense, DefenseBlocks.steelwalllarge, new ItemStack(Items.steel, 12 * 4)); + new Recipe(defense, DefenseBlocks.titaniumwalllarge, new ItemStack(Items.titanium, 12 * 4)); + new Recipe(defense, DefenseBlocks.diriumwall, new ItemStack(Items.densealloy, 12 * 4)); + new Recipe(defense, DefenseBlocks.door, new ItemStack(Items.steel, 3), new ItemStack(Items.iron, 3 * 4)); + new Recipe(defense, DefenseBlocks.largedoor, new ItemStack(Items.steel, 3 * 4), new ItemStack(Items.iron, 3 * 4 * 4)); + new Recipe(defense, DefenseBlocks.titaniumshieldwall, new ItemStack(Items.titanium, 16)); - new Recipe(distribution, DistributionBlocks.conveyor, stack(Items.iron, 1)), - new Recipe(distribution, DistributionBlocks.steelconveyor, stack(Items.steel, 1)), - new Recipe(distribution, DistributionBlocks.pulseconveyor, stack(Items.densealloy, 1)), - new Recipe(distribution, DistributionBlocks.router, stack(Items.iron, 2)), - new Recipe(distribution, DistributionBlocks.multiplexer, stack(Items.iron, 8)), - new Recipe(distribution, DistributionBlocks.junction, stack(Items.iron, 2)), - new Recipe(distribution, DistributionBlocks.sorter, stack(Items.steel, 2)), - new Recipe(distribution, DistributionBlocks.splitter, stack(Items.steel, 1)), - new Recipe(distribution, DistributionBlocks.overflowgate, stack(Items.steel, 1)), - new Recipe(distribution, StorageBlocks.vault, stack(Items.steel, 50)), - new Recipe(distribution, StorageBlocks.core, stack(Items.steel, 50)), - new Recipe(distribution, StorageBlocks.unloader, stack(Items.steel, 5)), - new Recipe(distribution, StorageBlocks.sortedunloader, stack(Items.steel, 5)), - new Recipe(distribution, DistributionBlocks.bridgeconveyor, stack(Items.steel, 5)), - new Recipe(distribution, DistributionBlocks.laserconveyor, stack(Items.steel, 5)), + new Recipe(distribution, DistributionBlocks.conveyor, new ItemStack(Items.iron, 1)); + new Recipe(distribution, DistributionBlocks.steelconveyor, new ItemStack(Items.steel, 1)); + new Recipe(distribution, DistributionBlocks.pulseconveyor, new ItemStack(Items.densealloy, 1)); + new Recipe(distribution, DistributionBlocks.router, new ItemStack(Items.iron, 2)); + new Recipe(distribution, DistributionBlocks.multiplexer, new ItemStack(Items.iron, 8)); + new Recipe(distribution, DistributionBlocks.junction, new ItemStack(Items.iron, 2)); + new Recipe(distribution, DistributionBlocks.sorter, new ItemStack(Items.steel, 2)); + new Recipe(distribution, DistributionBlocks.splitter, new ItemStack(Items.steel, 1)); + new Recipe(distribution, DistributionBlocks.overflowgate, new ItemStack(Items.steel, 1)); + new Recipe(distribution, StorageBlocks.vault, new ItemStack(Items.steel, 50)); + new Recipe(distribution, StorageBlocks.core, new ItemStack(Items.steel, 50)); + new Recipe(distribution, StorageBlocks.unloader, new ItemStack(Items.steel, 5)); + new Recipe(distribution, StorageBlocks.sortedunloader, new ItemStack(Items.steel, 5)); + new Recipe(distribution, DistributionBlocks.bridgeconveyor, new ItemStack(Items.steel, 5)); + new Recipe(distribution, DistributionBlocks.laserconveyor, new ItemStack(Items.steel, 5)); - new Recipe(weapon, WeaponBlocks.doubleturret, stack(Items.iron, 7)), - new Recipe(weapon, WeaponBlocks.gatlingturret, stack(Items.iron, 8)), - new Recipe(weapon, WeaponBlocks.flameturret, stack(Items.iron, 12), stack(Items.steel, 9)), - new Recipe(weapon, WeaponBlocks.railgunturret, stack(Items.iron, 15), stack(Items.steel, 10)), - new Recipe(weapon, WeaponBlocks.laserturret, stack(Items.steel, 12), stack(Items.titanium, 12)), - new Recipe(weapon, WeaponBlocks.flakturret, stack(Items.steel, 25), stack(Items.titanium, 15)), - new Recipe(weapon, WeaponBlocks.teslaturret, stack(Items.steel, 20), stack(Items.titanium, 25), stack(Items.densealloy, 15)), - new Recipe(weapon, WeaponBlocks.liquidturret, stack(Items.steel, 80), stack(Items.titanium, 70), stack(Items.densealloy, 60)), - new Recipe(weapon, WeaponBlocks.chainturret, stack(Items.steel, 50), stack(Items.titanium, 25), stack(Items.densealloy, 40)), - new Recipe(weapon, WeaponBlocks.titanturret, stack(Items.steel, 70), stack(Items.titanium, 50), stack(Items.densealloy, 55)), - new Recipe(weapon, WeaponBlocks.missileturret, stack(Items.steel, 70), stack(Items.titanium, 50), stack(Items.densealloy, 55)), - new Recipe(weapon, WeaponBlocks.fornaxcannon, stack(Items.steel, 70), stack(Items.titanium, 50), stack(Items.densealloy, 55)), + new Recipe(weapon, WeaponBlocks.doubleturret, new ItemStack(Items.iron, 7)); + new Recipe(weapon, WeaponBlocks.gatlingturret, new ItemStack(Items.iron, 8)); + new Recipe(weapon, WeaponBlocks.flameturret, new ItemStack(Items.iron, 12), new ItemStack(Items.steel, 9)); + new Recipe(weapon, WeaponBlocks.railgunturret, new ItemStack(Items.iron, 15), new ItemStack(Items.steel, 10)); + new Recipe(weapon, WeaponBlocks.laserturret, new ItemStack(Items.steel, 12), new ItemStack(Items.titanium, 12)); + new Recipe(weapon, WeaponBlocks.flakturret, new ItemStack(Items.steel, 25), new ItemStack(Items.titanium, 15)); + new Recipe(weapon, WeaponBlocks.teslaturret, new ItemStack(Items.steel, 20), new ItemStack(Items.titanium, 25), new ItemStack(Items.densealloy, 15)); + new Recipe(weapon, WeaponBlocks.liquidturret, new ItemStack(Items.steel, 80), new ItemStack(Items.titanium, 70), new ItemStack(Items.densealloy, 60)); + new Recipe(weapon, WeaponBlocks.chainturret, new ItemStack(Items.steel, 50), new ItemStack(Items.titanium, 25), new ItemStack(Items.densealloy, 40)); + new Recipe(weapon, WeaponBlocks.titanturret, new ItemStack(Items.steel, 70), new ItemStack(Items.titanium, 50), new ItemStack(Items.densealloy, 55)); + new Recipe(weapon, WeaponBlocks.missileturret, new ItemStack(Items.steel, 70), new ItemStack(Items.titanium, 50), new ItemStack(Items.densealloy, 55)); + new Recipe(weapon, WeaponBlocks.fornaxcannon, new ItemStack(Items.steel, 70), new ItemStack(Items.titanium, 50), new ItemStack(Items.densealloy, 55)); - new Recipe(crafting, CraftingBlocks.smelter, stack(Items.iron, 40)), - new Recipe(crafting, CraftingBlocks.alloysmelter, stack(Items.titanium, 50), stack(Items.steel, 50)), - new Recipe(crafting, CraftingBlocks.powersmelter, stack(Items.steel, 30), stack(Items.iron, 30)), - new Recipe(crafting, CraftingBlocks.poweralloysmelter, stack(Items.steel, 30), stack(Items.iron, 30)), - new Recipe(crafting, CraftingBlocks.separator, stack(Items.steel, 30), stack(Items.iron, 30)), - new Recipe(crafting, CraftingBlocks.centrifuge, stack(Items.steel, 30), stack(Items.iron, 30)), - new Recipe(crafting, CraftingBlocks.siliconsmelter, stack(Items.steel, 30), stack(Items.iron, 30)), - new Recipe(crafting, CraftingBlocks.oilRefinery, stack(Items.steel, 15), stack(Items.iron, 15)), - new Recipe(crafting, CraftingBlocks.biomatterCompressor, stack(Items.steel, 15), stack(Items.iron, 15)), - new Recipe(crafting, CraftingBlocks.plasticFormer, stack(Items.steel, 30), stack(Items.titanium, 15)), - new Recipe(crafting, CraftingBlocks.cryofluidmixer, stack(Items.steel, 30), stack(Items.titanium, 15)), - new Recipe(crafting, CraftingBlocks.pulverizer, stack(Items.steel, 10), stack(Items.iron, 10)), - new Recipe(crafting, CraftingBlocks.stoneFormer, stack(Items.steel, 10), stack(Items.iron, 10)), - new Recipe(crafting, CraftingBlocks.melter, stack(Items.steel, 30), stack(Items.titanium, 15)), - new Recipe(crafting, CraftingBlocks.incinerator, stack(Items.steel, 60), stack(Items.iron, 60)), - new Recipe(crafting, CraftingBlocks.weaponFactory, stack(Items.steel, 60), stack(Items.iron, 60)).setDesktop(), + new Recipe(crafting, CraftingBlocks.smelter, new ItemStack(Items.iron, 40)); + new Recipe(crafting, CraftingBlocks.alloysmelter, new ItemStack(Items.titanium, 50), new ItemStack(Items.steel, 50)); + new Recipe(crafting, CraftingBlocks.powersmelter, new ItemStack(Items.steel, 30), new ItemStack(Items.iron, 30)); + new Recipe(crafting, CraftingBlocks.poweralloysmelter, new ItemStack(Items.steel, 30), new ItemStack(Items.iron, 30)); + new Recipe(crafting, CraftingBlocks.separator, new ItemStack(Items.steel, 30), new ItemStack(Items.iron, 30)); + new Recipe(crafting, CraftingBlocks.centrifuge, new ItemStack(Items.steel, 30), new ItemStack(Items.iron, 30)); + new Recipe(crafting, CraftingBlocks.siliconsmelter, new ItemStack(Items.steel, 30), new ItemStack(Items.iron, 30)); + new Recipe(crafting, CraftingBlocks.oilRefinery, new ItemStack(Items.steel, 15), new ItemStack(Items.iron, 15)); + new Recipe(crafting, CraftingBlocks.biomatterCompressor, new ItemStack(Items.steel, 15), new ItemStack(Items.iron, 15)); + new Recipe(crafting, CraftingBlocks.plasticFormer, new ItemStack(Items.steel, 30), new ItemStack(Items.titanium, 15)); + new Recipe(crafting, CraftingBlocks.cryofluidmixer, new ItemStack(Items.steel, 30), new ItemStack(Items.titanium, 15)); + new Recipe(crafting, CraftingBlocks.pulverizer, new ItemStack(Items.steel, 10), new ItemStack(Items.iron, 10)); + new Recipe(crafting, CraftingBlocks.stoneFormer, new ItemStack(Items.steel, 10), new ItemStack(Items.iron, 10)); + new Recipe(crafting, CraftingBlocks.melter, new ItemStack(Items.steel, 30), new ItemStack(Items.titanium, 15)); + new Recipe(crafting, CraftingBlocks.incinerator, new ItemStack(Items.steel, 60), new ItemStack(Items.iron, 60)); + new Recipe(crafting, CraftingBlocks.weaponFactory, new ItemStack(Items.steel, 60), new ItemStack(Items.iron, 60)).setDesktop(); - new Recipe(production, ProductionBlocks.ironDrill, stack(Items.iron, 25)), - new Recipe(production, ProductionBlocks.reinforcedDrill, stack(Items.iron, 25)), - new Recipe(production, ProductionBlocks.steelDrill, stack(Items.iron, 25)), - new Recipe(production, ProductionBlocks.titaniumDrill, stack(Items.iron, 25)), - new Recipe(production, ProductionBlocks.laserdrill, stack(Items.titanium, 40), stack(Items.densealloy, 40)), - new Recipe(production, ProductionBlocks.nucleardrill, stack(Items.titanium, 40), stack(Items.densealloy, 40)), - new Recipe(production, ProductionBlocks.plasmadrill, stack(Items.titanium, 40), stack(Items.densealloy, 40)), - new Recipe(production, ProductionBlocks.cultivator, stack(Items.titanium, 40), stack(Items.densealloy, 40)), - new Recipe(production, ProductionBlocks.waterextractor, stack(Items.titanium, 40), stack(Items.densealloy, 40)), - new Recipe(production, ProductionBlocks.oilextractor, stack(Items.titanium, 40), stack(Items.densealloy, 40)), + new Recipe(production, ProductionBlocks.ironDrill, new ItemStack(Items.iron, 25)); + new Recipe(production, ProductionBlocks.reinforcedDrill, new ItemStack(Items.iron, 25)); + new Recipe(production, ProductionBlocks.steelDrill, new ItemStack(Items.iron, 25)); + new Recipe(production, ProductionBlocks.titaniumDrill, new ItemStack(Items.iron, 25)); + new Recipe(production, ProductionBlocks.laserdrill, new ItemStack(Items.titanium, 40), new ItemStack(Items.densealloy, 40)); + new Recipe(production, ProductionBlocks.nucleardrill, new ItemStack(Items.titanium, 40), new ItemStack(Items.densealloy, 40)); + new Recipe(production, ProductionBlocks.plasmadrill, new ItemStack(Items.titanium, 40), new ItemStack(Items.densealloy, 40)); + new Recipe(production, ProductionBlocks.cultivator, new ItemStack(Items.titanium, 40), new ItemStack(Items.densealloy, 40)); + new Recipe(production, ProductionBlocks.waterextractor, new ItemStack(Items.titanium, 40), new ItemStack(Items.densealloy, 40)); + new Recipe(production, ProductionBlocks.oilextractor, new ItemStack(Items.titanium, 40), new ItemStack(Items.densealloy, 40)); - new Recipe(power, PowerBlocks.powernode, stack(Items.steel, 3), stack(Items.iron, 3)), - new Recipe(power, PowerBlocks.powernodelarge, stack(Items.steel, 3), stack(Items.iron, 3)), - new Recipe(power, PowerBlocks.battery, stack(Items.steel, 5), stack(Items.iron, 5)), - new Recipe(power, PowerBlocks.batteryLarge, stack(Items.steel, 5), stack(Items.iron, 5)), - new Recipe(power, PowerBlocks.combustiongenerator, stack(Items.iron, 30)), - new Recipe(power, PowerBlocks.liquidcombustiongenerator, stack(Items.iron, 30)), - new Recipe(power, PowerBlocks.thermalgenerator, stack(Items.steel, 30)), - new Recipe(power, PowerBlocks.rtgenerator, stack(Items.titanium, 20), stack(Items.steel, 20)), - new Recipe(power, PowerBlocks.solarpanel, stack(Items.iron, 30), stack(Items.silicon, 20)), - new Recipe(power, PowerBlocks.largesolarpanel, stack(Items.iron, 30), stack(Items.silicon, 20)), - new Recipe(power, PowerBlocks.nuclearReactor, stack(Items.titanium, 40), stack(Items.densealloy, 40), stack(Items.steel, 50)), - new Recipe(power, PowerBlocks.fusionReactor, stack(Items.titanium, 40), stack(Items.densealloy, 40), stack(Items.steel, 50)), + new Recipe(power, PowerBlocks.powernode, new ItemStack(Items.steel, 3), new ItemStack(Items.iron, 3)); + new Recipe(power, PowerBlocks.powernodelarge, new ItemStack(Items.steel, 3), new ItemStack(Items.iron, 3)); + new Recipe(power, PowerBlocks.battery, new ItemStack(Items.steel, 5), new ItemStack(Items.iron, 5)); + new Recipe(power, PowerBlocks.batteryLarge, new ItemStack(Items.steel, 5), new ItemStack(Items.iron, 5)); + new Recipe(power, PowerBlocks.combustiongenerator, new ItemStack(Items.iron, 30)); + new Recipe(power, PowerBlocks.liquidcombustiongenerator, new ItemStack(Items.iron, 30)); + new Recipe(power, PowerBlocks.thermalgenerator, new ItemStack(Items.steel, 30)); + new Recipe(power, PowerBlocks.rtgenerator, new ItemStack(Items.titanium, 20), new ItemStack(Items.steel, 20)); + new Recipe(power, PowerBlocks.solarpanel, new ItemStack(Items.iron, 30), new ItemStack(Items.silicon, 20)); + new Recipe(power, PowerBlocks.largesolarpanel, new ItemStack(Items.iron, 30), new ItemStack(Items.silicon, 20)); + new Recipe(power, PowerBlocks.nuclearReactor, new ItemStack(Items.titanium, 40), new ItemStack(Items.densealloy, 40), new ItemStack(Items.steel, 50)); + new Recipe(power, PowerBlocks.fusionReactor, new ItemStack(Items.titanium, 40), new ItemStack(Items.densealloy, 40), new ItemStack(Items.steel, 50)); - new Recipe(power, PowerBlocks.shieldgenerator, stack(Items.titanium, 30), stack(Items.densealloy, 30)), + new Recipe(power, PowerBlocks.shieldgenerator, new ItemStack(Items.titanium, 30), new ItemStack(Items.densealloy, 30)); - new Recipe(distribution, PowerBlocks.teleporter, stack(Items.steel, 30), stack(Items.densealloy, 40)), + new Recipe(distribution, PowerBlocks.teleporter, new ItemStack(Items.steel, 30), new ItemStack(Items.densealloy, 40)); - new Recipe(power, PowerBlocks.repairturret, stack(Items.iron, 30)), - new Recipe(power, PowerBlocks.megarepairturret, stack(Items.iron, 20), stack(Items.steel, 30)), + new Recipe(power, PowerBlocks.repairturret, new ItemStack(Items.iron, 30)); + new Recipe(power, PowerBlocks.megarepairturret, new ItemStack(Items.iron, 20), new ItemStack(Items.steel, 30)); - new Recipe(liquid, LiquidBlocks.conduit, stack(Items.steel, 1)), - new Recipe(liquid, LiquidBlocks.pulseconduit, stack(Items.titanium, 1), stack(Items.steel, 1)), - new Recipe(liquid, LiquidBlocks.liquidrouter, stack(Items.steel, 2)), - new Recipe(liquid, LiquidBlocks.liquidtank, stack(Items.steel, 2)), - new Recipe(liquid, LiquidBlocks.liquidjunction, stack(Items.steel, 2)), - new Recipe(liquid, LiquidBlocks.bridgeconduit, stack(Items.titanium, 2), stack(Items.steel, 2)), - new Recipe(liquid, LiquidBlocks.laserconduit, stack(Items.titanium, 2), stack(Items.steel, 2)), + new Recipe(liquid, LiquidBlocks.conduit, new ItemStack(Items.steel, 1)); + new Recipe(liquid, LiquidBlocks.pulseconduit, new ItemStack(Items.titanium, 1), new ItemStack(Items.steel, 1)); + new Recipe(liquid, LiquidBlocks.liquidrouter, new ItemStack(Items.steel, 2)); + new Recipe(liquid, LiquidBlocks.liquidtank, new ItemStack(Items.steel, 2)); + new Recipe(liquid, LiquidBlocks.liquidjunction, new ItemStack(Items.steel, 2)); + new Recipe(liquid, LiquidBlocks.bridgeconduit, new ItemStack(Items.titanium, 2), new ItemStack(Items.steel, 2)); + new Recipe(liquid, LiquidBlocks.laserconduit, new ItemStack(Items.titanium, 2), new ItemStack(Items.steel, 2)); - new Recipe(liquid, LiquidBlocks.pump, stack(Items.steel, 10)), - new Recipe(liquid, LiquidBlocks.fluxpump, stack(Items.steel, 10), stack(Items.densealloy, 5)), + new Recipe(liquid, LiquidBlocks.pump, new ItemStack(Items.steel, 10)); + new Recipe(liquid, LiquidBlocks.fluxpump, new ItemStack(Items.steel, 10), new ItemStack(Items.densealloy, 5)); - new Recipe(units, UnitBlocks.repairPoint, stack(Items.steel, 10)), - new Recipe(units, UnitBlocks.resupplyPoint, stack(Items.steel, 10)), + new Recipe(units, UnitBlocks.repairPoint, new ItemStack(Items.steel, 10)); + new Recipe(units, UnitBlocks.resupplyPoint, new ItemStack(Items.steel, 10)); - //new Recipe(units, UnitBlocks.droneFactory, stack(Items.steel, 10)), - //new Recipe(units, UnitBlocks.vtolFactory, stack(Items.steel, 10)), - //new Recipe(units, UnitBlocks.droneFactory, stack(Items.steel, 10)), - //new Recipe(units, UnitBlocks.droneFactory, stack(Items.steel, 10)), - //new Recipe(units, UnitBlocks.walkerFactory, stack(Items.steel, 10)), + //new Recipe(units, UnitBlocks.droneFactory, new ItemStack(Items.steel, 10)); + //new Recipe(units, UnitBlocks.vtolFactory, new ItemStack(Items.steel, 10)); + //new Recipe(units, UnitBlocks.droneFactory, new ItemStack(Items.steel, 10)); + //new Recipe(units, UnitBlocks.droneFactory, new ItemStack(Items.steel, 10)); + //new Recipe(units, UnitBlocks.walkerFactory, new ItemStack(Items.steel, 10)); - new Recipe(units, DebugBlocks.itemSource, stack(Items.steel, 10)).setDebug(), - new Recipe(units, DebugBlocks.itemVoid, stack(Items.steel, 10)).setDebug(), - new Recipe(units, DebugBlocks.liquidSource, stack(Items.steel, 10)).setDebug(), - new Recipe(units, DebugBlocks.powerVoid, stack(Items.steel, 10)).setDebug(), - new Recipe(units, DebugBlocks.powerInfinite, stack(Items.steel, 10), stack(Items.densealloy, 5)).setDebug() - ); - - 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 && !(Vars.mobile && recipe.desktopOnly) && !(!debug && recipe.debugOnly)) { - r.add(recipe); - } - } - - return r; - } + new Recipe(units, DebugBlocks.itemSource, new ItemStack(Items.steel, 10)).setDebug(); + new Recipe(units, DebugBlocks.itemVoid, new ItemStack(Items.steel, 10)).setDebug(); + new Recipe(units, DebugBlocks.liquidSource, new ItemStack(Items.steel, 10)).setDebug(); + new Recipe(units, DebugBlocks.powerVoid, new ItemStack(Items.steel, 10)).setDebug(); + new Recipe(units, DebugBlocks.powerInfinite, new ItemStack(Items.steel, 10), new ItemStack(Items.densealloy, 5)).setDebug(); + } } diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/io/anuke/mindustry/core/NetClient.java index d3bdae4aeb..6d4b9d4a1f 100644 --- a/core/src/io/anuke/mindustry/core/NetClient.java +++ b/core/src/io/anuke/mindustry/core/NetClient.java @@ -3,7 +3,6 @@ package io.anuke.mindustry.core; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.IntSet; -import com.badlogic.gdx.utils.reflect.ReflectionException; import io.anuke.mindustry.content.UpgradeRecipes; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.BulletType; @@ -15,9 +14,9 @@ import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Net.SendMode; import io.anuke.mindustry.net.NetworkIO; import io.anuke.mindustry.net.Packets.*; +import io.anuke.mindustry.resource.Recipe; import io.anuke.mindustry.resource.Upgrade; import io.anuke.mindustry.resource.Weapon; -import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Placement; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Effects; @@ -164,12 +163,12 @@ public class NetClient extends Module { Net.handleClient(PlacePacket.class, (packet) -> { Player placer = playerGroup.getByID(packet.playerid); - Placement.placeBlock(placer, packet.x, packet.y, Block.getByID(packet.block), packet.rotation, true, Timers.get("placeblocksound", 10)); + Placement.placeBlock(placer, packet.x, packet.y, Recipe.getByID(packet.recipe), packet.rotation, true, Timers.get("placeblocksound", 10)); for(Player player : players) { if (packet.playerid == player.id) { Tile tile = world.tile(packet.x, packet.y); - if (tile != null) Block.getByID(packet.block).placed(tile); + if (tile != null) Recipe.getByID(packet.recipe).result.placed(tile); break; } } diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index dfbf01316e..6dfa48c78c 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -5,7 +5,6 @@ import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.TimeUtils; import io.anuke.mindustry.Vars; import io.anuke.mindustry.content.Mechs; -import io.anuke.mindustry.content.Recipes; import io.anuke.mindustry.content.UpgradeRecipes; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.BulletType; @@ -196,12 +195,11 @@ public class NetServer extends Module{ Player placer = connections.get(id); packet.playerid = placer.id; - Block block = Block.getByID(packet.block); + Recipe recipe = Recipe.getByID(packet.recipe); + Block block = recipe.result; if(!Placement.validPlace(placer.team, packet.x, packet.y, block, packet.rotation)) return; - Recipe recipe = Recipes.getByResult(block); - if(recipe == null || recipe.debugOnly != debug) return; Tile tile = world.tile(packet.x, packet.y); @@ -214,7 +212,7 @@ public class NetServer extends Module{ state.inventory.removeItems(recipe.requirements); - Placement.placeBlock(placer, packet.x, packet.y, block, packet.rotation, true, false); + Placement.placeBlock(placer, packet.x, packet.y, recipe, packet.rotation, true, false); TraceInfo trace = admins.getTraceByID(getUUID(id)); diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index f5e99b6f54..53a7c347ad 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -38,8 +38,8 @@ import static io.anuke.mindustry.Vars.*; public class Player extends Unit implements BlockPlacer{ static final float speed = 1.1f; static final float dashSpeed = 1.8f; - static final float placeDistance = 80f; - static final int maxPlacing = 5; + public static final float placeDistance = 80f; + public static final int maxPlacing = 5; static final int timerDash = 0; static final int timerRegen = 3; diff --git a/core/src/io/anuke/mindustry/input/AndroidInput.java b/core/src/io/anuke/mindustry/input/AndroidInput.java index be7ef69b19..5ca98187d6 100644 --- a/core/src/io/anuke/mindustry/input/AndroidInput.java +++ b/core/src/io/anuke/mindustry/input/AndroidInput.java @@ -176,7 +176,7 @@ public class AndroidInput extends InputHandler{ validPlace(x, y, recipe.result) && cursorNear() && state.inventory.hasItems(recipe.requirements)){ - placeBlock(x, y, recipe.result, rotation, true, sound); + placeBlock(x, y, recipe, rotation, true, sound); for(ItemStack stack : recipe.requirements){ state.inventory.removeItem(stack); diff --git a/core/src/io/anuke/mindustry/input/InputHandler.java b/core/src/io/anuke/mindustry/input/InputHandler.java index 0e556d678f..5c45babc51 100644 --- a/core/src/io/anuke/mindustry/input/InputHandler.java +++ b/core/src/io/anuke/mindustry/input/InputHandler.java @@ -162,7 +162,7 @@ public abstract class InputHandler extends InputAdapter{ validPlace(x, y, recipe.result) && !ui.hasMouse() && cursorNear() && state.inventory.hasItems(recipe.requirements)){ - placeBlock(x, y, recipe.result, rotation, true, sound); + placeBlock(x, y, recipe, rotation, true, sound); for(ItemStack stack : recipe.requirements){ state.inventory.removeItem(stack); @@ -186,20 +186,27 @@ public abstract class InputHandler extends InputAdapter{ } public boolean validPlace(int x, int y, Block type){ - return Placement.validPlace(player.team, x, y, type, rotation); + for(Tile tile : state.teams.get(player.team).cores){ + if(tile.distanceTo(x * tilesize, y * tilesize) < coreBuildRange){ + return Placement.validPlace(player.team, x, y, type, rotation) && + Vector2.dst(player.x, player.y, x * tilesize, y * tilesize) < Player.placeDistance; + } + } + + return false; } public boolean validBreak(int x, int y){ return Placement.validBreak(player.team, x, y); } - public void placeBlock(int x, int y, Block result, int rotation, boolean effects, boolean sound){ + public void placeBlock(int x, int y, Recipe recipe, int rotation, boolean effects, boolean sound){ if(!Net.client()){ //is server or singleplayer - threads.run(() -> Placement.placeBlock(player, x, y, result, rotation, effects, sound)); + threads.run(() -> Placement.placeBlock(player, x, y, recipe, rotation, effects, sound)); } if(Net.active()){ - NetEvents.handlePlace(player, x, y, result, rotation); + NetEvents.handlePlace(player, x, y, recipe, rotation); } //todo fix this, call placed() diff --git a/core/src/io/anuke/mindustry/net/NetEvents.java b/core/src/io/anuke/mindustry/net/NetEvents.java index f92b6cd4cd..31c3b85f1f 100644 --- a/core/src/io/anuke/mindustry/net/NetEvents.java +++ b/core/src/io/anuke/mindustry/net/NetEvents.java @@ -7,14 +7,11 @@ import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.SyncEntity; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.Unit; -import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.gen.CallEvent; import io.anuke.mindustry.net.Net.SendMode; import io.anuke.mindustry.net.Packets.*; +import io.anuke.mindustry.resource.Recipe; import io.anuke.mindustry.resource.Upgrade; -import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; -import io.anuke.ucore.entities.Entity; import static io.anuke.mindustry.Vars.*; @@ -102,13 +99,13 @@ public class NetEvents { Net.send(packet, SendMode.udp); } - public static void handlePlace(Player player, int x, int y, Block block, int rotation){ + public static void handlePlace(Player player, int x, int y, Recipe recipe, int rotation){ PlacePacket packet = Pools.obtain(PlacePacket.class); packet.x = (short)x; packet.y = (short)y; packet.rotation = (byte)rotation; packet.playerid = player.id; - packet.block = block.id; + packet.recipe = (byte)recipe.id; Net.send(packet, SendMode.tcp); } diff --git a/core/src/io/anuke/mindustry/net/Packets.java b/core/src/io/anuke/mindustry/net/Packets.java index e79aa38656..9ebcae2067 100644 --- a/core/src/io/anuke/mindustry/net/Packets.java +++ b/core/src/io/anuke/mindustry/net/Packets.java @@ -3,7 +3,6 @@ package io.anuke.mindustry.net; import com.badlogic.gdx.utils.Base64Coder; import com.badlogic.gdx.utils.TimeUtils; import com.badlogic.gdx.utils.reflect.ClassReflection; -import com.badlogic.gdx.utils.reflect.Method; import com.badlogic.gdx.utils.reflect.ReflectionException; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.Player; @@ -220,7 +219,7 @@ public class Packets { public int playerid; public byte rotation; public short x, y; - public int block; + public byte recipe; @Override public void write(ByteBuffer buffer) { @@ -228,7 +227,7 @@ public class Packets { buffer.put(rotation); buffer.putShort(x); buffer.putShort(y); - buffer.putInt(block); + buffer.put(recipe); } @Override @@ -237,7 +236,7 @@ public class Packets { rotation = buffer.get(); x = buffer.getShort(); y = buffer.getShort(); - block = buffer.getInt(); + recipe = buffer.get(); } } diff --git a/core/src/io/anuke/mindustry/resource/Recipe.java b/core/src/io/anuke/mindustry/resource/Recipe.java index 8eacb8f4d1..e57eacc590 100644 --- a/core/src/io/anuke/mindustry/resource/Recipe.java +++ b/core/src/io/anuke/mindustry/resource/Recipe.java @@ -1,17 +1,32 @@ package io.anuke.mindustry.resource; +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.ObjectMap; +import io.anuke.mindustry.Vars; import io.anuke.mindustry.world.Block; +import static io.anuke.mindustry.Vars.debug; + public class Recipe { - public Block result; - public ItemStack[] requirements; - public Section section; + private static int lastid; + private static Array allRecipes = new Array<>(); + private static ObjectMap recipeMap = new ObjectMap<>(); + + public final int id; + public final Block result; + public final ItemStack[] requirements; + public final Section section; + public boolean desktopOnly = false, debugOnly = false; public Recipe(Section section, Block result, ItemStack... requirements){ + this.id = lastid ++; this.result = result; this.requirements = requirements; this.section = section; + + allRecipes.add(this); + recipeMap.put(result, this); } public Recipe setDesktop(){ @@ -23,4 +38,30 @@ public class Recipe { debugOnly = true; return this; } + + public static Array getBySection(Section section, Array r){ + for(Recipe recipe : allRecipes){ + if(recipe.section == section && !(Vars.mobile && recipe.desktopOnly) && !(!debug && recipe.debugOnly)) { + r.add(recipe); + } + } + + return r; + } + + public static Array all(){ + return allRecipes; + } + + public static Recipe getByResult(Block block){ + return recipeMap.get(block); + } + + public static Recipe getByID(int id){ + if(id < 0 || id >= allRecipes.size){ + return null; + }else{ + return allRecipes.get(id); + } + } } diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java index 65e609cfb6..a2521ed7d8 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java @@ -6,7 +6,6 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.IntSet; -import io.anuke.mindustry.content.Recipes; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.input.InputHandler; @@ -98,7 +97,7 @@ public class BlocksFragment implements Fragment{ for (Section sec : Section.values()) { recipes.clear(); - io.anuke.mindustry.content.Recipes.getBy(sec, recipes); + Recipe.getBySection(sec, recipes); maxcol = Math.max((int) ((float) recipes.size / rows + 1), maxcol); } @@ -106,7 +105,7 @@ public class BlocksFragment implements Fragment{ int secrows = 4; recipes.clear(); - Recipes.getBy(sec, recipes); + Recipe.getBySection(sec, recipes); Table table = new Table(); diff --git a/core/src/io/anuke/mindustry/world/Placement.java b/core/src/io/anuke/mindustry/world/Placement.java index 1355547c96..d5e4d16acf 100644 --- a/core/src/io/anuke/mindustry/world/Placement.java +++ b/core/src/io/anuke/mindustry/world/Placement.java @@ -3,7 +3,6 @@ package io.anuke.mindustry.world; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; -import io.anuke.mindustry.content.Recipes; import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.content.fx.Fx; import io.anuke.mindustry.entities.BlockPlacer; @@ -28,7 +27,7 @@ public class Placement { if(tile == null) return null; Block block = tile.isLinked() ? tile.getLinked().block() : tile.block(); - Recipe result = Recipes.getByResult(block); + Recipe result = Recipe.getByResult(block); if(result != null){ for(ItemStack stack : result.requirements){ @@ -58,9 +57,10 @@ public class Placement { return block; } - public static void placeBlock(BlockPlacer placer, int x, int y, Block result, int rotation, boolean effects, boolean sound){ + public static void placeBlock(BlockPlacer placer, int x, int y, Recipe recipe, int rotation, boolean effects, boolean sound){ Tile tile = world.tile(x, y); Team team = placer.getTeam(); + Block result = recipe.result; //just in case if(tile == null) return; @@ -98,7 +98,7 @@ public class Placement { } public static boolean validPlace(Team team, int x, int y, Block type, int rotation){ - Recipe recipe = Recipes.getByResult(type); + Recipe recipe = Recipe.getByResult(type); if(recipe == null || !state.inventory.hasItems(recipe.requirements)){ return false; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/BuildBlock.java b/core/src/io/anuke/mindustry/world/blocks/types/BuildBlock.java index d3bdf82977..a556b0ccce 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/BuildBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/BuildBlock.java @@ -2,19 +2,20 @@ package io.anuke.mindustry.world.blocks.types; import com.badlogic.gdx.graphics.Colors; import com.badlogic.gdx.graphics.g2d.TextureRegion; +import io.anuke.mindustry.content.fx.ExplosionFx; import io.anuke.mindustry.entities.TileEntity; +import io.anuke.mindustry.entities.effect.Rubble; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.graphics.Layer; import io.anuke.mindustry.graphics.Shaders; -import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.resource.Recipe; import io.anuke.mindustry.world.BarType; +import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockBar; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Effects; -import io.anuke.mindustry.content.fx.*; import io.anuke.ucore.core.Graphics; import io.anuke.ucore.graphics.Draw; -import io.anuke.mindustry.entities.effect.*; public class BuildBlock extends Block { private static final float decaySpeedScl = 4f; @@ -89,6 +90,7 @@ public class BuildBlock extends Block { public class BuildEntity extends TileEntity{ public Block result; + public Recipe recipe; public float progress = 0.05f; } }