From 3418979f4d5508ab868a9b0dfc43abdc3f3917ea Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 25 Mar 2018 13:12:32 -0400 Subject: [PATCH] Content class reorganization, beginning work on unit factory --- .../blocks/{tech => power}/battery.png | Bin .../blocks/{tech => power}/batterylarge.png | Bin .../coalgenerator-top.png | Bin .../{production => power}/coalgenerator.png | Bin .../combustiongenerator.png | Bin .../{production => power}/largesolarpanel.png | Bin .../nuclearreactor-center.png | Bin .../nuclearreactor-lights.png | Bin .../{production => power}/nuclearreactor.png | Bin .../blocks/{tech => power}/powerinfinite.png | Bin .../blocks/{tech => power}/powervoid.png | Bin .../{production => power}/rtgenerator-top.png | Bin .../{production => power}/rtgenerator.png | Bin .../{tech => power}/shieldgenerator.png | Bin .../{tech => power}/shieldprojector.png | Bin .../{production => power}/solarpanel.png | Bin .../blocks/{tech => power}/teleporter.png | Bin .../thermalgenerator.png | Bin .../blocks/production/flierfactory.png | Bin 0 -> 421 bytes core/assets/maps/test.mmap | Bin 196617 -> 196617 bytes core/assets/sprites/sprites.atlas | 801 +++++++++--------- core/assets/sprites/sprites.png | Bin 94756 -> 95275 bytes core/assets/version.properties | 4 +- core/src/io/anuke/mindustry/Mindustry.java | 4 +- core/src/io/anuke/mindustry/Vars.java | 2 +- .../src/io/anuke/mindustry/content/Items.java | 39 + .../io/anuke/mindustry/content/Liquids.java | 49 ++ .../src/io/anuke/mindustry/content/Mechs.java | 10 + .../io/anuke/mindustry/content/Recipes.java | 139 +++ .../io/anuke/mindustry/content/UnitTypes.java | 12 + .../{resource => content}/UpgradeRecipes.java | 15 +- .../io/anuke/mindustry/content/Weapons.java | 60 ++ .../mindustry/content/blocks/Blocks.java | 153 ++++ .../blocks/DebugBlocks.java | 2 +- .../content/blocks/DefenseBlocks.java | 66 ++ .../content/blocks/DistributionBlocks.java | 44 + .../content/blocks/LiquidBlocks.java | 45 + .../mindustry/content/blocks/PowerBlocks.java | 89 ++ .../content/blocks/ProductionBlocks.java | 215 +++++ .../content/blocks/StorageBlocks.java | 27 + .../mindustry/content/blocks/UnitBlocks.java | 13 + .../blocks/WeaponBlocks.java | 28 +- .../anuke/mindustry/core/ContentLoader.java | 58 ++ core/src/io/anuke/mindustry/core/Control.java | 8 +- .../io/anuke/mindustry/core/GameState.java | 6 +- core/src/io/anuke/mindustry/core/Logic.java | 27 +- .../io/anuke/mindustry/core/NetServer.java | 9 +- .../src/io/anuke/mindustry/core/Renderer.java | 2 +- core/src/io/anuke/mindustry/core/World.java | 16 +- .../io/anuke/mindustry/editor/MapEditor.java | 2 +- .../mindustry/editor/MapEditorDialog.java | 2 +- .../io/anuke/mindustry/editor/MapFilter.java | 2 +- .../anuke/mindustry/editor/MapRenderer.java | 2 +- .../io/anuke/mindustry/entities/Player.java | 15 +- .../io/anuke/mindustry/entities/Units.java | 17 +- .../mindustry/entities/effect/DamageArea.java | 3 +- .../mindustry/entities/units/BaseUnit.java | 3 +- .../entities/units/FlyingUnitType.java | 39 + .../mindustry/entities/units/UnitType.java | 9 +- .../mindustry/entities/units/UnitTypes.java | 9 - .../mindustry/entities/units/types/Flier.java | 11 + .../io/anuke/mindustry/game/Inventory.java | 3 +- .../src/io/anuke/mindustry/game/TeamInfo.java | 99 +++ .../src/io/anuke/mindustry/game/Tutorial.java | 33 +- .../mindustry/game/UpgradeInventory.java | 3 +- .../mindustry/graphics/BlockRenderer.java | 2 +- .../anuke/mindustry/input/InputHandler.java | 2 +- .../io/anuke/mindustry/io/BlockLoader.java | 144 ---- core/src/io/anuke/mindustry/io/MapIO.java | 3 +- .../anuke/mindustry/io/versions/Save16.java | 8 +- .../src/io/anuke/mindustry/net/NetworkIO.java | 6 +- .../src/io/anuke/mindustry/net/TraceInfo.java | 2 +- .../src/io/anuke/mindustry/resource/Item.java | 33 - .../io/anuke/mindustry/resource/Liquid.java | 42 - .../src/io/anuke/mindustry/resource/Mech.java | 5 - .../io/anuke/mindustry/resource/Recipes.java | 134 --- .../io/anuke/mindustry/resource/Weapon.java | 79 +- .../ui/fragments/BlockConfigFragment.java | 2 +- .../ui/fragments/BlocksFragment.java | 3 +- .../mindustry/ui/fragments/DebugFragment.java | 2 +- .../world/{blocks => }/BaseBlock.java | 4 +- core/src/io/anuke/mindustry/world/Block.java | 3 +- .../io/anuke/mindustry/world/ColorMapper.java | 2 +- .../io/anuke/mindustry/world/Placement.java | 9 +- core/src/io/anuke/mindustry/world/Tile.java | 5 +- .../anuke/mindustry/world/WorldGenerator.java | 16 +- .../anuke/mindustry/world/blocks/Blocks.java | 160 ---- .../mindustry/world/blocks/DefenseBlocks.java | 83 -- .../world/blocks/DistributionBlocks.java | 94 -- .../world/blocks/ProductionBlocks.java | 331 -------- .../mindustry/world/blocks/types/Ore.java | 2 +- .../blocks/types/defense/LiquidTurret.java | 3 +- .../blocks/types/distribution/Conveyor.java | 5 +- .../types/distribution/LiquidJunction.java | 8 +- .../blocks/types/distribution/Sorter.java | 3 +- .../types/generation/NuclearReactor.java | 6 +- .../blocks/types/modules/LiquidModule.java | 3 +- .../blocks/types/production/GenericDrill.java | 3 +- .../blocks/types/production/LiquidMixer.java | 5 +- .../blocks/types/production/SolidPump.java | 3 +- .../types/production/WeaponFactory.java | 2 +- .../world/blocks/types/storage/CoreBlock.java | 8 +- .../blocks/types/storage/SortedUnloader.java | 5 +- .../world/blocks/types/storage/Unloader.java | 3 +- kryonet/src/io/anuke/kryonet/KryoServer.java | 2 +- .../mindustry/server/MindustryServer.java | 4 +- 106 files changed, 1772 insertions(+), 1662 deletions(-) rename core/assets-raw/sprites/blocks/{tech => power}/battery.png (100%) rename core/assets-raw/sprites/blocks/{tech => power}/batterylarge.png (100%) rename core/assets-raw/sprites/blocks/{production => power}/coalgenerator-top.png (100%) rename core/assets-raw/sprites/blocks/{production => power}/coalgenerator.png (100%) rename core/assets-raw/sprites/blocks/{production => power}/combustiongenerator.png (100%) rename core/assets-raw/sprites/blocks/{production => power}/largesolarpanel.png (100%) rename core/assets-raw/sprites/blocks/{production => power}/nuclearreactor-center.png (100%) rename core/assets-raw/sprites/blocks/{production => power}/nuclearreactor-lights.png (100%) rename core/assets-raw/sprites/blocks/{production => power}/nuclearreactor.png (100%) rename core/assets-raw/sprites/blocks/{tech => power}/powerinfinite.png (100%) rename core/assets-raw/sprites/blocks/{tech => power}/powervoid.png (100%) rename core/assets-raw/sprites/blocks/{production => power}/rtgenerator-top.png (100%) rename core/assets-raw/sprites/blocks/{production => power}/rtgenerator.png (100%) rename core/assets-raw/sprites/blocks/{tech => power}/shieldgenerator.png (100%) rename core/assets-raw/sprites/blocks/{tech => power}/shieldprojector.png (100%) rename core/assets-raw/sprites/blocks/{production => power}/solarpanel.png (100%) rename core/assets-raw/sprites/blocks/{tech => power}/teleporter.png (100%) rename core/assets-raw/sprites/blocks/{production => power}/thermalgenerator.png (100%) create mode 100644 core/assets-raw/sprites/blocks/production/flierfactory.png create mode 100644 core/src/io/anuke/mindustry/content/Items.java create mode 100644 core/src/io/anuke/mindustry/content/Liquids.java create mode 100644 core/src/io/anuke/mindustry/content/Mechs.java create mode 100644 core/src/io/anuke/mindustry/content/Recipes.java create mode 100644 core/src/io/anuke/mindustry/content/UnitTypes.java rename core/src/io/anuke/mindustry/{resource => content}/UpgradeRecipes.java (50%) create mode 100644 core/src/io/anuke/mindustry/content/Weapons.java create mode 100644 core/src/io/anuke/mindustry/content/blocks/Blocks.java rename core/src/io/anuke/mindustry/{world => content}/blocks/DebugBlocks.java (93%) create mode 100644 core/src/io/anuke/mindustry/content/blocks/DefenseBlocks.java create mode 100644 core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java create mode 100644 core/src/io/anuke/mindustry/content/blocks/LiquidBlocks.java create mode 100644 core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java create mode 100644 core/src/io/anuke/mindustry/content/blocks/ProductionBlocks.java create mode 100644 core/src/io/anuke/mindustry/content/blocks/StorageBlocks.java create mode 100644 core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java rename core/src/io/anuke/mindustry/{world => content}/blocks/WeaponBlocks.java (91%) create mode 100644 core/src/io/anuke/mindustry/core/ContentLoader.java delete mode 100644 core/src/io/anuke/mindustry/entities/units/UnitTypes.java create mode 100644 core/src/io/anuke/mindustry/entities/units/types/Flier.java create mode 100644 core/src/io/anuke/mindustry/game/TeamInfo.java delete mode 100644 core/src/io/anuke/mindustry/io/BlockLoader.java delete mode 100644 core/src/io/anuke/mindustry/resource/Recipes.java rename core/src/io/anuke/mindustry/world/{blocks => }/BaseBlock.java (98%) delete mode 100644 core/src/io/anuke/mindustry/world/blocks/Blocks.java delete mode 100644 core/src/io/anuke/mindustry/world/blocks/DefenseBlocks.java delete mode 100644 core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java delete mode 100644 core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java diff --git a/core/assets-raw/sprites/blocks/tech/battery.png b/core/assets-raw/sprites/blocks/power/battery.png similarity index 100% rename from core/assets-raw/sprites/blocks/tech/battery.png rename to core/assets-raw/sprites/blocks/power/battery.png diff --git a/core/assets-raw/sprites/blocks/tech/batterylarge.png b/core/assets-raw/sprites/blocks/power/batterylarge.png similarity index 100% rename from core/assets-raw/sprites/blocks/tech/batterylarge.png rename to core/assets-raw/sprites/blocks/power/batterylarge.png diff --git a/core/assets-raw/sprites/blocks/production/coalgenerator-top.png b/core/assets-raw/sprites/blocks/power/coalgenerator-top.png similarity index 100% rename from core/assets-raw/sprites/blocks/production/coalgenerator-top.png rename to core/assets-raw/sprites/blocks/power/coalgenerator-top.png diff --git a/core/assets-raw/sprites/blocks/production/coalgenerator.png b/core/assets-raw/sprites/blocks/power/coalgenerator.png similarity index 100% rename from core/assets-raw/sprites/blocks/production/coalgenerator.png rename to core/assets-raw/sprites/blocks/power/coalgenerator.png diff --git a/core/assets-raw/sprites/blocks/production/combustiongenerator.png b/core/assets-raw/sprites/blocks/power/combustiongenerator.png similarity index 100% rename from core/assets-raw/sprites/blocks/production/combustiongenerator.png rename to core/assets-raw/sprites/blocks/power/combustiongenerator.png diff --git a/core/assets-raw/sprites/blocks/production/largesolarpanel.png b/core/assets-raw/sprites/blocks/power/largesolarpanel.png similarity index 100% rename from core/assets-raw/sprites/blocks/production/largesolarpanel.png rename to core/assets-raw/sprites/blocks/power/largesolarpanel.png diff --git a/core/assets-raw/sprites/blocks/production/nuclearreactor-center.png b/core/assets-raw/sprites/blocks/power/nuclearreactor-center.png similarity index 100% rename from core/assets-raw/sprites/blocks/production/nuclearreactor-center.png rename to core/assets-raw/sprites/blocks/power/nuclearreactor-center.png diff --git a/core/assets-raw/sprites/blocks/production/nuclearreactor-lights.png b/core/assets-raw/sprites/blocks/power/nuclearreactor-lights.png similarity index 100% rename from core/assets-raw/sprites/blocks/production/nuclearreactor-lights.png rename to core/assets-raw/sprites/blocks/power/nuclearreactor-lights.png diff --git a/core/assets-raw/sprites/blocks/production/nuclearreactor.png b/core/assets-raw/sprites/blocks/power/nuclearreactor.png similarity index 100% rename from core/assets-raw/sprites/blocks/production/nuclearreactor.png rename to core/assets-raw/sprites/blocks/power/nuclearreactor.png diff --git a/core/assets-raw/sprites/blocks/tech/powerinfinite.png b/core/assets-raw/sprites/blocks/power/powerinfinite.png similarity index 100% rename from core/assets-raw/sprites/blocks/tech/powerinfinite.png rename to core/assets-raw/sprites/blocks/power/powerinfinite.png diff --git a/core/assets-raw/sprites/blocks/tech/powervoid.png b/core/assets-raw/sprites/blocks/power/powervoid.png similarity index 100% rename from core/assets-raw/sprites/blocks/tech/powervoid.png rename to core/assets-raw/sprites/blocks/power/powervoid.png diff --git a/core/assets-raw/sprites/blocks/production/rtgenerator-top.png b/core/assets-raw/sprites/blocks/power/rtgenerator-top.png similarity index 100% rename from core/assets-raw/sprites/blocks/production/rtgenerator-top.png rename to core/assets-raw/sprites/blocks/power/rtgenerator-top.png diff --git a/core/assets-raw/sprites/blocks/production/rtgenerator.png b/core/assets-raw/sprites/blocks/power/rtgenerator.png similarity index 100% rename from core/assets-raw/sprites/blocks/production/rtgenerator.png rename to core/assets-raw/sprites/blocks/power/rtgenerator.png diff --git a/core/assets-raw/sprites/blocks/tech/shieldgenerator.png b/core/assets-raw/sprites/blocks/power/shieldgenerator.png similarity index 100% rename from core/assets-raw/sprites/blocks/tech/shieldgenerator.png rename to core/assets-raw/sprites/blocks/power/shieldgenerator.png diff --git a/core/assets-raw/sprites/blocks/tech/shieldprojector.png b/core/assets-raw/sprites/blocks/power/shieldprojector.png similarity index 100% rename from core/assets-raw/sprites/blocks/tech/shieldprojector.png rename to core/assets-raw/sprites/blocks/power/shieldprojector.png diff --git a/core/assets-raw/sprites/blocks/production/solarpanel.png b/core/assets-raw/sprites/blocks/power/solarpanel.png similarity index 100% rename from core/assets-raw/sprites/blocks/production/solarpanel.png rename to core/assets-raw/sprites/blocks/power/solarpanel.png diff --git a/core/assets-raw/sprites/blocks/tech/teleporter.png b/core/assets-raw/sprites/blocks/power/teleporter.png similarity index 100% rename from core/assets-raw/sprites/blocks/tech/teleporter.png rename to core/assets-raw/sprites/blocks/power/teleporter.png diff --git a/core/assets-raw/sprites/blocks/production/thermalgenerator.png b/core/assets-raw/sprites/blocks/power/thermalgenerator.png similarity index 100% rename from core/assets-raw/sprites/blocks/production/thermalgenerator.png rename to core/assets-raw/sprites/blocks/power/thermalgenerator.png diff --git a/core/assets-raw/sprites/blocks/production/flierfactory.png b/core/assets-raw/sprites/blocks/production/flierfactory.png new file mode 100644 index 0000000000000000000000000000000000000000..b3fb296cff968b519d52755513757f510295ce6f GIT binary patch literal 421 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7I14-?iy0WWg+Z8+Vb&Z8 z1_lQ95>H=O_D9T;0@e!8gynJ=7#Ji=Tq8=H^K)}k^GX<;i&7IyQd1PlGfOfQ+&z5* z!W;R-85kJlJzX3_EKV<-WY~AeK)^MA(U#0h36ZB5HOf_vFmCfY%v#hkN7?Ww)oamM!1t_O0jt?4O>uxA|!vjaN24#_+&jUPA{v=u3Bwu zb8qfD`!-y7%qkgV%Ny1!~r+Iuu XeRk$KSLt*H1_lOCS3j3^P6!LLOpCU8zRVCI~hcb08)-oeWY znc0(=raQ(ms!Tqxj%V`uUY_j@$&6eQOi7HB4Y|dp7o;$8Pu~~HC^S7_1*2~Jn`*}G JZ>pJOTL4&QCr$tW delta 105 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 z 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 TIy?6nsObP0l+XkK?lB%b literal 94756 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 diff --git a/core/assets/version.properties b/core/assets/version.properties index 1f05cc61e5..cc4c588535 100644 --- a/core/assets/version.properties +++ b/core/assets/version.properties @@ -1,7 +1,7 @@ #Autogenerated file. Do not modify. -#Sun Mar 25 00:43:28 EDT 2018 +#Sun Mar 25 13:11:36 EDT 2018 version=release -androidBuildCode=638 +androidBuildCode=641 name=Mindustry code=3.4 build=custom build diff --git a/core/src/io/anuke/mindustry/Mindustry.java b/core/src/io/anuke/mindustry/Mindustry.java index 1bc490e7d4..a8cee068a2 100644 --- a/core/src/io/anuke/mindustry/Mindustry.java +++ b/core/src/io/anuke/mindustry/Mindustry.java @@ -1,7 +1,7 @@ package io.anuke.mindustry; import io.anuke.mindustry.core.*; -import io.anuke.mindustry.io.BlockLoader; +import io.anuke.mindustry.core.ContentLoader; import io.anuke.mindustry.io.BundleLoader; import io.anuke.mindustry.io.Platform; import io.anuke.ucore.modules.ModuleCore; @@ -17,7 +17,7 @@ public class Mindustry extends ModuleCore { Log.setUseColors(false); BundleLoader.load(); - BlockLoader.load(); + ContentLoader.load(); module(logic = new Logic()); module(world = new World()); diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index 5923ebe6f0..ce09c4d6e3 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -122,7 +122,7 @@ public class Vars{ public static final int port = 6567; public static final int webPort = 6568; - public static final GameState state = new GameState(); + public static GameState state; public static final ThreadHandler threads = new ThreadHandler(Platform.instance.getThreadProvider()); public static final ServerDebug serverDebug = new ServerDebug(); diff --git a/core/src/io/anuke/mindustry/content/Items.java b/core/src/io/anuke/mindustry/content/Items.java new file mode 100644 index 0000000000..c1b4e5807d --- /dev/null +++ b/core/src/io/anuke/mindustry/content/Items.java @@ -0,0 +1,39 @@ +package io.anuke.mindustry.content; + +import io.anuke.mindustry.resource.Item; + +public class Items { + public static final Item + + stone = new Item("stone") { + { + material = false; + } + }, + iron = new Item("iron"), + lead = new Item("lead"), + coal = new Item("coal") { + { + explosiveness = 0.2f; + flammability = 0.5f; + fluxiness = 0.5f; + material = false; + } + }, + steel = new Item("steel"), + titanium = new Item("titanium"), + thorium = new Item("thorium") { + { + explosiveness = 0.1f; + } + }, + silicon = new Item("silicon"), + plastic = new Item("plastic"), + densealloy = new Item("densealloy"), + biomatter = new Item("biomatter") { + { + material = false; + flammability = 0.4f; + } + }; +} diff --git a/core/src/io/anuke/mindustry/content/Liquids.java b/core/src/io/anuke/mindustry/content/Liquids.java new file mode 100644 index 0000000000..0285830043 --- /dev/null +++ b/core/src/io/anuke/mindustry/content/Liquids.java @@ -0,0 +1,49 @@ +package io.anuke.mindustry.content; + +import com.badlogic.gdx.graphics.Color; +import io.anuke.mindustry.resource.Liquid; + +public class Liquids { + + public static final Liquid + + none = new Liquid("none", Color.CLEAR), + water = new Liquid("water", Color.ROYAL) { + { + heatCapacity = 0.4f; + } + }, + plasma = new Liquid("plasma", Color.CORAL) { + { + flammability = 0.4f; + viscosity = 0.1f; + heatCapacity = 0.2f; + } + }, + lava = new Liquid("lava", Color.valueOf("e37341")) { + { + temperature = 0.7f; + viscosity = 0.8f; + } + }, + oil = new Liquid("oil", Color.valueOf("292929")) { + { + viscosity = 0.7f; + flammability = 0.6f; + explosiveness = 0.6f; + } + }, + cryofluid = new Liquid("cryofluid", Color.SKY) { + { + heatCapacity = 0.75f; + temperature = 0.5f; + } + }, + sulfuricAcid = new Liquid("sulfuricAcid", Color.YELLOW) { + { + flammability = 0.4f; + explosiveness = 0.4f; + heatCapacity = 0.4f; + } + }; +} diff --git a/core/src/io/anuke/mindustry/content/Mechs.java b/core/src/io/anuke/mindustry/content/Mechs.java new file mode 100644 index 0000000000..8653a6e0d1 --- /dev/null +++ b/core/src/io/anuke/mindustry/content/Mechs.java @@ -0,0 +1,10 @@ +package io.anuke.mindustry.content; + +import io.anuke.mindustry.resource.Mech; + +public class Mechs { + public static final Mech + + standard = new Mech("standard-mech", false), + standardShip = new Mech("standard-ship", true); +} diff --git a/core/src/io/anuke/mindustry/content/Recipes.java b/core/src/io/anuke/mindustry/content/Recipes.java new file mode 100644 index 0000000000..a30d40748d --- /dev/null +++ b/core/src/io/anuke/mindustry/content/Recipes.java @@ -0,0 +1,139 @@ +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)), + + 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.tunnel, 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, 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(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.magmaturret, 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(crafting, ProductionBlocks.smelter, stack(Items.iron, 40)), + new Recipe(crafting, ProductionBlocks.alloysmelter, stack(Items.titanium, 50), stack(Items.steel, 50)), + new Recipe(crafting, ProductionBlocks.coalextractor, stack(Items.steel, 10), stack(Items.iron, 10)), + new Recipe(crafting, ProductionBlocks.titaniumextractor, stack(Items.steel, 30), stack(Items.iron, 30)), + new Recipe(crafting, ProductionBlocks.oilrefinery, stack(Items.steel, 15), stack(Items.iron, 15)), + new Recipe(crafting, ProductionBlocks.stoneformer, stack(Items.steel, 10), stack(Items.iron, 10)), + new Recipe(crafting, ProductionBlocks.lavasmelter, stack(Items.steel, 30), stack(Items.titanium, 15)), + new Recipe(crafting, ProductionBlocks.siliconextractor, stack(Items.steel, 30), stack(Items.titanium, 15)), + new Recipe(crafting, ProductionBlocks.cryofluidmixer, stack(Items.steel, 30), stack(Items.titanium, 15)), + new Recipe(crafting, ProductionBlocks.weaponFactory, stack(Items.steel, 60), stack(Items.iron, 60)).setDesktop(), + //new Recipe(crafting, ProductionBlocks.centrifuge, stack(Item.steel, 30), stack(Item.iron, 30)), + + //new Recipe(production, ProductionBlocks.stonedrill, stack(Item.stone, 12)), + new Recipe(production, ProductionBlocks.irondrill, stack(Items.iron, 25)), + new Recipe(production, ProductionBlocks.leaddrill, stack(Items.iron, 25)), + new Recipe(production, ProductionBlocks.coaldrill, stack(Items.iron, 25), stack(Items.iron, 40)), + new Recipe(production, ProductionBlocks.titaniumdrill, stack(Items.iron, 50), stack(Items.steel, 50)), + new Recipe(production, ProductionBlocks.thoriumdrill, stack(Items.iron, 40), stack(Items.steel, 40)), + new Recipe(production, ProductionBlocks.quartzextractor, 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.laserdrill, 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(power, PowerBlocks.coalgenerator, stack(Items.iron, 30)), + new Recipe(power, PowerBlocks.thermalgenerator, stack(Items.steel, 30)), + new Recipe(power, PowerBlocks.combustiongenerator, stack(Items.iron, 30)), + 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.rtgenerator, stack(Items.titanium, 20), stack(Items.steel, 20)), + new Recipe(power, PowerBlocks.nuclearReactor, stack(Items.titanium, 40), stack(Items.densealloy, 40), stack(Items.steel, 50)), + new Recipe(power, PowerBlocks.powernode, 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.shieldgenerator, stack(Items.titanium, 30), stack(Items.densealloy, 30)), + + new Recipe(distribution, PowerBlocks.teleporter, stack(Items.steel, 30), stack(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(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.conduittunnel, stack(Items.titanium, 2), stack(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(units, UnitBlocks.flierFactory, stack(Items.steel, 10)), + 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.android && recipe.desktopOnly) && !(!debug && recipe.debugOnly)) { + r.add(recipe); + } + } + + return r; + } +} diff --git a/core/src/io/anuke/mindustry/content/UnitTypes.java b/core/src/io/anuke/mindustry/content/UnitTypes.java new file mode 100644 index 0000000000..3305245e10 --- /dev/null +++ b/core/src/io/anuke/mindustry/content/UnitTypes.java @@ -0,0 +1,12 @@ +package io.anuke.mindustry.content; + +import io.anuke.mindustry.entities.units.UnitType; +import io.anuke.mindustry.entities.units.types.Flier; +import io.anuke.mindustry.entities.units.types.Scout; + +public class UnitTypes { + public static final UnitType + + scout = new Scout(), + flier = new Flier(); +} diff --git a/core/src/io/anuke/mindustry/resource/UpgradeRecipes.java b/core/src/io/anuke/mindustry/content/UpgradeRecipes.java similarity index 50% rename from core/src/io/anuke/mindustry/resource/UpgradeRecipes.java rename to core/src/io/anuke/mindustry/content/UpgradeRecipes.java index 7be2113018..92c5fb270e 100644 --- a/core/src/io/anuke/mindustry/resource/UpgradeRecipes.java +++ b/core/src/io/anuke/mindustry/content/UpgradeRecipes.java @@ -1,16 +1,19 @@ -package io.anuke.mindustry.resource; +package io.anuke.mindustry.content; import com.badlogic.gdx.utils.ObjectMap; import com.badlogic.gdx.utils.ObjectMap.Entries; +import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.resource.ItemStack; +import io.anuke.mindustry.resource.Upgrade; import io.anuke.ucore.util.Mathf; public class UpgradeRecipes { private static final ObjectMap recipes = Mathf.map( - Weapon.triblaster, list(stack(Item.iron, 60), stack(Item.steel, 80)), - Weapon.clustergun, list(stack(Item.iron, 300), stack(Item.steel, 80)), - Weapon.vulcan, list(stack(Item.iron, 100), stack(Item.steel, 150), stack(Item.titanium, 80)), - Weapon.beam, list(stack(Item.steel, 260), stack(Item.titanium, 160), stack(Item.densealloy, 120)), - Weapon.shockgun, list(stack(Item.steel, 240), stack(Item.titanium, 160), stack(Item.densealloy, 160)) + Weapons.triblaster, list(stack(Items.iron, 60), stack(Items.steel, 80)), + Weapons.clustergun, list(stack(Items.iron, 300), stack(Items.steel, 80)), + Weapons.vulcan, list(stack(Items.iron, 100), stack(Items.steel, 150), stack(Items.titanium, 80)), + Weapons.beam, list(stack(Items.steel, 260), stack(Items.titanium, 160), stack(Items.densealloy, 120)), + Weapons.shockgun, list(stack(Items.steel, 240), stack(Items.titanium, 160), stack(Items.densealloy, 160)) ); private static final ItemStack[] empty = {}; diff --git a/core/src/io/anuke/mindustry/content/Weapons.java b/core/src/io/anuke/mindustry/content/Weapons.java new file mode 100644 index 0000000000..52a8462fdf --- /dev/null +++ b/core/src/io/anuke/mindustry/content/Weapons.java @@ -0,0 +1,60 @@ +package io.anuke.mindustry.content; + +import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.graphics.Fx; +import io.anuke.mindustry.resource.Weapon; + +public class Weapons { + public static final Weapon + + blaster = new Weapon("blaster", 12, BulletType.shot) { + { + effect = Fx.laserShoot; + length = 2f; + } + }, + triblaster = new Weapon("triblaster", 16, BulletType.spread) { + { + shots = 3; + effect = Fx.spreadShoot; + roundrobin = true; + } + }, + clustergun = new Weapon("clustergun", 26f, BulletType.cluster) { + { + effect = Fx.clusterShoot; + inaccuracy = 17f; + roundrobin = true; + shots = 2; + spacing = 0; + } + }, + beam = new Weapon("beam", 30f, BulletType.beamlaser) { + { + effect = Fx.beamShoot; + inaccuracy = 0; + roundrobin = true; + shake = 2f; + } + }, + vulcan = new Weapon("vulcan", 5, BulletType.vulcan) { + { + effect = Fx.vulcanShoot; + inaccuracy = 5; + roundrobin = true; + shake = 1f; + inaccuracy = 4f; + } + }, + shockgun = new Weapon("shockgun", 36, BulletType.shockshell) { + { + shootsound = "bigshot"; + effect = Fx.shockShoot; + shake = 2f; + roundrobin = true; + shots = 7; + inaccuracy = 15f; + length = 3.5f; + } + }; +} diff --git a/core/src/io/anuke/mindustry/content/blocks/Blocks.java b/core/src/io/anuke/mindustry/content/blocks/Blocks.java new file mode 100644 index 0000000000..213e4a40b7 --- /dev/null +++ b/core/src/io/anuke/mindustry/content/blocks/Blocks.java @@ -0,0 +1,153 @@ +package io.anuke.mindustry.content.blocks; + +import io.anuke.mindustry.content.Items; +import io.anuke.mindustry.content.Liquids; +import io.anuke.mindustry.graphics.DrawLayer; +import io.anuke.mindustry.resource.ItemStack; +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.blocks.types.*; + +public class Blocks { + public static final Block + + air = new Block("air") { + //don't draw + public void draw(Tile tile) {} + }, + + //player/enemy spawnpoint? + spawn = new Block("spawn"), + + blockpart = new BlockPart(), + + deepwater = new Floor("deepwater") {{ + variants = 0; + solid = true; + liquidDrop = Liquids.water; + liquid = true; + drawLayer = DrawLayer.water; + }}, + + water = new Floor("water") {{ + variants = 0; + solid = true; + liquidDrop = Liquids.water; + liquid = true; + drawLayer = DrawLayer.water; + }}, + + lava = new Floor("lava") {{ + variants = 0; + solid = true; + liquidDrop = Liquids.lava; + liquid = true; + drawLayer = DrawLayer.lava; + }}, + + oil = new Floor("oil") {{ + variants = 0; + solid = true; + liquidDrop = Liquids.oil; + liquid = true; + drawLayer = DrawLayer.oil; + }}, + + stone = new Floor("stone") {{ + drops = new ItemStack(Items.stone, 1); + blends = block -> block != this && !(block instanceof Ore); + }}, + + blackstone = new Floor("blackstone") {{ + drops = new ItemStack(Items.stone, 1); + }}, + + iron = new Ore("iron") {{ + drops = new ItemStack(Items.iron, 1); + }}, + + lead = new Ore("lead") {{ + drops = new ItemStack(Items.lead, 1); + }}, + + coal = new Ore("coal") {{ + drops = new ItemStack(Items.coal, 1); + }}, + + titanium = new Ore("titanium") {{ + drops = new ItemStack(Items.titanium, 1); + }}, + + thorium = new Ore("thorium") {{ + drops = new ItemStack(Items.thorium, 1); + }}, + + dirt = new Floor("dirt") { + }, + + sand = new Floor("sand") {{ + drops = new ItemStack(Items.silicon, 1); + }}, + + ice = new Floor("ice") { + }, + + snow = new Floor("snow") { + }, + + grass = new Floor("grass") { + }, + + sandblock = new StaticBlock("sandblock") {{ + solid = true; + variants = 3; + }}, + + snowblock = new StaticBlock("snowblock") {{ + solid = true; + variants = 3; + }}, + + stoneblock = new StaticBlock("stoneblock") {{ + solid = true; + variants = 3; + }}, + + blackstoneblock = new StaticBlock("blackstoneblock") {{ + solid = true; + variants = 3; + }}, + + grassblock = new StaticBlock("grassblock") {{ + solid = true; + variants = 2; + }}, + + mossblock = new StaticBlock("mossblock") {{ + solid = true; + }}, + + shrub = new Rock("shrub"), + + rock = new Rock("rock") {{ + variants = 2; + varyShadow = true; + drops = new ItemStack(Items.stone, 3); + }}, + + icerock = new Rock("icerock") {{ + variants = 2; + varyShadow = true; + drops = new ItemStack(Items.stone, 3); + }}, + + blackrock = new Rock("blackrock") {{ + variants = 1; + varyShadow = true; + drops = new ItemStack(Items.stone, 3); + }}, + + dirtblock = new StaticBlock("dirtblock") {{ + solid = true; + }}; +} diff --git a/core/src/io/anuke/mindustry/world/blocks/DebugBlocks.java b/core/src/io/anuke/mindustry/content/blocks/DebugBlocks.java similarity index 93% rename from core/src/io/anuke/mindustry/world/blocks/DebugBlocks.java rename to core/src/io/anuke/mindustry/content/blocks/DebugBlocks.java index 861086758e..3ad47e6071 100644 --- a/core/src/io/anuke/mindustry/world/blocks/DebugBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/DebugBlocks.java @@ -1,4 +1,4 @@ -package io.anuke.mindustry.world.blocks; +package io.anuke.mindustry.content.blocks; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/content/blocks/DefenseBlocks.java b/core/src/io/anuke/mindustry/content/blocks/DefenseBlocks.java new file mode 100644 index 0000000000..863c9ee7fa --- /dev/null +++ b/core/src/io/anuke/mindustry/content/blocks/DefenseBlocks.java @@ -0,0 +1,66 @@ +package io.anuke.mindustry.content.blocks; + +import io.anuke.mindustry.graphics.Fx; +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.blocks.types.Wall; +import io.anuke.mindustry.world.blocks.types.defense.*; + +public class DefenseBlocks { + static final int wallHealthMultiplier = 4; + + public static final Block + + stonewall = new Wall("stonewall") {{ + health = 40 * wallHealthMultiplier; + }}, + + ironwall = new Wall("ironwall") {{ + health = 80 * wallHealthMultiplier; + }}, + + steelwall = new Wall("steelwall") {{ + health = 110 * wallHealthMultiplier; + }}, + + titaniumwall = new Wall("titaniumwall") {{ + health = 150 * wallHealthMultiplier; + }}, + + diriumwall = new Wall("duriumwall") {{ + health = 190 * wallHealthMultiplier; + }}, + + compositewall = new Wall("compositewall") {{ + health = 270 * wallHealthMultiplier; + }}, + + steelwalllarge = new Wall("steelwall-large") {{ + health = 110 * 4 * wallHealthMultiplier; + size = 2; + }}, + + titaniumwalllarge = new Wall("titaniumwall-large") {{ + health = 150 * 4 * wallHealthMultiplier; + size = 2; + }}, + + diriumwalllarge = new Wall("duriumwall-large") {{ + health = 190 * 4 * wallHealthMultiplier; + size = 2; + }}, + + titaniumshieldwall = new ShieldedWallBlock("titaniumshieldwall") {{ + health = 150 * wallHealthMultiplier; + }}, + + door = new Door("door") {{ + health = 90 * wallHealthMultiplier; + }}, + + largedoor = new Door("door-large") {{ + openfx = Fx.dooropenlarge; + closefx = Fx.doorcloselarge; + health = 90 * 4 * wallHealthMultiplier; + size = 2; + }}; +} diff --git a/core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java b/core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java new file mode 100644 index 0000000000..5c9a7074d3 --- /dev/null +++ b/core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java @@ -0,0 +1,44 @@ +package io.anuke.mindustry.content.blocks; + +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.blocks.types.distribution.*; + +public class DistributionBlocks{ + + public static final Block + + conveyor = new Conveyor("conveyor"){{ + health = 40; + speed = 0.02f; + }}, + + steelconveyor = new Conveyor("steelconveyor"){{ + health = 55; + speed = 0.04f; + }}, + + pulseconveyor = new Conveyor("poweredconveyor"){{ + health = 75; + speed = 0.09f; + }}, + + router = new Router("router"), + + multiplexer = new Router("multiplexer"){{ + size = 2; + itemCapacity = 80; + }}, + + junction = new Junction("junction"){{ + speed = 26; + capacity = 32; + }}, + + tunnel = new TunnelConveyor("conveyortunnel"){{ + speed = 53; + }}, + + sorter = new Sorter("sorter"), + + splitter = new Splitter("splitter"); +} diff --git a/core/src/io/anuke/mindustry/content/blocks/LiquidBlocks.java b/core/src/io/anuke/mindustry/content/blocks/LiquidBlocks.java new file mode 100644 index 0000000000..9ec0bdb7b7 --- /dev/null +++ b/core/src/io/anuke/mindustry/content/blocks/LiquidBlocks.java @@ -0,0 +1,45 @@ +package io.anuke.mindustry.content.blocks; + +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.blocks.types.distribution.Conduit; +import io.anuke.mindustry.world.blocks.types.distribution.LiquidJunction; +import io.anuke.mindustry.world.blocks.types.distribution.LiquidRouter; +import io.anuke.mindustry.world.blocks.types.distribution.TunnelConduit; +import io.anuke.mindustry.world.blocks.types.production.Pump; + +public class LiquidBlocks { + public static final Block + + pump = new Pump("pump") {{ + pumpAmount = 0.8f; + }}, + + fluxpump = new Pump("fluxpump") {{ + pumpAmount = 1.2f; + }}, + + conduit = new Conduit("conduit") {{ + health = 45; + }}, + + pulseconduit = new Conduit("pulseconduit") {{ + liquidCapacity = 16f; + liquidFlowFactor = 4.9f; + health = 65; + }}, + + liquidrouter = new LiquidRouter("liquidrouter") {{ + liquidCapacity = 40f; + }}, + + liquidtank = new LiquidRouter("liquidtank") {{ + size = 3; + liquidCapacity = 1500f; + }}, + + liquidjunction = new LiquidJunction("liquidjunction"), + + conduittunnel = new TunnelConduit("conduittunnel") {{ + speed = 53; + }}; +} diff --git a/core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java b/core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java new file mode 100644 index 0000000000..ccef03df3b --- /dev/null +++ b/core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java @@ -0,0 +1,89 @@ +package io.anuke.mindustry.content.blocks; + +import io.anuke.mindustry.content.Items; +import io.anuke.mindustry.content.Liquids; +import io.anuke.mindustry.graphics.Fx; +import io.anuke.mindustry.world.Block; +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.distribution.Teleporter; +import io.anuke.mindustry.world.blocks.types.generation.*; + +public class PowerBlocks { + public static final Block + + coalgenerator = new ItemPowerGenerator("coalgenerator") {{ + generateItem = Items.coal; + powerOutput = 0.04f; + powerCapacity = 40f; + }}, + + thermalgenerator = new LiquidPowerGenerator("thermalgenerator") {{ + generateLiquid = Liquids.lava; + maxLiquidGenerate = 0.5f; + powerPerLiquid = 0.08f; + powerCapacity = 40f; + generateEffect = Fx.redgeneratespark; + }}, + + combustiongenerator = new LiquidPowerGenerator("combustiongenerator") {{ + generateLiquid = Liquids.oil; + maxLiquidGenerate = 0.4f; + powerPerLiquid = 0.12f; + powerCapacity = 40f; + }}, + + rtgenerator = new ItemPowerGenerator("rtgenerator") {{ + generateItem = Items.thorium; + powerCapacity = 40f; + powerOutput = 0.03f; + itemDuration = 240f; + }}, + + solarpanel = new SolarGenerator("solarpanel") {{ + generation = 0.003f; + }}, + + largesolarpanel = new SolarGenerator("largesolarpanel") {{ + size = 3; + generation = 0.012f; + }}, + + nuclearReactor = new NuclearReactor("nuclearreactor") {{ + size = 3; + health = 600; + breaktime *= 2.3f; + }}, + + repairturret = new RepairTurret("repairturret") {{ + range = 30; + reload = 20f; + health = 60; + powerUsed = 0.08f; + }}, + + megarepairturret = new RepairTurret("megarepairturret") {{ + range = 44; + reload = 12f; + health = 90; + powerUsed = 0.13f; + size = 2; + }}, + + shieldgenerator = new ShieldBlock("shieldgenerator") {{ + health = 400; + }}, + + battery = new PowerGenerator("battery") {{ + powerCapacity = 320f; + }}, + + batteryLarge = new PowerGenerator("batterylarge") {{ + size = 3; + powerCapacity = 2000f; + }}, + + powernode = new PowerDistributor("powernode"), + + teleporter = new Teleporter("teleporter"); +} diff --git a/core/src/io/anuke/mindustry/content/blocks/ProductionBlocks.java b/core/src/io/anuke/mindustry/content/blocks/ProductionBlocks.java new file mode 100644 index 0000000000..6b6d372133 --- /dev/null +++ b/core/src/io/anuke/mindustry/content/blocks/ProductionBlocks.java @@ -0,0 +1,215 @@ +package io.anuke.mindustry.content.blocks; + +import io.anuke.mindustry.content.Items; +import io.anuke.mindustry.content.Liquids; +import io.anuke.mindustry.graphics.Fx; +import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.blocks.types.production.*; + +public class ProductionBlocks { + public static final Block + + smelter = new Smelter("smelter") {{ + health = 70; + inputs = new Item[]{Items.iron}; + fuel = Items.coal; + result = Items.steel; + craftTime = 25f; + }}, + + alloysmelter = new Smelter("alloysmelter") {{ + health = 90; + inputs = new Item[]{Items.titanium, Items.steel}; + fuel = Items.coal; + result = Items.densealloy; + burnDuration = 45f; + craftTime = 25f; + }}, + + powersmelter = new PowerSmelter("powersmelter") {{ + /* + health = 90; + inputs = new Item[]{Item.titanium, Item.steel}; + fuel = Item.coal; + results = Item.dirium; + burnDuration = 45f; + craftTime = 25f; + size = 2;*/ + }}, + + cryofluidmixer = new LiquidMixer("cryofluidmixer") {{ + health = 200; + inputLiquid = Liquids.water; + outputLiquid = Liquids.cryofluid; + inputItem = Items.titanium; + liquidPerItem = 50f; + itemCapacity = 50; + powerUse = 0.1f; + size = 2; + }}, + + coalextractor = new LiquidCrafter("coalextractor") {{ + input = Items.stone; + inputAmount = 6; + inputLiquid = Liquids.water; + liquidAmount = 19f; + output = Items.coal; + health = 50; + purifyTime = 50; + health = 60; + }}, + + titaniumextractor = new LiquidCrafter("titaniumextractor") {{ + input = Items.stone; + inputAmount = 8; + inputLiquid = Liquids.water; + liquidAmount = 40f; + liquidCapacity = 41f; + purifyTime = 60; + output = Items.titanium; + health = 70; + }}, + + oilrefinery = new LiquidCrafter("oilrefinery") {{ + inputLiquid = Liquids.oil; + liquidAmount = 55f; + liquidCapacity = 56f; + purifyTime = 65; + output = Items.coal; + health = 80; + craftEffect = Fx.purifyoil; + }}, + + stoneformer = new LiquidCrafter("stoneformer") {{ + input = null; + inputLiquid = Liquids.lava; + liquidAmount = 16f; + liquidCapacity = 21f; + purifyTime = 12; + output = Items.stone; + health = 80; + craftEffect = Fx.purifystone; + }}, + + lavasmelter = new LiquidCrafter("lavasmelter") {{ + input = Items.iron; + inputAmount = 1; + inputLiquid = Liquids.lava; + liquidAmount = 40f; + liquidCapacity = 41f; + purifyTime = 30; + output = Items.steel; + health = 80; + craftEffect = Fx.purifystone; + }}, + + siliconextractor = new LiquidCrafter("siliconextractor") {{ + input = Items.stone; + inputAmount = 5; + inputLiquid = Liquids.water; + liquidAmount = 18.99f; + output = Items.silicon; + health = 50; + purifyTime = 50; + }}, + + stonedrill = new Drill("stonedrill") {{ + resource = Blocks.stone; + result = Items.stone; + drillTime = 240; + }}, + + irondrill = new Drill("irondrill") {{ + resource = Blocks.iron; + result = Items.iron; + drillTime = 360; + }}, + + leaddrill = new Drill("leaddrill") {{ + resource = Blocks.lead; + result = Items.lead; + drillTime = 400; + }}, + + coaldrill = new Drill("coaldrill") {{ + resource = Blocks.coal; + result = Items.coal; + drillTime = 420; + }}, + + thoriumdrill = new Drill("thoriumdrill") {{ + resource = Blocks.thorium; + result = Items.thorium; + drillTime = 600; + }}, + + titaniumdrill = new Drill("titaniumdrill") {{ + resource = Blocks.titanium; + result = Items.titanium; + drillTime = 540; + }}, + + laserdrill = new GenericDrill("laserdrill") {{ + drillTime = 200; + size = 2; + powerUse = 0.2f; + hasPower = true; + }}, + + nucleardrill = new GenericDrill("nucleardrill") {{ + drillTime = 240; + size = 3; + powerUse = 0.32f; + hasPower = true; + }}, + + plasmadrill = new GenericDrill("plasmadrill") {{ + inputLiquid = Liquids.plasma; + drillTime = 240; + size = 4; + powerUse = 0.16f; + hasLiquids = true; + hasPower = true; + }}, + + quartzextractor = new GenericDrill("quartzextractor") {{ + powerUse = 0.1f; + resource = Blocks.sand; + result = Items.silicon; + drillTime = 320; + size = 2; + }}, + + waterextractor = new SolidPump("waterextractor") {{ + result = Liquids.water; + powerUse = 0.1f; + pumpAmount = 0.4f; + size = 2; + liquidCapacity = 30f; + }}, + + oilextractor = new SolidPump("oilextractor") {{ + result = Liquids.oil; + powerUse = 0.5f; + pumpAmount = 0.4f; + size = 3; + liquidCapacity = 80f; + }}, + + cultivator = new GenericDrill("cultivator") {{ + resource = Blocks.grass; + result = Items.biomatter; + inputLiquid = Liquids.water; + liquidUse = 0.1f; + drillTime = 300; + size = 2; + hasLiquids = true; + hasPower = true; + }}, + + weaponFactory = new WeaponFactory("weaponfactory") {{ + size = 2; + health = 250; + }}; +} diff --git a/core/src/io/anuke/mindustry/content/blocks/StorageBlocks.java b/core/src/io/anuke/mindustry/content/blocks/StorageBlocks.java new file mode 100644 index 0000000000..e2c2590994 --- /dev/null +++ b/core/src/io/anuke/mindustry/content/blocks/StorageBlocks.java @@ -0,0 +1,27 @@ +package io.anuke.mindustry.content.blocks; + +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.blocks.types.storage.CoreBlock; +import io.anuke.mindustry.world.blocks.types.storage.SortedUnloader; +import io.anuke.mindustry.world.blocks.types.storage.Unloader; +import io.anuke.mindustry.world.blocks.types.storage.Vault; + +public class StorageBlocks { + public static final Block + + core = new CoreBlock("core"){{ + health = 800; + }}, + + vault = new Vault("vault"){{ + size = 3; + }}, + + unloader = new Unloader("unloader"){{ + speed = 5; + }}, + + sortedunloader = new SortedUnloader("sortedunloader"){{ + speed = 5; + }}; +} diff --git a/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java b/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java new file mode 100644 index 0000000000..6355cca507 --- /dev/null +++ b/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java @@ -0,0 +1,13 @@ +package io.anuke.mindustry.content.blocks; + +import io.anuke.mindustry.content.UnitTypes; +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.blocks.types.production.UnitFactory; + +public class UnitBlocks { + public static final Block + + flierFactory = new UnitFactory("flierfactory"){{ + type = UnitTypes.flier; + }}; +} diff --git a/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java b/core/src/io/anuke/mindustry/content/blocks/WeaponBlocks.java similarity index 91% rename from core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java rename to core/src/io/anuke/mindustry/content/blocks/WeaponBlocks.java index 714ae41756..b5df92fc3f 100644 --- a/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/WeaponBlocks.java @@ -1,11 +1,11 @@ -package io.anuke.mindustry.world.blocks; +package io.anuke.mindustry.content.blocks; import com.badlogic.gdx.graphics.Color; +import io.anuke.mindustry.content.Items; +import io.anuke.mindustry.content.Liquids; import io.anuke.mindustry.entities.BulletType; import io.anuke.mindustry.entities.effect.TeslaOrb; import io.anuke.mindustry.graphics.Fx; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.Liquid; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.defense.LaserTurret; @@ -24,7 +24,7 @@ public class WeaponBlocks{ range = 44; reload = 13f; bullet = BulletType.stone; - ammo = Item.stone; + ammo = Items.stone; health = 45; } @@ -44,7 +44,7 @@ public class WeaponBlocks{ range = 65; reload = 7f; bullet = BulletType.iron; - ammo = Item.iron; + ammo = Items.iron; health = 65; } }, @@ -54,7 +54,7 @@ public class WeaponBlocks{ range = 45f; reload = 5f; bullet = BulletType.flame; - ammo = Item.coal; + ammo = Items.coal; health = 90; inaccuracy = 4f; } @@ -66,7 +66,7 @@ public class WeaponBlocks{ range = 120; reload = 50f; bullet = BulletType.sniper; - ammo = Item.steel; + ammo = Items.steel; health = 70; shootEffect = Fx.railshot; } @@ -81,7 +81,7 @@ public class WeaponBlocks{ bullet = BulletType.flak; shots = 3; inaccuracy = 9f; - ammo = Item.coal; + ammo = Items.coal; ammoMultiplier = 5; health = 110; shootEffect = Fx.mortarshot; @@ -128,7 +128,7 @@ public class WeaponBlocks{ range = 90f; reload = 7f; bullet = BulletType.plasmaflame; - ammoLiquid = Liquid.lava; + ammoLiquid = Liquids.lava; liquidPerShot = 3f; health = 180*3; size = 2; @@ -142,7 +142,7 @@ public class WeaponBlocks{ range = 60f; reload = 3f; bullet = BulletType.plasmaflame; - ammo = Item.coal; + ammo = Items.coal; health = 180; ammoMultiplier = 40; } @@ -155,7 +155,7 @@ public class WeaponBlocks{ range = 80f; reload = 8f; bullet = BulletType.chain; - ammo = Item.thorium; + ammo = Items.thorium; health = 430; size = 2; shootCone = 9f; @@ -188,7 +188,7 @@ public class WeaponBlocks{ range = 120f; reload = 23f; bullet = BulletType.titanshell; - ammo = Item.thorium; + ammo = Items.thorium; health = 800; ammoMultiplier = 4; size = 3; @@ -205,7 +205,7 @@ public class WeaponBlocks{ range = 120f; reload = 23f; bullet = BulletType.titanshell; - ammo = Item.thorium; + ammo = Items.thorium; health = 800; ammoMultiplier = 4; size = 3; @@ -221,7 +221,7 @@ public class WeaponBlocks{ range = 120f; reload = 23f; bullet = BulletType.titanshell; - ammo = Item.thorium; + ammo = Items.thorium; health = 800; ammoMultiplier = 4; size = 2; diff --git a/core/src/io/anuke/mindustry/core/ContentLoader.java b/core/src/io/anuke/mindustry/core/ContentLoader.java new file mode 100644 index 0000000000..9d91c3c0ef --- /dev/null +++ b/core/src/io/anuke/mindustry/core/ContentLoader.java @@ -0,0 +1,58 @@ +package io.anuke.mindustry.core; + +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.content.blocks.*; +import io.anuke.mindustry.entities.units.UnitType; +import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.resource.Mech; +import io.anuke.mindustry.world.Block; +import io.anuke.ucore.util.Log; + +/**Loads all game content by creating class instances. + * Call load() before doing anything with content.*/ +public class ContentLoader { + + public static void load(){ + + Object[] content = { + //blocks + new Blocks(), + new DefenseBlocks(), + new DistributionBlocks(), + new ProductionBlocks(), + new WeaponBlocks(), + new DebugBlocks(), + new LiquidBlocks(), + new StorageBlocks(), + new UnitBlocks(), + new PowerBlocks(), + + //items + new Items(), + + //liquids + new Liquids(), + + //mechs + new Mechs(), + + //weapons + new Weapons(), + + //units + new UnitTypes(), + }; + + for(Block block : Block.getAllBlocks()){ + block.init(); + } + + Log.info("--- CONTENT INFO ---"); + Log.info("Blocks loaded: {0}\nItems loaded: {1}\nLiquids loaded: {2}\nUpgrades loaded: {3}\nUnits loaded: {4}", + Block.getAllBlocks().size, Item.getAllItems().size, Liquid.getAllLiquids().size, + Mech.getAllUpgrades().size, UnitType.getAllTypes().size); + + Log.info("-------------------"); + } +} diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index af710cb783..550005937b 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -3,6 +3,8 @@ package io.anuke.mindustry.core; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input.Buttons; import com.badlogic.gdx.graphics.Color; +import io.anuke.mindustry.content.Mechs; +import io.anuke.mindustry.content.Weapons; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.game.EventType.*; @@ -18,8 +20,6 @@ import io.anuke.mindustry.io.Platform; import io.anuke.mindustry.io.Saves; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.Mech; -import io.anuke.mindustry.resource.Weapon; import io.anuke.ucore.UCore; import io.anuke.ucore.core.*; import io.anuke.ucore.core.Inputs.DeviceType; @@ -123,7 +123,7 @@ public class Control extends Module{ player = new Player(); player.name = Settings.getString("name"); - player.mech = android ? Mech.standardShip : Mech.standard; + player.mech = android ? Mechs.standardShip : Mechs.standard; player.color.set(Settings.getInt("color")); player.isLocal = true; @@ -149,7 +149,7 @@ public class Control extends Module{ Events.on(ResetEvent.class, () -> { upgrades.reset(); - player.weaponLeft = player.weaponRight = Weapon.blaster; + player.weaponLeft = player.weaponRight = Weapons.blaster; player.team = Team.blue; player.add(); diff --git a/core/src/io/anuke/mindustry/core/GameState.java b/core/src/io/anuke/mindustry/core/GameState.java index afd45fde8c..6d673462f9 100644 --- a/core/src/io/anuke/mindustry/core/GameState.java +++ b/core/src/io/anuke/mindustry/core/GameState.java @@ -1,11 +1,10 @@ package io.anuke.mindustry.core; -import com.badlogic.gdx.utils.ObjectSet; import io.anuke.mindustry.game.Difficulty; import io.anuke.mindustry.game.EventType.StateChangeEvent; import io.anuke.mindustry.game.GameMode; import io.anuke.mindustry.game.Inventory; -import io.anuke.mindustry.game.Team; +import io.anuke.mindustry.game.TeamInfo; import io.anuke.ucore.core.Events; public class GameState{ @@ -21,8 +20,7 @@ public class GameState{ public GameMode mode = GameMode.waves; public Difficulty difficulty = Difficulty.normal; public boolean friendlyFire; - public ObjectSet enemyTeams = new ObjectSet<>(), //enemies to the player team - allyTeams = new ObjectSet<>(); //allies to the player team, includes the player team + public TeamInfo teams = new TeamInfo(); public void set(State astate){ Events.fire(StateChangeEvent.class, state, astate); diff --git a/core/src/io/anuke/mindustry/core/Logic.java b/core/src/io/anuke/mindustry/core/Logic.java index 4b899f6994..b02db270b2 100644 --- a/core/src/io/anuke/mindustry/core/Logic.java +++ b/core/src/io/anuke/mindustry/core/Logic.java @@ -1,14 +1,13 @@ package io.anuke.mindustry.core; -import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.game.EnemySpawn; import io.anuke.mindustry.game.EventType.GameOverEvent; import io.anuke.mindustry.game.EventType.PlayEvent; import io.anuke.mindustry.game.EventType.ResetEvent; import io.anuke.mindustry.game.EventType.WaveEvent; import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.game.WaveCreator; +import io.anuke.mindustry.game.TeamInfo; +import io.anuke.mindustry.game.TeamInfo.TeamData; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.NetEvents; import io.anuke.ucore.core.Events; @@ -27,7 +26,10 @@ import static io.anuke.mindustry.Vars.*; * This class should not call any outside methods to change state of modules, but instead fire events. */ public class Logic extends Module { - private final Array spawns = WaveCreator.getSpawns(); + + public Logic(){ + state = new GameState(); + } @Override public void init(){ @@ -52,10 +54,9 @@ public class Logic extends Module { state.enemies = 0; state.gameOver = false; state.inventory.clearItems(); - state.allyTeams.clear(); - state.allyTeams.add(Team.blue); - state.enemyTeams.clear(); - state.enemyTeams.add(Team.red); + state.teams = new TeamInfo(); + state.teams.add(Team.blue, true); + state.teams.add(Team.red, false); Timers.clear(); Entities.clear(); @@ -86,8 +87,16 @@ public class Logic extends Module { if(!Net.client()) world.pathfinder().update(); + boolean gameOver = true; - if(world.getAllyCores().size == 0 && !state.gameOver){ //TODO gameover state + for(TeamData data : state.teams.getTeams(true)){ + if(data.cores.size > 0){ + gameOver = false; + break; + } + } + + if(gameOver && !state.gameOver){ //TODO better gameover state, victory state? state.gameOver = true; if(Net.server()) NetEvents.handleGameOver(); Events.fire(GameOverEvent.class); diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index 4252ce07aa..1a8426eebf 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -1,6 +1,9 @@ package io.anuke.mindustry.core; import com.badlogic.gdx.utils.*; +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; import io.anuke.mindustry.entities.Player; @@ -12,7 +15,9 @@ import io.anuke.mindustry.net.*; import io.anuke.mindustry.net.Administration.PlayerInfo; import io.anuke.mindustry.net.Net.SendMode; import io.anuke.mindustry.net.Packets.*; -import io.anuke.mindustry.resource.*; +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.ucore.core.Events; @@ -95,7 +100,7 @@ public class NetServer extends Module{ player.isAdmin = admins.isAdmin(uuid, ip); player.clientid = id; player.name = packet.name; - player.mech = packet.android ? Mech.standardShip : Mech.standard; + player.mech = packet.android ? Mechs.standardShip : Mechs.standard; player.set(world.getSpawnX(), world.getSpawnY()); player.setNet(player.x, player.y); player.setNet(player.x, player.y); diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index 570d97383d..6227251563 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -25,7 +25,7 @@ import io.anuke.mindustry.ui.fragments.ToolFragment; import io.anuke.mindustry.world.BlockBar; import io.anuke.mindustry.world.Layer; import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.ucore.core.*; import io.anuke.ucore.entities.EffectEntity; import io.anuke.ucore.entities.Entities; diff --git a/core/src/io/anuke/mindustry/core/World.java b/core/src/io/anuke/mindustry/core/World.java index f7a0c405c0..6fae4c35aa 100644 --- a/core/src/io/anuke/mindustry/core/World.java +++ b/core/src/io/anuke/mindustry/core/World.java @@ -12,8 +12,8 @@ import io.anuke.mindustry.io.Maps; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.WorldGenerator; -import io.anuke.mindustry.world.blocks.Blocks; -import io.anuke.mindustry.world.blocks.ProductionBlocks; +import io.anuke.mindustry.content.blocks.Blocks; +import io.anuke.mindustry.content.blocks.ProductionBlocks; import io.anuke.ucore.entities.Entities; import io.anuke.ucore.entities.Entity; import io.anuke.ucore.modules.Module; @@ -29,8 +29,6 @@ public class World extends Module{ private Tile[][] tiles; private Pathfind pathfind = new Pathfind(); private Maps maps = new Maps(); - private Array allyCores = new Array<>(); - private Array enemyCores = new Array<>(); private Array tempTiles = new Array<>(); @@ -51,14 +49,6 @@ public class World extends Module{ return pathfind; } - public Array getAllyCores() { - return allyCores; - } - - public Array getEnemyCores() { - return enemyCores; - } - //TODO proper spawnpoints! public float getSpawnX(){ return width() * tilesize/2f; @@ -179,7 +169,7 @@ public class World extends Module{ Entities.resizeTree(0, 0, width * tilesize, height * tilesize); - WorldGenerator.generate(tiles, MapIO.readTileData(map), allyCores); + WorldGenerator.generate(tiles, MapIO.readTileData(map)); } void set(int x, int y, Block type, int rot){ diff --git a/core/src/io/anuke/mindustry/editor/MapEditor.java b/core/src/io/anuke/mindustry/editor/MapEditor.java index 67d0bca6b1..6d476d9f07 100644 --- a/core/src/io/anuke/mindustry/editor/MapEditor.java +++ b/core/src/io/anuke/mindustry/editor/MapEditor.java @@ -4,7 +4,7 @@ import io.anuke.mindustry.game.Team; import io.anuke.mindustry.io.MapTileData; import io.anuke.mindustry.io.MapTileData.TileDataMarker; import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.world.blocks.types.Floor; import io.anuke.ucore.util.Mathf; diff --git a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java index 7b9a9bb2cf..bc73ca39ac 100644 --- a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java @@ -15,7 +15,7 @@ import io.anuke.mindustry.ui.dialogs.FloatingDialog; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.ColorMapper; import io.anuke.mindustry.world.ColorMapper.BlockPair; -import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.ucore.core.Core; import io.anuke.ucore.core.Graphics; import io.anuke.ucore.core.Inputs; diff --git a/core/src/io/anuke/mindustry/editor/MapFilter.java b/core/src/io/anuke/mindustry/editor/MapFilter.java index a01b082a43..65d7686006 100644 --- a/core/src/io/anuke/mindustry/editor/MapFilter.java +++ b/core/src/io/anuke/mindustry/editor/MapFilter.java @@ -8,7 +8,7 @@ import com.badlogic.gdx.utils.OrderedMap; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.ColorMapper; import io.anuke.mindustry.world.ColorMapper.BlockPair; -import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.world.blocks.types.Floor; import io.anuke.ucore.graphics.Pixmaps; import io.anuke.ucore.noise.RidgedPerlin; diff --git a/core/src/io/anuke/mindustry/editor/MapRenderer.java b/core/src/io/anuke/mindustry/editor/MapRenderer.java index d47682567a..1555ada2ad 100644 --- a/core/src/io/anuke/mindustry/editor/MapRenderer.java +++ b/core/src/io/anuke/mindustry/editor/MapRenderer.java @@ -5,7 +5,7 @@ import com.badlogic.gdx.utils.IntSet; import com.badlogic.gdx.utils.IntSet.IntSetIterator; import io.anuke.mindustry.io.MapTileData.TileDataMarker; import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.ucore.core.Core; import io.anuke.ucore.core.Graphics; import io.anuke.ucore.core.Timers; diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index b9c46f52b8..474fab4e73 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -2,6 +2,9 @@ package io.anuke.mindustry.entities; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Vector2; +import io.anuke.mindustry.content.Mechs; +import io.anuke.mindustry.content.Weapons; +import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.graphics.Fx; import io.anuke.mindustry.net.Net; @@ -10,8 +13,10 @@ import io.anuke.mindustry.resource.Mech; import io.anuke.mindustry.resource.Upgrade; import io.anuke.mindustry.resource.Weapon; import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.Blocks; -import io.anuke.ucore.core.*; +import io.anuke.ucore.core.Effects; +import io.anuke.ucore.core.Inputs; +import io.anuke.ucore.core.Settings; +import io.anuke.ucore.core.Timers; import io.anuke.ucore.entities.SolidEntity; import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.util.Angles; @@ -34,9 +39,9 @@ public class Player extends Unit{ public boolean isAdmin; public Color color = new Color(); - public Weapon weaponLeft = Weapon.blaster; - public Weapon weaponRight = Weapon.blaster; - public Mech mech = Mech.standard; + public Weapon weaponLeft = Weapons.blaster; + public Weapon weaponRight = Weapons.blaster; + public Mech mech = Mechs.standard; public float targetAngle = 0f; public float stucktime = 0f; diff --git a/core/src/io/anuke/mindustry/entities/Units.java b/core/src/io/anuke/mindustry/entities/Units.java index 52ddeb6909..e0a11dc96a 100644 --- a/core/src/io/anuke/mindustry/entities/Units.java +++ b/core/src/io/anuke/mindustry/entities/Units.java @@ -70,14 +70,7 @@ public class Units { /**Iterates over all units that are enemies of this team.*/ public static void getNearbyEnemies(Team team, Rectangle rect, Consumer cons){ - //check if it's an ally team to the 'main team' - boolean ally = state.allyTeams.contains(team); - boolean enemy = state.enemyTeams.contains(team); - - //this team isn't even in the game, so target nothing! - if(!ally && !enemy) return; - - ObjectSet targets = ally ? state.enemyTeams : state.allyTeams; + ObjectSet targets = state.teams.enemiesOf(team); for(Team other : targets){ EntityGroup group = unitGroups[other.ordinal()]; @@ -93,12 +86,4 @@ public class Units { } }); } - - /**Returns whether these two teams are enemies.*/ - public static boolean areEnemies(Team team, Team other){ - if(team == other) return false; //fast fail to be more efficient - boolean ally = state.allyTeams.contains(team); - boolean ally2 = state.allyTeams.contains(other); - return ally == ally2; - } } diff --git a/core/src/io/anuke/mindustry/entities/effect/DamageArea.java b/core/src/io/anuke/mindustry/entities/effect/DamageArea.java index e3c5e2a225..7ce4e36cf3 100644 --- a/core/src/io/anuke/mindustry/entities/effect/DamageArea.java +++ b/core/src/io/anuke/mindustry/entities/effect/DamageArea.java @@ -13,6 +13,7 @@ import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Physics; import io.anuke.ucore.util.Translator; +import static io.anuke.mindustry.Vars.state; import static io.anuke.mindustry.Vars.tilesize; import static io.anuke.mindustry.Vars.world; @@ -88,7 +89,7 @@ public class DamageArea{ for(int dx = -trad; dx <= trad; dx ++){ for(int dy= -trad; dy <= trad; dy ++){ Tile tile = world.tile(Mathf.scl2(x, tilesize) + dx, Mathf.scl2(y, tilesize) + dy); - if(tile != null && tile.entity != null && (team == null || Units.areEnemies(team, tile.getTeam())) && Vector2.dst(dx, dy, 0, 0) <= trad){ + if(tile != null && tile.entity != null && (team == null || state.teams.areEnemies(team, tile.getTeam())) && Vector2.dst(dx, dy, 0, 0) <= trad){ int amount = calculateDamage(x, y, tile.worldx(), tile.worldy(), radius, damage); tile.entity.damage(amount); } diff --git a/core/src/io/anuke/mindustry/entities/units/BaseUnit.java b/core/src/io/anuke/mindustry/entities/units/BaseUnit.java index 3dbde54675..6e7083676d 100644 --- a/core/src/io/anuke/mindustry/entities/units/BaseUnit.java +++ b/core/src/io/anuke/mindustry/entities/units/BaseUnit.java @@ -5,6 +5,7 @@ import io.anuke.mindustry.entities.BulletType; import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.game.Team; import io.anuke.ucore.core.Timers; +import io.anuke.ucore.entities.Entity; import io.anuke.ucore.entities.SolidEntity; import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Timer; @@ -17,7 +18,7 @@ public class BaseUnit extends Unit { public UnitType type; public Timer timer = new Timer(5); public float walkTime = 0f; - public Unit target; + public Entity target; public BaseUnit(UnitType type, Team team){ this.type = type; diff --git a/core/src/io/anuke/mindustry/entities/units/FlyingUnitType.java b/core/src/io/anuke/mindustry/entities/units/FlyingUnitType.java index c3aeda7618..14df599f46 100644 --- a/core/src/io/anuke/mindustry/entities/units/FlyingUnitType.java +++ b/core/src/io/anuke/mindustry/entities/units/FlyingUnitType.java @@ -1,12 +1,21 @@ package io.anuke.mindustry.entities.units; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.ObjectSet; import io.anuke.mindustry.entities.Unit; +import io.anuke.mindustry.game.TeamInfo.TeamData; +import io.anuke.mindustry.world.Tile; +import io.anuke.ucore.core.Timers; import io.anuke.ucore.graphics.Draw; +import static io.anuke.mindustry.Vars.state; + public class FlyingUnitType extends UnitType { + private static Vector2 vec = new Vector2(); public FlyingUnitType(String name) { super(name); + speed = 1f; } @Override @@ -20,6 +29,36 @@ public class FlyingUnitType extends UnitType { @Override public void behavior(BaseUnit unit) { + 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 } + + @Override + public void updateTargeting(BaseUnit unit) { + if(!unit.timer.get(timerTarget, 20)) return; + + ObjectSet teams = state.teams.enemyDataOf(unit.team); + + Tile closest = null; + float cdist = 0f; + + for(TeamData data : teams){ + for(Tile tile : data.cores){ + float dist = Vector2.dst(unit.x, unit.y, tile.drawx(), tile.drawy()); + if(closest == null || dist < cdist){ + closest = tile; + cdist = dist; + } + } + } + + if(closest != null){ + unit.target = closest.entity; + }else{ + unit.target = null; + } + } } diff --git a/core/src/io/anuke/mindustry/entities/units/UnitType.java b/core/src/io/anuke/mindustry/entities/units/UnitType.java index 6d4bf6f671..863fd1df0a 100644 --- a/core/src/io/anuke/mindustry/entities/units/UnitType.java +++ b/core/src/io/anuke/mindustry/entities/units/UnitType.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.entities.units; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.entities.Units; import io.anuke.mindustry.graphics.Fx; import io.anuke.mindustry.net.Net; @@ -78,11 +79,11 @@ public abstract class UnitType { public abstract void behavior(BaseUnit unit); public void updateTargeting(BaseUnit unit){ - if(unit.target == null || unit.target.isDead()){ + if(unit.target == null || (unit.target instanceof Unit && ((Unit)unit.target).isDead())){ unit.target = null; } - if(unit.timer.get(timerTarget, 30)){ + if(unit.timer.get(timerTarget, 20)){ unit.target = Units.getClosestEnemy(unit.team, unit.x, unit.y, range, e -> true); } } @@ -113,4 +114,8 @@ public abstract class UnitType { public static UnitType getByID(byte id){ return types.get(id); } + + public static Array getAllTypes(){ + return types; + } } diff --git a/core/src/io/anuke/mindustry/entities/units/UnitTypes.java b/core/src/io/anuke/mindustry/entities/units/UnitTypes.java deleted file mode 100644 index 44c51584bf..0000000000 --- a/core/src/io/anuke/mindustry/entities/units/UnitTypes.java +++ /dev/null @@ -1,9 +0,0 @@ -package io.anuke.mindustry.entities.units; - -import io.anuke.mindustry.entities.units.types.Scout; - -public class UnitTypes { - public static final UnitType - - scout = new Scout(); -} diff --git a/core/src/io/anuke/mindustry/entities/units/types/Flier.java b/core/src/io/anuke/mindustry/entities/units/types/Flier.java new file mode 100644 index 0000000000..418b11daf6 --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/units/types/Flier.java @@ -0,0 +1,11 @@ +package io.anuke.mindustry.entities.units.types; + +import io.anuke.mindustry.entities.units.FlyingUnitType; + +public class Flier extends FlyingUnitType { + + public Flier(){ + super("flier"); + } + +} diff --git a/core/src/io/anuke/mindustry/game/Inventory.java b/core/src/io/anuke/mindustry/game/Inventory.java index 97b7890313..9b059ad864 100644 --- a/core/src/io/anuke/mindustry/game/Inventory.java +++ b/core/src/io/anuke/mindustry/game/Inventory.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.game; +import io.anuke.mindustry.content.Items; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.ItemStack; @@ -29,7 +30,7 @@ public class Inventory { if(item.material) items[item.id] = 99999; } }else{ - addItem(Item.iron, 40); + addItem(Items.iron, 40); } } diff --git a/core/src/io/anuke/mindustry/game/TeamInfo.java b/core/src/io/anuke/mindustry/game/TeamInfo.java new file mode 100644 index 0000000000..afd5966f5f --- /dev/null +++ b/core/src/io/anuke/mindustry/game/TeamInfo.java @@ -0,0 +1,99 @@ +package io.anuke.mindustry.game; + +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.ObjectMap; +import com.badlogic.gdx.utils.ObjectSet; +import io.anuke.mindustry.world.Tile; + +/**Wrapper around an ObjectMap for team data.*/ +public class TeamInfo { + private final static ObjectSet empty = new ObjectSet<>(); + private final static ObjectSet emptyData = new ObjectSet<>(); + + private ObjectMap map = new ObjectMap<>(); + private ObjectSet allies = new ObjectSet<>(), + enemies = new ObjectSet<>(); + private ObjectSet allyData = new ObjectSet<>(), + enemyData = new ObjectSet<>(); + + public ObjectSet getTeams(boolean ally) { + return ally ? allyData : enemyData; + } + + /**Register a team. + * @param team The team type enum. + * @param ally Whether this team is an ally with the player or an enemy with the player. + * In PvP situations with dedicated servers, the sides can be arbitrary. + */ + public void add(Team team, boolean ally){ + if(has(team)) throw new RuntimeException("Can't define team information twice!"); + + TeamData data = new TeamData(team, ally); + + if(ally) { + allies.add(team); + allyData.add(data); + }else { + enemies.add(team); + enemyData.add(data); + } + + map.put(team, data); + } + + /**Returns team data by type. Call {@link #has(Team)} first to make sure it's active!*/ + public TeamData get(Team team){ + if(!has(team)) throw new RuntimeException("This team is not active! Check has() before calling get()."); + return map.get(team); + } + + /**Returns whether the specified team is active, e.g. whether it is participating in the game.*/ + public boolean has(Team team){ + return map.containsKey(team); + } + + /**Returns a set of all teams that are enemies of this team. + * For teams not active, an empty set is returned. + */ + public ObjectSet enemiesOf(Team team) { + boolean ally = allies.contains(team); + boolean enemy = enemies.contains(team); + + //this team isn't even in the game, so target nothing! + if(!ally && !enemy) return empty; + + return ally ? enemies : allies; + } + + /**Returns a set of all teams that are enemies of this team. + * For teams not active, an empty set is returned. + */ + public ObjectSet enemyDataOf(Team team) { + boolean ally = allies.contains(team); + boolean enemy = enemies.contains(team); + + //this team isn't even in the game, so target nothing! + if(!ally && !enemy) return emptyData; + + return ally ? enemyData : allyData; + } + + /**Returns whether or not these two teams are enemies.*/ + public boolean areEnemies(Team team, Team other){ + if(team == other) return false; //fast fail to be more efficient + boolean ally = allies.contains(team); + boolean ally2 = enemies.contains(other); + return ally == ally2; + } + + public class TeamData { + public final Array cores = new Array<>(); + public final Team team; + public final boolean ally; + + public TeamData(Team team, boolean ally) { + this.team = team; + this.ally = ally; + } + } +} diff --git a/core/src/io/anuke/mindustry/game/Tutorial.java b/core/src/io/anuke/mindustry/game/Tutorial.java index b615032b8c..b9835cf393 100644 --- a/core/src/io/anuke/mindustry/game/Tutorial.java +++ b/core/src/io/anuke/mindustry/game/Tutorial.java @@ -1,10 +1,13 @@ package io.anuke.mindustry.game; import com.badlogic.gdx.math.GridPoint2; +import io.anuke.mindustry.content.Items; +import io.anuke.mindustry.content.blocks.Blocks; +import io.anuke.mindustry.content.blocks.DistributionBlocks; +import io.anuke.mindustry.content.blocks.ProductionBlocks; +import io.anuke.mindustry.content.blocks.WeaponBlocks; import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.blocks.*; import io.anuke.ucore.core.Timers; import io.anuke.ucore.scene.builders.button; import io.anuke.ucore.scene.builders.label; @@ -404,15 +407,15 @@ public class Tutorial{ canForward = false; showBlock = true; canPlace = true; - targetBlock = ProductionBlocks.pump; + //targetBlock = ProductionBlocks.pump; blockPlaceX = 6; blockPlaceY = -2; } void onSwitch(){ ui.find("sectionbuttonproduction").fireClick(); - state.inventory.addItem(Item.steel, 60); - state.inventory.addItem(Item.iron, 60); + state.inventory.addItem(Items.steel, 60); + state.inventory.addItem(Items.iron, 60); } }, conduitUse{ @@ -421,7 +424,7 @@ public class Tutorial{ canForward = false; showBlock = true; canPlace = true; - targetBlock = DistributionBlocks.conduit; + //targetBlock = DistributionBlocks.conduit; blockPlaceX = 5; blockPlaceY = -2; blockRotation = 2; @@ -438,8 +441,8 @@ public class Tutorial{ canForward = false; showBlock = true; canPlace = true; - targetBlock = DistributionBlocks.conduit; - blockPlaceX = 4; + //targetBlock = DistributionBlocks.conduit; + //blockPlaceX = 4; blockPlaceY = -2; blockRotation = 1; } @@ -454,7 +457,7 @@ public class Tutorial{ canForward = false; showBlock = true; canPlace = true; - targetBlock = DistributionBlocks.conduit; + //targetBlock = DistributionBlocks.conduit; blockPlaceX = 4; blockPlaceY = -1; blockRotation = 1; @@ -470,7 +473,7 @@ public class Tutorial{ canForward = false; showBlock = true; canPlace = true; - targetBlock = ProductionBlocks.combustiongenerator; + //targetBlock = ProductionBlocks.combustiongenerator; blockPlaceX = 4; blockPlaceY = 0; } @@ -478,8 +481,8 @@ public class Tutorial{ void onSwitch(){ //world.tile(blockPlaceX + world.getCore().x, blockPlaceY + world.getCore().y).setBlock(Blocks.air); ui.find("sectionbuttonpower").fireClick(); - state.inventory.addItem(Item.steel, 60); - state.inventory.addItem(Item.iron, 60); + state.inventory.addItem(Items.steel, 60); + state.inventory.addItem(Items.iron, 60); } }, generatorExplain{ @@ -522,7 +525,7 @@ public class Tutorial{ canBack = false; blockPlaceX = 1; blockPlaceY = 4; - targetBlock = DefenseBlocks.repairturret; + //targetBlock = DefenseBlocks.repairturret; } void onSwitch(){ @@ -547,8 +550,8 @@ public class Tutorial{ } void onSwitch(){ - state.inventory.addItem(Item.stone, 40); - state.inventory.addItem(Item.iron, 40); + state.inventory.addItem(Items.stone, 40); + state.inventory.addItem(Items.iron, 40); ui.find("sectionbuttoncrafting").fireClick(); } diff --git a/core/src/io/anuke/mindustry/game/UpgradeInventory.java b/core/src/io/anuke/mindustry/game/UpgradeInventory.java index 24fadf2d12..62ca604c6e 100644 --- a/core/src/io/anuke/mindustry/game/UpgradeInventory.java +++ b/core/src/io/anuke/mindustry/game/UpgradeInventory.java @@ -1,6 +1,7 @@ package io.anuke.mindustry.game; import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.content.Weapons; import io.anuke.mindustry.resource.Weapon; public class UpgradeInventory { @@ -20,6 +21,6 @@ public class UpgradeInventory { public void reset(){ weapons.clear(); - weapons.add(Weapon.blaster); + weapons.add(Weapons.blaster); } } diff --git a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java index 2a1d3cbb80..26c4497483 100644 --- a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java @@ -9,7 +9,7 @@ import io.anuke.mindustry.game.Team; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Layer; import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.world.blocks.types.StaticBlock; import io.anuke.ucore.core.Core; import io.anuke.ucore.core.Graphics; diff --git a/core/src/io/anuke/mindustry/input/InputHandler.java b/core/src/io/anuke/mindustry/input/InputHandler.java index c1bd04785d..d0f913f6d9 100644 --- a/core/src/io/anuke/mindustry/input/InputHandler.java +++ b/core/src/io/anuke/mindustry/input/InputHandler.java @@ -10,7 +10,7 @@ import io.anuke.mindustry.resource.Recipe; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Placement; import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.ucore.core.Graphics; import io.anuke.ucore.util.Mathf; diff --git a/core/src/io/anuke/mindustry/io/BlockLoader.java b/core/src/io/anuke/mindustry/io/BlockLoader.java deleted file mode 100644 index 17e524145a..0000000000 --- a/core/src/io/anuke/mindustry/io/BlockLoader.java +++ /dev/null @@ -1,144 +0,0 @@ -package io.anuke.mindustry.io; - -import com.badlogic.gdx.utils.IntMap; -import com.badlogic.gdx.utils.ObjectIntMap; -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.blocks.*; -import io.anuke.ucore.util.Log; - -public class BlockLoader { - static final ObjectIntMap defaultMap = map( - "air", 0, - "blockpart", 1, - "deepwater", 2, - "water", 3, - "lava", 4, - "oil", 5, - "stone", 6, - "blackstone", 7, - "iron", 8, - "coal", 9, - "titanium", 10, - "thorium", 11, - "dirt", 12, - "sand", 13, - "ice", 14, - "snow", 15, - "grass", 16, - "sandblock", 17, - "snowblock", 18, - "stoneblock", 19, - "blackstoneblock", 20, - "grassblock", 21, - "mossblock", 22, - "shrub", 23, - "rock", 24, - "icerock", 25, - "blackrock", 26, - "dirtblock", 27, - "stonewall", 28, - "ironwall", 29, - "steelwall", 30, - "titaniumwall", 31, - "duriumwall", 32, - "compositewall", 33, - "steelwall-large", 34, - "titaniumwall-large", 35, - "duriumwall-large", 36, - "titaniumshieldwall", 37, - "repairturret", 38, - "megarepairturret", 39, - "shieldgenerator", 40, - "door", 41, - "door-large", 42, - "conduit", 43, - "pulseconduit", 44, - "liquidrouter", 45, - "conveyor", 46, - "steelconveyor", 47, - "poweredconveyor", 48, - "router", 49, - "junction", 50, - "conveyortunnel", 51, - "liquidjunction", 52, - "liquiditemjunction", 53, - "powerbooster", 54, - "powerlaser", 55, - "powerlaserrouter", 56, - "powerlasercorner", 57, - "teleporter", 58, - "sorter", 59, - "core", 60, - "pump", 61, - "fluxpump", 62, - "smelter", 63, - "crucible", 64, - "coalpurifier", 65, - "titaniumpurifier", 66, - "oilrefinery", 67, - "stoneformer", 68, - "lavasmelter", 69, - "stonedrill", 70, - "irondrill", 71, - "coaldrill", 72, - "thoriumdrill", 73, - "titaniumdrill", 74, - "omnidrill", 75, - "coalgenerator", 76, - "thermalgenerator", 77, - "combustiongenerator", 78, - "rtgenerator", 79, - "nuclearreactor", 80, - "turret", 81, - "doubleturret", 82, - "machineturret", 83, - "shotgunturret", 84, - "flameturret", 85, - "sniperturret", 86, - "mortarturret", 87, - "laserturret", 88, - "waveturret", 89, - "plasmaturret", 90, - "chainturret", 91, - "titancannon", 92, - "playerspawn", 93, - "enemyspawn", 94 - ); - static final IntMap blockmap = new IntMap<>(); - - public static void load(){ - - Block[] blockClasses = { - Blocks.air, - DefenseBlocks.compositewall, - DistributionBlocks.conduit, - ProductionBlocks.coaldrill, - WeaponBlocks.chainturret, - DebugBlocks.powerVoid - //add any new block sections here - }; - - for(String string : defaultMap.keys()){ - Block block = Block.getByName(string); - blockmap.put(defaultMap.get(string, -1), block); - } - - for(Block block : Block.getAllBlocks()){ - block.init(); - } - - Log.info("Total blocks loaded: {0}", Block.getAllBlocks().size); - } - - public static Block getByOldID(int id){ - return blockmap.get(id); - } - - private static ObjectIntMap map(Object... objects){ - ObjectIntMap map = new ObjectIntMap<>(); - for(int i = 0; i < objects.length/2; i ++){ - map.put((String)objects[i*2], (int)objects[i*2+1]); - } - return map; - } -} diff --git a/core/src/io/anuke/mindustry/io/MapIO.java b/core/src/io/anuke/mindustry/io/MapIO.java index 01901baff0..b73ab8eae5 100644 --- a/core/src/io/anuke/mindustry/io/MapIO.java +++ b/core/src/io/anuke/mindustry/io/MapIO.java @@ -10,7 +10,7 @@ import io.anuke.mindustry.io.MapTileData.TileDataMarker; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.ColorMapper; import io.anuke.mindustry.world.ColorMapper.BlockPair; -import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.content.blocks.Blocks; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -22,6 +22,7 @@ import static io.anuke.mindustry.Vars.mapExtension; /**Reads and writes map files.*/ //TODO GWT support +//TODO map header that maps block names to IDs for backwards compatibility public class MapIO { private static final int version = 0; diff --git a/core/src/io/anuke/mindustry/io/versions/Save16.java b/core/src/io/anuke/mindustry/io/versions/Save16.java index cdf356d9e7..b9d0b9e115 100644 --- a/core/src/io/anuke/mindustry/io/versions/Save16.java +++ b/core/src/io/anuke/mindustry/io/versions/Save16.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.io.versions; import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.TimeUtils; +import io.anuke.mindustry.content.Weapons; import io.anuke.mindustry.entities.units.BaseUnit; import io.anuke.mindustry.entities.units.UnitType; import io.anuke.mindustry.game.Difficulty; @@ -10,10 +11,9 @@ import io.anuke.mindustry.game.Team; 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.Tile; -import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.world.blocks.types.BlockPart; import io.anuke.ucore.core.Core; import io.anuke.ucore.entities.EntityGroup; @@ -75,8 +75,8 @@ public class Save16 extends SaveFileVersion { //weapons control.upgrades().getWeapons().clear(); - control.upgrades().getWeapons().add(Weapon.blaster); - player.weaponLeft = player.weaponRight = Weapon.blaster; + control.upgrades().getWeapons().add(Weapons.blaster); + player.weaponLeft = player.weaponRight = Weapons.blaster; int weapons = stream.readByte(); diff --git a/core/src/io/anuke/mindustry/net/NetworkIO.java b/core/src/io/anuke/mindustry/net/NetworkIO.java index bd27df11eb..757265cb16 100644 --- a/core/src/io/anuke/mindustry/net/NetworkIO.java +++ b/core/src/io/anuke/mindustry/net/NetworkIO.java @@ -2,14 +2,14 @@ package io.anuke.mindustry.net; import com.badlogic.gdx.utils.ByteArray; import com.badlogic.gdx.utils.TimeUtils; +import io.anuke.mindustry.content.Weapons; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.game.GameMode; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.io.Version; import io.anuke.mindustry.resource.Upgrade; -import io.anuke.mindustry.resource.Weapon; import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.world.blocks.types.BlockPart; import io.anuke.ucore.core.Timers; import io.anuke.ucore.entities.Entities; @@ -128,7 +128,7 @@ public class NetworkIO { ui.hudfrag.updateItems(); control.upgrades().getWeapons().clear(); - control.upgrades().getWeapons().add(Weapon.blaster); + control.upgrades().getWeapons().add(Weapons.blaster); byte weapons = stream.readByte(); diff --git a/core/src/io/anuke/mindustry/net/TraceInfo.java b/core/src/io/anuke/mindustry/net/TraceInfo.java index 940f98726f..e0dab07ada 100644 --- a/core/src/io/anuke/mindustry/net/TraceInfo.java +++ b/core/src/io/anuke/mindustry/net/TraceInfo.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.net; import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.content.blocks.Blocks; public class TraceInfo { public int playerid; diff --git a/core/src/io/anuke/mindustry/resource/Item.java b/core/src/io/anuke/mindustry/resource/Item.java index 488ae62aa2..4423b823ab 100644 --- a/core/src/io/anuke/mindustry/resource/Item.java +++ b/core/src/io/anuke/mindustry/resource/Item.java @@ -8,39 +8,6 @@ import io.anuke.ucore.util.Bundles; public class Item implements Comparable{ private static final Array items = new Array<>(); - public static final Item - stone = new Item("stone"){ - { - material = false; - } - }, - iron = new Item("iron"), - lead = new Item("lead"), - coal = new Item("coal"){ - { - explosiveness = 0.2f; - flammability = 0.5f; - fluxiness = 0.5f; - material = false; - } - }, - steel = new Item("steel"), - titanium = new Item("titanium"), - thorium = new Item("thorium"){ - { - explosiveness = 0.1f; - } - }, - silicon = new Item("silicon"), - plastic = new Item("plastic"), - densealloy = new Item("densealloy"), - biomatter = new Item("biomatter"){ - { - material = false; - flammability = 0.4f; - } - }; - public final int id; public final String name; public TextureRegion region; diff --git a/core/src/io/anuke/mindustry/resource/Liquid.java b/core/src/io/anuke/mindustry/resource/Liquid.java index 72501cc12b..0857649d9c 100644 --- a/core/src/io/anuke/mindustry/resource/Liquid.java +++ b/core/src/io/anuke/mindustry/resource/Liquid.java @@ -8,48 +8,6 @@ public class Liquid { private static final Array liquids = new Array<>(); - public static final Liquid - - none = new Liquid("none", Color.CLEAR), - water = new Liquid("water", Color.ROYAL){ - { - heatCapacity = 0.4f; - } - }, - plasma = new Liquid("plasma", Color.CORAL){ - { - flammability = 0.4f; - viscosity = 0.1f; - heatCapacity = 0.2f; - } - }, - lava = new Liquid("lava", Color.valueOf("e37341")){ - { - temperature = 0.7f; - viscosity = 0.8f; - } - }, - oil = new Liquid("oil", Color.valueOf("292929")){ - { - viscosity = 0.7f; - flammability = 0.6f; - explosiveness = 0.6f; - } - }, - cryofluid = new Liquid("cryofluid", Color.SKY){ - { - heatCapacity = 0.75f; - temperature = 0.5f; - } - }, - sulfuricAcid = new Liquid("sulfuricAcid", Color.YELLOW){ - { - flammability = 0.4f; - explosiveness = 0.4f; - heatCapacity = 0.4f; - } - }; - public final Color color; public final String name; public final int id; diff --git a/core/src/io/anuke/mindustry/resource/Mech.java b/core/src/io/anuke/mindustry/resource/Mech.java index 65f226038c..5ccd99a59d 100644 --- a/core/src/io/anuke/mindustry/resource/Mech.java +++ b/core/src/io/anuke/mindustry/resource/Mech.java @@ -1,11 +1,6 @@ package io.anuke.mindustry.resource; public class Mech extends Upgrade{ - public static final Mech - - standard = new Mech("standard-mech", false), - standardShip = new Mech("standard-ship", true); - public boolean flying; public float mass = 1f; diff --git a/core/src/io/anuke/mindustry/resource/Recipes.java b/core/src/io/anuke/mindustry/resource/Recipes.java deleted file mode 100644 index a89eae100b..0000000000 --- a/core/src/io/anuke/mindustry/resource/Recipes.java +++ /dev/null @@ -1,134 +0,0 @@ -package io.anuke.mindustry.resource; - -import com.badlogic.gdx.utils.Array; -import io.anuke.mindustry.Vars; -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.blocks.*; - -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(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.densealloy, 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.diriumwall, stack(Item.densealloy, 12*4)), - new Recipe(defense, DefenseBlocks.door, stack(Item.steel, 3), stack(Item.iron, 3*4)).setDesktop(), - new Recipe(defense, DefenseBlocks.largedoor, stack(Item.steel, 3*4), stack(Item.iron, 3*4*4)).setDesktop(), - new Recipe(defense, DefenseBlocks.titaniumshieldwall, stack(Item.titanium, 16)), - - new Recipe(distribution, DistributionBlocks.conveyor, stack(Item.iron, 1)), - new Recipe(distribution, DistributionBlocks.steelconveyor, stack(Item.steel, 1)), - new Recipe(distribution, DistributionBlocks.pulseconveyor, stack(Item.densealloy, 1)), - new Recipe(distribution, DistributionBlocks.router, stack(Item.iron, 2)), - new Recipe(distribution, DistributionBlocks.multiplexer, stack(Item.iron, 8)), - new Recipe(distribution, DistributionBlocks.junction, stack(Item.iron, 2)), - new Recipe(distribution, DistributionBlocks.tunnel, stack(Item.iron, 2)), - new Recipe(distribution, DistributionBlocks.sorter, stack(Item.steel, 2)), - new Recipe(distribution, DistributionBlocks.splitter, stack(Item.steel, 1)), - new Recipe(distribution, DistributionBlocks.vault, stack(Item.steel, 50)), - new Recipe(distribution, ProductionBlocks.core, stack(Item.steel, 50)), - new Recipe(distribution, DistributionBlocks.unloader, stack(Item.steel, 5)), - new Recipe(distribution, DistributionBlocks.sortedunloader, stack(Item.steel, 5)), - - new Recipe(weapon, WeaponBlocks.doubleturret, stack(Item.iron, 7)), - new Recipe(weapon, WeaponBlocks.gatlingturret, stack(Item.iron, 8)), - new Recipe(weapon, WeaponBlocks.flameturret, stack(Item.iron, 12), stack(Item.steel, 9)), - new Recipe(weapon, WeaponBlocks.railgunturret, 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.flakturret, stack(Item.steel, 25), stack(Item.titanium, 15)), - new Recipe(weapon, WeaponBlocks.teslaturret, stack(Item.steel, 20), stack(Item.titanium, 25), stack(Item.densealloy, 15)), - new Recipe(weapon, WeaponBlocks.magmaturret, stack(Item.steel, 80), stack(Item.titanium, 70), stack(Item.densealloy, 60)), - new Recipe(weapon, WeaponBlocks.chainturret, stack(Item.steel, 50), stack(Item.titanium, 25), stack(Item.densealloy, 40)), - new Recipe(weapon, WeaponBlocks.titanturret, stack(Item.steel, 70), stack(Item.titanium, 50), stack(Item.densealloy, 55)), - new Recipe(weapon, WeaponBlocks.missileturret, stack(Item.steel, 70), stack(Item.titanium, 50), stack(Item.densealloy, 55)), - new Recipe(weapon, WeaponBlocks.fornaxcannon, stack(Item.steel, 70), stack(Item.titanium, 50), stack(Item.densealloy, 55)), - - new Recipe(crafting, ProductionBlocks.smelter, stack(Item.iron, 40)), - new Recipe(crafting, ProductionBlocks.alloysmelter, stack(Item.titanium, 50), stack(Item.steel, 50)), - new Recipe(crafting, ProductionBlocks.coalextractor, stack(Item.steel, 10), stack(Item.iron, 10)), - new Recipe(crafting, ProductionBlocks.titaniumextractor, 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.siliconextractor, stack(Item.steel, 30), stack(Item.titanium, 15)), - new Recipe(crafting, ProductionBlocks.cryofluidmixer, stack(Item.steel, 30), stack(Item.titanium, 15)), - new Recipe(crafting, ProductionBlocks.weaponFactory, stack(Item.steel, 60), stack(Item.iron, 60)).setDesktop(), - //new Recipe(crafting, ProductionBlocks.centrifuge, stack(Item.steel, 30), stack(Item.iron, 30)), - - //new Recipe(production, ProductionBlocks.stonedrill, stack(Item.stone, 12)), - new Recipe(production, ProductionBlocks.irondrill, stack(Item.iron, 25)), - new Recipe(production, ProductionBlocks.leaddrill, stack(Item.iron, 25)), - new Recipe(production, ProductionBlocks.coaldrill, stack(Item.iron, 25), stack(Item.iron, 40)), - new Recipe(production, ProductionBlocks.titaniumdrill, stack(Item.iron, 50), stack(Item.steel, 50)), - new Recipe(production, ProductionBlocks.thoriumdrill, stack(Item.iron, 40), stack(Item.steel, 40)), - new Recipe(production, ProductionBlocks.quartzextractor, stack(Item.titanium, 40), stack(Item.densealloy, 40)), - new Recipe(production, ProductionBlocks.cultivator, stack(Item.titanium, 40), stack(Item.densealloy, 40)), - new Recipe(production, ProductionBlocks.laserdrill, stack(Item.titanium, 40), stack(Item.densealloy, 40)), - new Recipe(production, ProductionBlocks.waterextractor, stack(Item.titanium, 40), stack(Item.densealloy, 40)), - new Recipe(production, ProductionBlocks.oilextractor, stack(Item.titanium, 40), stack(Item.densealloy, 40)), - - new Recipe(power, ProductionBlocks.coalgenerator, stack(Item.iron, 30)), - new Recipe(power, ProductionBlocks.thermalgenerator, stack(Item.steel, 30)), - new Recipe(power, ProductionBlocks.combustiongenerator, stack(Item.iron, 30)), - new Recipe(power, ProductionBlocks.solarpanel, stack(Item.iron, 30), stack(Item.silicon, 20)), - new Recipe(power, ProductionBlocks.largesolarpanel, stack(Item.iron, 30), stack(Item.silicon, 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.densealloy, 40), stack(Item.steel, 50)), - new Recipe(power, DistributionBlocks.powernode, stack(Item.steel, 3), stack(Item.iron, 3)), - new Recipe(power, DistributionBlocks.battery, stack(Item.steel, 5), stack(Item.iron, 5)), - new Recipe(power, DistributionBlocks.batteryLarge, stack(Item.steel, 5), stack(Item.iron, 5)), - - new Recipe(power, DefenseBlocks.shieldgenerator, stack(Item.titanium, 30), stack(Item.densealloy, 30)), - - new Recipe(distribution, DistributionBlocks.teleporter, stack(Item.steel, 30), stack(Item.densealloy, 40)), - - new Recipe(power, DefenseBlocks.repairturret, stack(Item.iron, 30)), - new Recipe(power, DefenseBlocks.megarepairturret, stack(Item.iron, 20), stack(Item.steel, 30)), - - new Recipe(liquid, DistributionBlocks.conduit, stack(Item.steel, 1)), - new Recipe(liquid, DistributionBlocks.pulseconduit, stack(Item.titanium, 1), stack(Item.steel, 1)), - new Recipe(liquid, DistributionBlocks.liquidrouter, stack(Item.steel, 2)), - new Recipe(liquid, DistributionBlocks.liquidtank, stack(Item.steel, 2)), - new Recipe(liquid, DistributionBlocks.liquidjunction, stack(Item.steel, 2)), - new Recipe(liquid, DistributionBlocks.conduittunnel, stack(Item.titanium, 2), stack(Item.steel, 2)), - - new Recipe(liquid, ProductionBlocks.pump, stack(Item.steel, 10)), - new Recipe(liquid, ProductionBlocks.fluxpump, stack(Item.steel, 10), stack(Item.densealloy, 5)), - - new Recipe(units, DebugBlocks.powerVoid, stack(Item.steel, 10)).setDebug(), - new Recipe(units, DebugBlocks.powerInfinite, stack(Item.steel, 10), stack(Item.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.android && recipe.desktopOnly) && !(!debug && recipe.debugOnly)) { - r.add(recipe); - } - } - - return r; - } -} diff --git a/core/src/io/anuke/mindustry/resource/Weapon.java b/core/src/io/anuke/mindustry/resource/Weapon.java index 23a9c120f3..d71c05bda0 100644 --- a/core/src/io/anuke/mindustry/resource/Weapon.java +++ b/core/src/io/anuke/mindustry/resource/Weapon.java @@ -5,7 +5,6 @@ import io.anuke.mindustry.entities.Bullet; import io.anuke.mindustry.entities.BulletType; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.Unit; -import io.anuke.mindustry.graphics.Fx; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.NetEvents; import io.anuke.ucore.core.Effects; @@ -15,82 +14,30 @@ import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Translator; public class Weapon extends Upgrade{ - public static final Weapon - - blaster = new Weapon("blaster", 12, BulletType.shot){ - { - effect = Fx.laserShoot; - length = 2f; - } - }, - triblaster = new Weapon("triblaster", 16, BulletType.spread){ - { - shots = 3; - effect = Fx.spreadShoot; - roundrobin = true; - } - }, - clustergun = new Weapon("clustergun", 26f, BulletType.cluster){ - { - effect = Fx.clusterShoot; - inaccuracy = 17f; - roundrobin = true; - shots = 2; - spacing = 0; - } - }, - beam = new Weapon("beam", 30f, BulletType.beamlaser){ - { - effect = Fx.beamShoot; - inaccuracy = 0; - roundrobin = true; - shake = 2f; - } - }, - vulcan = new Weapon("vulcan", 5, BulletType.vulcan){ - { - effect = Fx.vulcanShoot; - inaccuracy = 5; - roundrobin = true; - shake = 1f; - inaccuracy = 4f; - } - }, - shockgun = new Weapon("shockgun", 36, BulletType.shockshell){ - { - shootsound = "bigshot"; - effect = Fx.shockShoot; - shake = 2f; - roundrobin = true; - shots = 7; - inaccuracy = 15f; - length = 3.5f; - } - }; /**weapon reload in frames*/ - float reload; + protected float reload; /**type of bullet shot*/ - BulletType type; + protected BulletType type; /**sound made when shooting*/ - String shootsound = "shoot"; + protected String shootsound = "shoot"; /**amount of shots per fire*/ - int shots = 1; + protected int shots = 1; /**spacing in degrees between multiple shots, if applicable*/ - float spacing = 12f; + protected float spacing = 12f; /**inaccuracy of degrees of each shot*/ - float inaccuracy = 0f; + protected float inaccuracy = 0f; /**intensity and duration of each shot's screen shake*/ - float shake = 0f; + protected float shake = 0f; /**effect displayed when shooting*/ - Effect effect; + protected Effect effect; /**shoot barrel length*/ - float length = 3f; + protected float length = 3f; /**whether to shoot the weapons in different arms one after another, rather an all at once*/ - boolean roundrobin = false; + protected boolean roundrobin = false; /**translator for vector calulations*/ - Translator tr = new Translator(); - - private Weapon(String name, float reload, BulletType type){ + protected Translator tr = new Translator(); + + protected Weapon(String name, float reload, BulletType type){ super(name); this.reload = reload; this.type = type; diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java index d9e76f04a3..4cd8ee0cf4 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java @@ -5,7 +5,7 @@ import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Align; import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.ucore.core.Core; import io.anuke.ucore.core.Graphics; import io.anuke.ucore.scene.Element; diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java index 71b396f051..9f7f316764 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java @@ -5,6 +5,7 @@ import com.badlogic.gdx.graphics.Colors; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.content.Recipes; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.input.InputHandler; import io.anuke.mindustry.resource.*; @@ -81,7 +82,7 @@ public class BlocksFragment implements Fragment{ for (Section sec : Section.values()) { recipes.clear(); - Recipes.getBy(sec, recipes); + io.anuke.mindustry.content.Recipes.getBy(sec, recipes); maxcol = Math.max((int) ((float) recipes.size / rows + 1), maxcol); } diff --git a/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java b/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java index 6b3461bd46..a314a841e4 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java @@ -4,7 +4,7 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.units.BaseUnit; -import io.anuke.mindustry.entities.units.UnitTypes; +import io.anuke.mindustry.content.UnitTypes; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.net.Net; import io.anuke.ucore.core.Timers; diff --git a/core/src/io/anuke/mindustry/world/blocks/BaseBlock.java b/core/src/io/anuke/mindustry/world/BaseBlock.java similarity index 98% rename from core/src/io/anuke/mindustry/world/blocks/BaseBlock.java rename to core/src/io/anuke/mindustry/world/BaseBlock.java index 46f7151a73..6e3de43087 100644 --- a/core/src/io/anuke/mindustry/world/blocks/BaseBlock.java +++ b/core/src/io/anuke/mindustry/world/BaseBlock.java @@ -1,10 +1,8 @@ -package io.anuke.mindustry.world.blocks; +package io.anuke.mindustry.world; import com.badlogic.gdx.math.GridPoint2; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.Liquid; -import io.anuke.mindustry.world.Edges; -import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Timers; public abstract class BaseBlock { diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index 0a6e14b397..a4c8bd2fd1 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -13,7 +13,6 @@ import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.NetEvents; import io.anuke.mindustry.resource.ItemStack; import io.anuke.mindustry.resource.Liquid; -import io.anuke.mindustry.world.blocks.BaseBlock; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.graphics.Draw; @@ -47,6 +46,8 @@ public class Block extends BaseBlock { public boolean update; /**whether this block has health and can be destroyed*/ public boolean destructible; + /**if true, this block cannot be broken by normal means.*/ + public boolean unbreakable; /**whether this is solid*/ public boolean solid; /**whether this block CAN be solid.*/ diff --git a/core/src/io/anuke/mindustry/world/ColorMapper.java b/core/src/io/anuke/mindustry/world/ColorMapper.java index 58fa795668..01b1195679 100644 --- a/core/src/io/anuke/mindustry/world/ColorMapper.java +++ b/core/src/io/anuke/mindustry/world/ColorMapper.java @@ -6,7 +6,7 @@ import com.badlogic.gdx.utils.IntIntMap; import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.IntMap.Entry; import com.badlogic.gdx.utils.ObjectIntMap; -import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.content.blocks.Blocks; public class ColorMapper{ /**maps color IDs to their actual RGBA8888 colors*/ diff --git a/core/src/io/anuke/mindustry/world/Placement.java b/core/src/io/anuke/mindustry/world/Placement.java index 5aae07397e..234f8c8f82 100644 --- a/core/src/io/anuke/mindustry/world/Placement.java +++ b/core/src/io/anuke/mindustry/world/Placement.java @@ -3,15 +3,14 @@ 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.entities.Player; import io.anuke.mindustry.entities.Units; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.graphics.Fx; import io.anuke.mindustry.resource.ItemStack; import io.anuke.mindustry.resource.Recipe; -import io.anuke.mindustry.resource.Recipes; -import io.anuke.mindustry.world.blocks.Blocks; -import io.anuke.mindustry.world.blocks.ProductionBlocks; import io.anuke.ucore.core.Effects; import io.anuke.ucore.entities.Entities; @@ -157,9 +156,9 @@ public class Placement { public static boolean validBreak(Team team, int x, int y){ Tile tile = world.tile(x, y); - if(tile == null || tile.block() == ProductionBlocks.core) return false; + if(tile == null || tile.block().unbreakable) return false; - if(tile.isLinked() && tile.getLinked().block() == ProductionBlocks.core){ + if(tile.isLinked() && tile.getLinked().block().unbreakable){ return false; } diff --git a/core/src/io/anuke/mindustry/world/Tile.java b/core/src/io/anuke/mindustry/world/Tile.java index a0c68f0b11..470a6179d4 100644 --- a/core/src/io/anuke/mindustry/world/Tile.java +++ b/core/src/io/anuke/mindustry/world/Tile.java @@ -5,7 +5,7 @@ import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.reflect.ClassReflection; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.world.blocks.types.modules.InventoryModule; import io.anuke.mindustry.world.blocks.types.modules.LiquidModule; import io.anuke.mindustry.world.blocks.types.modules.PowerModule; @@ -50,8 +50,8 @@ public class Tile{ this.floor = floor; this.wall = wall; this.rotation = rotation; - this.team = team; changed(); + this.team = team; } public int packedPosition(){ @@ -115,7 +115,6 @@ public class Tile{ return Block.getByID(getWallID()); } - //TODO save team public Team getTeam(){ return Team.values()[team]; } diff --git a/core/src/io/anuke/mindustry/world/WorldGenerator.java b/core/src/io/anuke/mindustry/world/WorldGenerator.java index d4ed1516b1..980648b6b7 100644 --- a/core/src/io/anuke/mindustry/world/WorldGenerator.java +++ b/core/src/io/anuke/mindustry/world/WorldGenerator.java @@ -1,15 +1,16 @@ package io.anuke.mindustry.world; -import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.IntArray; import com.badlogic.gdx.utils.ObjectMap; +import io.anuke.mindustry.content.blocks.Blocks; +import io.anuke.mindustry.content.blocks.StorageBlocks; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.io.MapTileData; import io.anuke.mindustry.io.MapTileData.TileDataMarker; -import io.anuke.mindustry.world.blocks.Blocks; -import io.anuke.mindustry.world.blocks.ProductionBlocks; 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.world; @@ -22,7 +23,7 @@ public class WorldGenerator { }}; /**Should fill spawns with the correct spawnpoints.*/ - public static void generate(Tile[][] tiles, MapTileData data, Array cores){ + public static void generate(Tile[][] tiles, MapTileData data){ Noise.setSeed(world.getSeed()); IntArray multiblocks = new IntArray(); @@ -32,12 +33,15 @@ public class WorldGenerator { TileDataMarker tile = data.read(); tiles[x][y] = new Tile(x, y, tile.floor, tile.wall, tile.rotation, tile.team); + Team team = Team.values()[tile.team]; + if(tiles[x][y].block().isMultiblock()){ multiblocks.add(tiles[x][y].packedPosition()); } - if(tiles[x][y].block() == ProductionBlocks.core){ - cores.add(tiles[x][y]); + if(tiles[x][y].block() == StorageBlocks.core && + state.teams.has(team)){ + state.teams.get(team).cores.add(tiles[x][y]); } //TODO ores, plants, extra decoration? diff --git a/core/src/io/anuke/mindustry/world/blocks/Blocks.java b/core/src/io/anuke/mindustry/world/blocks/Blocks.java deleted file mode 100644 index bf29b35ece..0000000000 --- a/core/src/io/anuke/mindustry/world/blocks/Blocks.java +++ /dev/null @@ -1,160 +0,0 @@ -package io.anuke.mindustry.world.blocks; - -import io.anuke.mindustry.graphics.DrawLayer; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.ItemStack; -import io.anuke.mindustry.resource.Liquid; -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.types.*; - -public class Blocks{ - public static final Block - - air = new Block("air"){ - //no drawing here - public void drawCache(Tile tile){} - - //update floor blocks for effects, if needed - public void draw(Tile tile){} - }, - - //player/enemy spawnpoint - spawn = new Block("spawn"){}, - - blockpart = new BlockPart(){ - - }, - - deepwater = new Floor("deepwater"){{ - variants = 0; - solid = true; - liquidDrop = Liquid.water; - liquid = true; - drawLayer = DrawLayer.water; - }}, - - water = new Floor("water"){{ - variants = 0; - solid = true; - liquidDrop = Liquid.water; - liquid = true; - drawLayer = DrawLayer.water; - }}, - - lava = new Floor("lava"){ - { - variants = 0; - solid = true; - liquidDrop = Liquid.lava; - liquid = true; - drawLayer = DrawLayer.lava; - } - }, - - oil = new Floor("oil"){ - { - variants = 0; - solid = true; - liquidDrop = Liquid.oil; - liquid = true; - drawLayer = DrawLayer.oil; - } - }, - - stone = new Floor("stone"){{ - drops = new ItemStack(Item.stone, 1); - blends = block -> block != this && !(block instanceof Ore); - }}, - - blackstone = new Floor("blackstone"){{ - drops = new ItemStack(Item.stone, 1); - }}, - - iron = new Ore("iron"){{ - drops = new ItemStack(Item.iron, 1); - }}, - - lead = new Ore("lead"){{ - drops = new ItemStack(Item.lead, 1); - }}, - - coal = new Ore("coal"){{ - drops = new ItemStack(Item.coal, 1); - }}, - - titanium = new Ore("titanium"){{ - drops = new ItemStack(Item.titanium, 1); - }}, - - thorium = new Ore("thorium"){{ - drops = new ItemStack(Item.thorium, 1); - }}, - - dirt = new Floor("dirt"){}, - - sand = new Floor("sand"){{ - drops = new ItemStack(Item.silicon, 1); - }}, - - ice = new Floor("ice"){}, - - snow = new Floor("snow"){}, - - grass = new Floor("grass"){}, - - sandblock = new StaticBlock("sandblock"){{ - solid = true; - variants = 3; - }}, - - snowblock = new StaticBlock("snowblock"){{ - solid = true; - variants = 3; - }}, - - stoneblock = new StaticBlock("stoneblock"){{ - solid = true; - variants = 3; - }}, - - blackstoneblock = new StaticBlock("blackstoneblock"){{ - solid = true; - variants = 3; - }}, - - grassblock = new StaticBlock("grassblock"){{ - solid = true; - variants = 2; - }}, - - mossblock = new StaticBlock("mossblock"){{ - solid = true; - }}, - - shrub = new Rock("shrub"){ - - }, - - rock = new Rock("rock"){{ - variants = 2; - varyShadow = true; - drops = new ItemStack(Item.stone, 3); - }}, - - icerock = new Rock("icerock"){{ - variants = 2; - varyShadow = true; - drops = new ItemStack(Item.stone, 3); - }}, - - blackrock = new Rock("blackrock"){{ - variants = 1; - varyShadow = true; - drops = new ItemStack(Item.stone, 3); - }}, - - dirtblock = new StaticBlock("dirtblock"){{ - solid = true; - }}; -} diff --git a/core/src/io/anuke/mindustry/world/blocks/DefenseBlocks.java b/core/src/io/anuke/mindustry/world/blocks/DefenseBlocks.java deleted file mode 100644 index 01748db7a7..0000000000 --- a/core/src/io/anuke/mindustry/world/blocks/DefenseBlocks.java +++ /dev/null @@ -1,83 +0,0 @@ -package io.anuke.mindustry.world.blocks; - -import io.anuke.mindustry.graphics.Fx; -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.blocks.types.Wall; -import io.anuke.mindustry.world.blocks.types.defense.*; - -public class DefenseBlocks{ - static final int wallHealthMultiplier = 4; - - public static final Block - - stonewall = new Wall("stonewall"){{ - health = 40*wallHealthMultiplier; - }}, - - ironwall = new Wall("ironwall"){{ - health = 80*wallHealthMultiplier; - }}, - - steelwall = new Wall("steelwall"){{ - health = 110*wallHealthMultiplier; - }}, - - titaniumwall = new Wall("titaniumwall"){{ - health = 150*wallHealthMultiplier; - }}, - diriumwall = new Wall("duriumwall"){{ - health = 190*wallHealthMultiplier; - }}, - compositewall = new Wall("compositewall"){{ - health = 270*wallHealthMultiplier; - }}, - steelwalllarge = new Wall("steelwall-large"){{ - health = 110*4*wallHealthMultiplier; - size = 2; - }}, - titaniumwalllarge = new Wall("titaniumwall-large"){{ - health = 150*4*wallHealthMultiplier; - size = 2; - }}, - diriumwalllarge = new Wall("duriumwall-large"){{ - health = 190*4*wallHealthMultiplier; - size = 2; - }}, - titaniumshieldwall = new ShieldedWallBlock("titaniumshieldwall"){{ - health = 150*wallHealthMultiplier; - }}, - - repairturret = new RepairTurret("repairturret"){ - { - range = 30; - reload = 20f; - health = 60; - powerUsed = 0.08f; - } - }, - - megarepairturret = new RepairTurret("megarepairturret"){ - { - range = 44; - reload = 12f; - health = 90; - powerUsed = 0.13f; - size = 2; - } - }, - - shieldgenerator = new ShieldBlock("shieldgenerator"){ - { - health = 100*wallHealthMultiplier; - } - }, - door = new Door("door"){{ - health = 90*wallHealthMultiplier; - }}, - largedoor = new Door("door-large"){{ - openfx = Fx.dooropenlarge; - closefx = Fx.doorcloselarge; - health = 90*4*wallHealthMultiplier; - size = 2; - }}; -} diff --git a/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java b/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java deleted file mode 100644 index b3d5837d23..0000000000 --- a/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java +++ /dev/null @@ -1,94 +0,0 @@ -package io.anuke.mindustry.world.blocks; - -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.blocks.types.distribution.*; -import io.anuke.mindustry.world.blocks.types.generation.PowerDistributor; -import io.anuke.mindustry.world.blocks.types.generation.PowerGenerator; -import io.anuke.mindustry.world.blocks.types.storage.SortedUnloader; -import io.anuke.mindustry.world.blocks.types.storage.Unloader; -import io.anuke.mindustry.world.blocks.types.storage.Vault; - -public class DistributionBlocks{ - - public static final Block - - conduit = new Conduit("conduit"){{ - health = 45; - }}, - - pulseconduit = new Conduit("pulseconduit"){{ - liquidCapacity = 16f; - liquidFlowFactor = 4.9f; - health = 65; - }}, - - liquidrouter = new LiquidRouter("liquidrouter"){{ - liquidCapacity = 40f; - }}, - - liquidtank = new LiquidRouter("liquidtank"){{ - size = 3; - liquidCapacity = 1500f; - }}, - - conveyor = new Conveyor("conveyor"){{ - }}, - - steelconveyor = new Conveyor("steelconveyor"){{ - health = 55; - speed = 0.04f; - }}, - - pulseconveyor = new Conveyor("poweredconveyor"){{ - health = 75; - speed = 0.09f; - }}, - - router = new Router("router"){{ - - }}, - - multiplexer = new Router("multiplexer"){{ - size = 2; - itemCapacity = 80; - }}, - - vault = new Vault("vault"){{ - size = 3; - }}, - - unloader = new Unloader("unloader"){{ - - }}, - - sortedunloader = new SortedUnloader("sortedunloader"){{ - - }}, - - junction = new Junction("junction"){{ - - }}, - tunnel = new TunnelConveyor("conveyortunnel"){{ - }}, - conduittunnel = new TunnelConduit("conduittunnel"){{ - - }}, - liquidjunction = new LiquidJunction("liquidjunction"){{ - - }}, - powernode = new PowerDistributor("powernode"){{ - }}, - battery = new PowerGenerator("battery"){{ - powerCapacity = 320f; - }}, - batteryLarge = new PowerGenerator("batterylarge"){{ - size = 3; - powerCapacity = 2000f; - }}, - teleporter = new Teleporter("teleporter"){{ - }}, - sorter = new Sorter("sorter"){{ - }}, - splitter = new Splitter("splitter"){{ - }}; -} diff --git a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java b/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java deleted file mode 100644 index 9a4874b8c4..0000000000 --- a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java +++ /dev/null @@ -1,331 +0,0 @@ -package io.anuke.mindustry.world.blocks; - -import io.anuke.mindustry.graphics.Fx; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.Liquid; -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.blocks.types.generation.ItemPowerGenerator; -import io.anuke.mindustry.world.blocks.types.generation.LiquidPowerGenerator; -import io.anuke.mindustry.world.blocks.types.generation.NuclearReactor; -import io.anuke.mindustry.world.blocks.types.generation.SolarGenerator; -import io.anuke.mindustry.world.blocks.types.production.*; -import io.anuke.mindustry.world.blocks.types.storage.CoreBlock; - -public class ProductionBlocks{ - public static final Block - - core = new CoreBlock("core"){}, - - pump = new Pump("pump"){ - { - pumpAmount = 0.8f; - } - }, - - fluxpump = new Pump("fluxpump"){ - { - pumpAmount = 1.2f; - } - }, - - smelter = new Smelter("smelter"){ - { - health = 70; - inputs = new Item[]{Item.iron}; - fuel = Item.coal; - result = Item.steel; - craftTime = 25f; - } - }, - - alloysmelter = new Smelter("alloysmelter"){ - { - health = 90; - inputs = new Item[]{Item.titanium, Item.steel}; - fuel = Item.coal; - result = Item.densealloy; - burnDuration = 45f; - craftTime = 25f; - } - }, - - powersmelter = new PowerSmelter("powersmelter"){ - { - /* - health = 90; - inputs = new Item[]{Item.titanium, Item.steel}; - fuel = Item.coal; - results = Item.dirium; - burnDuration = 45f; - craftTime = 25f; - size = 2;*/ - } - }, - - cryofluidmixer = new LiquidMixer("cryofluidmixer"){ - { - health = 200; - inputLiquid = Liquid.water; - outputLiquid = Liquid.cryofluid; - inputItem = Item.titanium; - liquidPerItem = 50f; - itemCapacity = 50; - powerUse = 0.1f; - size = 2; - } - }, - - coalextractor = new LiquidCrafter("coalextractor"){ - { - input = Item.stone; - inputAmount = 6; - inputLiquid = Liquid.water; - liquidAmount = 19f; - output = Item.coal; - health = 50; - purifyTime = 50; - health = 60; - } - }, - - titaniumextractor = new LiquidCrafter("titaniumextractor"){ - { - input = Item.stone; - inputAmount = 8; - inputLiquid = Liquid.water; - liquidAmount = 40f; - liquidCapacity = 41f; - purifyTime = 60; - output = Item.titanium; - health = 70; - } - }, - - oilrefinery = new LiquidCrafter("oilrefinery"){ - { - inputLiquid = Liquid.oil; - liquidAmount = 55f; - liquidCapacity = 56f; - purifyTime = 65; - output = Item.coal; - health = 80; - craftEffect = Fx.purifyoil; - } - }, - - stoneformer = new LiquidCrafter("stoneformer"){ - { - input = null; - inputLiquid = Liquid.lava; - liquidAmount = 16f; - liquidCapacity = 21f; - purifyTime = 12; - output = Item.stone; - health = 80; - craftEffect = Fx.purifystone; - } - }, - - lavasmelter = new LiquidCrafter("lavasmelter"){ - { - input = Item.iron; - inputAmount = 1; - inputLiquid = Liquid.lava; - liquidAmount = 40f; - liquidCapacity = 41f; - purifyTime = 30; - output = Item.steel; - health = 80; - craftEffect = Fx.purifystone; - } - }, - - siliconextractor = new LiquidCrafter("siliconextractor"){ - { - input = Item.stone; - inputAmount = 5; - inputLiquid = Liquid.water; - liquidAmount = 18.99f; - output = Item.silicon; - health = 50; - purifyTime = 50; - } - }, - - stonedrill = new Drill("stonedrill"){ - { - resource = Blocks.stone; - result = Item.stone; - drillTime = 240; - } - }, - - irondrill = new Drill("irondrill"){ - { - resource = Blocks.iron; - result = Item.iron; - drillTime = 360; - } - }, - - leaddrill = new Drill("leaddrill"){ - { - resource = Blocks.lead; - result = Item.lead; - drillTime = 400; - } - }, - - coaldrill = new Drill("coaldrill"){ - { - resource = Blocks.coal; - result = Item.coal; - drillTime = 420; - } - }, - - thoriumdrill = new Drill("thoriumdrill"){ - { - resource = Blocks.thorium; - result = Item.thorium; - drillTime = 600; - } - }, - - titaniumdrill = new Drill("titaniumdrill"){ - { - resource = Blocks.titanium; - result = Item.titanium; - drillTime = 540; - } - }, - - laserdrill = new GenericDrill("laserdrill"){ - { - drillTime = 200; - size = 2; - powerUse = 0.2f; - hasPower = true; - } - }, - - nucleardrill = new GenericDrill("nucleardrill"){ - { - drillTime = 240; - size = 3; - powerUse = 0.32f; - hasPower = true; - } - }, - - plasmadrill = new GenericDrill("plasmadrill"){ - { - inputLiquid = Liquid.plasma; - drillTime = 240; - size = 4; - powerUse = 0.16f; - hasLiquids = true; - hasPower = true; - } - }, - - quartzextractor = new GenericDrill("quartzextractor"){ - { - powerUse = 0.1f; - resource = Blocks.sand; - result = Item.silicon; - drillTime = 320; - size = 2; - } - }, - - waterextractor = new SolidPump("waterextractor"){ - { - result = Liquid.water; - powerUse = 0.1f; - pumpAmount = 0.4f; - size = 2; - liquidCapacity = 30f; - } - }, - - oilextractor = new SolidPump("oilextractor"){ - { - result = Liquid.oil; - powerUse = 0.5f; - pumpAmount = 0.4f; - size = 3; - liquidCapacity = 80f; - } - }, - - cultivator = new GenericDrill("cultivator"){ - { - resource = Blocks.grass; - result = Item.biomatter; - inputLiquid = Liquid.water; - liquidUse = 0.1f; - drillTime = 300; - size = 2; - hasLiquids = true; - hasPower = true; - } - }, - - coalgenerator = new ItemPowerGenerator("coalgenerator"){ - { - generateItem = Item.coal; - powerOutput = 0.04f; - powerCapacity = 40f; - } - }, - thermalgenerator = new LiquidPowerGenerator("thermalgenerator"){ - { - generateLiquid = Liquid.lava; - maxLiquidGenerate = 0.5f; - powerPerLiquid = 0.08f; - powerCapacity = 40f; - generateEffect = Fx.redgeneratespark; - } - }, - combustiongenerator = new LiquidPowerGenerator("combustiongenerator"){ - { - generateLiquid = Liquid.oil; - maxLiquidGenerate = 0.4f; - powerPerLiquid = 0.12f; - powerCapacity = 40f; - } - }, - rtgenerator = new ItemPowerGenerator("rtgenerator"){ - { - generateItem = Item.thorium; - powerCapacity = 40f; - powerOutput = 0.03f; - itemDuration = 240f; - } - }, - solarpanel = new SolarGenerator("solarpanel"){ - { - generation = 0.003f; - } - }, - largesolarpanel = new SolarGenerator("largesolarpanel"){ - { - size = 3; - generation = 0.012f; - } - }, - nuclearReactor = new NuclearReactor("nuclearreactor"){ - { - size = 3; - health = 600; - breaktime *= 2.3f; - } - }, - weaponFactory = new WeaponFactory("weaponfactory"){ - { - size = 2; - health = 250; - } - }; -} diff --git a/core/src/io/anuke/mindustry/world/blocks/types/Ore.java b/core/src/io/anuke/mindustry/world/blocks/types/Ore.java index d4d11d2e0a..1dc567e078 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/Ore.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/Ore.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.world.blocks.types; -import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.content.blocks.Blocks; public class Ore extends Floor{ diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/LiquidTurret.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/LiquidTurret.java index 130001ce93..ba6d28644d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/LiquidTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/LiquidTurret.java @@ -1,10 +1,11 @@ package io.anuke.mindustry.world.blocks.types.defense; +import io.anuke.mindustry.content.Liquids; import io.anuke.mindustry.resource.Liquid; import io.anuke.mindustry.world.Tile; public abstract class LiquidTurret extends Turret{ - public Liquid ammoLiquid = Liquid.water; + public Liquid ammoLiquid = Liquids.water; public float liquidCapacity = 60f; public float liquidPerShot = 1f; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conveyor.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conveyor.java index a799543f44..fbf2d4d9e1 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conveyor.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conveyor.java @@ -3,6 +3,7 @@ package io.anuke.mindustry.world.blocks.types.distribution; import com.badlogic.gdx.utils.LongArray; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.content.Items; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockGroup; import io.anuke.mindustry.world.Layer; @@ -32,7 +33,7 @@ public class Conveyor extends Block{ private final Translator tr1 = new Translator(); private final Translator tr2 = new Translator(); - public float speed = 0.02f; + public float speed = 0f; protected Conveyor(String name) { super(name); @@ -53,7 +54,7 @@ public class Conveyor extends Block{ byte rotation = tile.getRotation(); Draw.rect(name() + - (Timers.time() % ((20 / 100f) / speed) < (10 / 100f) / speed && acceptItem(Item.stone, tile, null) ? "" : "move"), + (Timers.time() % ((20 / 100f) / speed) < (10 / 100f) / speed && acceptItem(Items.stone, tile, null) ? "" : "move"), tile.worldx(), tile.worldy(), rotation * 90); } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidJunction.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidJunction.java index 610b9b31a4..fb92234ad3 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidJunction.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidJunction.java @@ -33,8 +33,8 @@ public class LiquidJunction extends LiquidBlock{ Tile to = tile.getNearby(dir); Timers.run(20f, () -> { - if(to.block() instanceof LiquidBlock && ((LiquidBlock)to.block()).acceptLiquid(to, tile, liquid, amount)) - ((LiquidBlock)to.block()).handleLiquid(to, tile, liquid, amount); + if(to.block().hasLiquids && to.block().acceptLiquid(to, tile, liquid, amount)) + to.block().handleLiquid(to, tile, liquid, amount); }); } @@ -43,7 +43,7 @@ public class LiquidJunction extends LiquidBlock{ int dir = source.relativeTo(dest.x, dest.y); dir = (dir+4)%4; Tile to = dest.getNearby(dir); - return to != null && to.block() instanceof LiquidBlock && - ((LiquidBlock)to.block()).acceptLiquid(to, dest, liquid, amount); + return to != null && to.block().hasLiquids && + to.block().acceptLiquid(to, dest, liquid, amount); } } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Sorter.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Sorter.java index b1a9199af8..3c40dd146f 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Sorter.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Sorter.java @@ -4,6 +4,7 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.content.Items; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockGroup; import io.anuke.mindustry.world.Tile; @@ -143,7 +144,7 @@ public class Sorter extends Block{ } public static class SorterEntity extends TileEntity{ - public Item sortItem = Item.iron; + public Item sortItem = Items.iron; @Override public void write(DataOutputStream stream) throws IOException{ diff --git a/core/src/io/anuke/mindustry/world/blocks/types/generation/NuclearReactor.java b/core/src/io/anuke/mindustry/world/blocks/types/generation/NuclearReactor.java index 984ae9fe81..cdfc9c19d0 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/generation/NuclearReactor.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/generation/NuclearReactor.java @@ -1,10 +1,12 @@ package io.anuke.mindustry.world.blocks.types.generation; import com.badlogic.gdx.graphics.Color; +import io.anuke.mindustry.content.Liquids; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.effect.DamageArea; import io.anuke.mindustry.graphics.Fx; import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.content.Items; import io.anuke.mindustry.resource.Liquid; import io.anuke.mindustry.world.BarType; import io.anuke.mindustry.world.BlockBar; @@ -41,8 +43,8 @@ public class NuclearReactor extends LiquidPowerGenerator{ public NuclearReactor(String name) { super(name); - generateItem = Item.thorium; - generateLiquid = Liquid.water; + generateItem = Items.thorium; + generateLiquid = Liquids.water; itemCapacity = 30; liquidCapacity = 50; explosionEffect = Fx.nuclearShockwave; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/modules/LiquidModule.java b/core/src/io/anuke/mindustry/world/blocks/types/modules/LiquidModule.java index a0104e6220..6ff00cc741 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/modules/LiquidModule.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/modules/LiquidModule.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.world.blocks.types.modules; +import io.anuke.mindustry.content.Liquids; import io.anuke.mindustry.resource.Liquid; import io.anuke.mindustry.world.blocks.types.BlockModule; @@ -9,7 +10,7 @@ import java.io.IOException; public class LiquidModule extends BlockModule { public float amount; - public Liquid liquid = Liquid.none; + public Liquid liquid = Liquids.none; @Override public void write(DataOutputStream stream) throws IOException { diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/GenericDrill.java b/core/src/io/anuke/mindustry/world/blocks/types/production/GenericDrill.java index d01f84c4ad..94742a30d1 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/GenericDrill.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/GenericDrill.java @@ -1,6 +1,7 @@ package io.anuke.mindustry.world.blocks.types.production; import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.content.Liquids; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.Liquid; @@ -14,7 +15,7 @@ public class GenericDrill extends Drill{ public float powerUse = 0.08f; /**liquid use per frame.*/ protected float liquidUse = 0.1f; - protected Liquid inputLiquid = Liquid.water; + protected Liquid inputLiquid = Liquids.water; private Array toAdd = new Array<>(); diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidMixer.java b/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidMixer.java index c4d0a0aded..aac38831a3 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidMixer.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidMixer.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.world.blocks.types.production; +import io.anuke.mindustry.content.Liquids; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.Liquid; @@ -8,8 +9,8 @@ import io.anuke.mindustry.world.blocks.types.LiquidBlock; import io.anuke.ucore.core.Timers; public class LiquidMixer extends LiquidBlock{ - protected Liquid inputLiquid = Liquid.none; - protected Liquid outputLiquid = Liquid.none; + protected Liquid inputLiquid = Liquids.none; + protected Liquid outputLiquid = Liquids.none; protected Item inputItem = null; protected float liquidPerItem = 50f; protected float powerUse = 0f; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/SolidPump.java b/core/src/io/anuke/mindustry/world/blocks/types/production/SolidPump.java index 33bd73ba2d..93d12faad6 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/SolidPump.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/SolidPump.java @@ -1,13 +1,14 @@ package io.anuke.mindustry.world.blocks.types.production; import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.content.Liquids; import io.anuke.mindustry.resource.Liquid; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Timers; /**Pump that makes liquid from solids and takes in power. Only works on solid floor blocks.*/ public class SolidPump extends Pump { - protected Liquid result = Liquid.water; + protected Liquid result = Liquids.water; /**Power use per liquid unit.*/ protected float powerUse = 0.1f; 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 index 11b55a631c..11f744cdfb 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/WeaponFactory.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/WeaponFactory.java @@ -5,7 +5,7 @@ import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.NetEvents; import io.anuke.mindustry.resource.ItemStack; import io.anuke.mindustry.resource.Upgrade; -import io.anuke.mindustry.resource.UpgradeRecipes; +import io.anuke.mindustry.content.UpgradeRecipes; import io.anuke.mindustry.resource.Weapon; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/storage/CoreBlock.java b/core/src/io/anuke/mindustry/world/blocks/types/storage/CoreBlock.java index a403292aff..2392a215ba 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/storage/CoreBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/storage/CoreBlock.java @@ -5,7 +5,6 @@ import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.world.Tile; import static io.anuke.mindustry.Vars.state; -import static io.anuke.mindustry.Vars.world; public class CoreBlock extends StorageBlock { protected int capacity = 1000; @@ -13,9 +12,9 @@ public class CoreBlock extends StorageBlock { public CoreBlock(String name) { super(name); - health = 800; solid = true; destructible = true; + unbreakable = true; size = 3; hasInventory = false; } @@ -23,7 +22,10 @@ public class CoreBlock extends StorageBlock { public void onDestroyed(Tile tile){ //TODO more dramatic effects super.onDestroyed(tile); - world.getAllyCores().removeValue(tile, true); + + if(state.teams.has(tile.getTeam())){ + state.teams.get(tile.getTeam()).cores.removeValue(tile, true); + } } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/types/storage/SortedUnloader.java b/core/src/io/anuke/mindustry/world/blocks/types/storage/SortedUnloader.java index c50cdc165f..5c917e94e7 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/storage/SortedUnloader.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/storage/SortedUnloader.java @@ -4,6 +4,7 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.content.Items; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.scene.style.TextureRegionDrawable; @@ -26,7 +27,7 @@ public class SortedUnloader extends Unloader { public void update(Tile tile){ SortedUnloaderEntity entity = tile.entity(); - if(entity.inventory.totalItems() == 0 && entity.timer.get(timerUnload, 5)){ + if(entity.inventory.totalItems() == 0 && entity.timer.get(timerUnload, speed)){ tile.allNearby(other -> { if(other.block() instanceof StorageBlock && entity.inventory.totalItems() == 0 && ((StorageBlock)other.block()).hasItem(other, entity.sortItem)){ @@ -103,7 +104,7 @@ public class SortedUnloader extends Unloader { } public static class SortedUnloaderEntity extends TileEntity{ - public Item sortItem = Item.iron; + public Item sortItem = Items.iron; @Override public void write(DataOutputStream stream) throws IOException { diff --git a/core/src/io/anuke/mindustry/world/blocks/types/storage/Unloader.java b/core/src/io/anuke/mindustry/world/blocks/types/storage/Unloader.java index 338f715e68..1f12d73352 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/storage/Unloader.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/storage/Unloader.java @@ -7,6 +7,7 @@ import io.anuke.mindustry.world.Tile; public class Unloader extends Block { protected final int timerUnload = timers++; + protected int speed = 5; public Unloader(String name){ super(name); @@ -18,7 +19,7 @@ public class Unloader extends Block { @Override public void update(Tile tile){ - if(tile.entity.inventory.totalItems() == 0 && tile.entity.timer.get(timerUnload, 5)){ + if(tile.entity.inventory.totalItems() == 0 && tile.entity.timer.get(timerUnload, speed)){ tile.allNearby(other -> { if(other.block() instanceof StorageBlock && tile.entity.inventory.totalItems() == 0 && ((StorageBlock)other.block()).hasItem(other, null)){ diff --git a/kryonet/src/io/anuke/kryonet/KryoServer.java b/kryonet/src/io/anuke/kryonet/KryoServer.java index 876f0ac3a3..c7aa93921b 100644 --- a/kryonet/src/io/anuke/kryonet/KryoServer.java +++ b/kryonet/src/io/anuke/kryonet/KryoServer.java @@ -71,7 +71,7 @@ public class KryoServer implements ServerProvider { Log.info("&bRecieved connection: {0} / {1}. Kryonet ID: {2}", c.id, c.addressTCP, connection.getID()); connections.add(kn); - Gdx.app.postRunnable(() -> Net.handleServerReceived(kn.id, c)); + Gdx.app.postRunnable(() -> Net.handleServerReceived(kn.id, c)); } @Override diff --git a/server/src/io/anuke/mindustry/server/MindustryServer.java b/server/src/io/anuke/mindustry/server/MindustryServer.java index 8ab8e82e0c..0842c25dfd 100644 --- a/server/src/io/anuke/mindustry/server/MindustryServer.java +++ b/server/src/io/anuke/mindustry/server/MindustryServer.java @@ -4,7 +4,7 @@ import io.anuke.mindustry.core.Logic; import io.anuke.mindustry.core.NetCommon; import io.anuke.mindustry.core.NetServer; import io.anuke.mindustry.core.World; -import io.anuke.mindustry.io.BlockLoader; +import io.anuke.mindustry.core.ContentLoader; import io.anuke.mindustry.io.BundleLoader; import io.anuke.ucore.modules.ModuleCore; @@ -17,7 +17,7 @@ public class MindustryServer extends ModuleCore { headless = true; BundleLoader.load(); - BlockLoader.load(); + ContentLoader.load(); module(logic = new Logic()); module(world = new World());