From 26e1ad51ff9326969faaac74e79057925b84e4ec Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 20 May 2018 20:41:10 -0400 Subject: [PATCH] Documentation, cleanup, incremental resource usage, core seeking --- .../blocks/distribution/vault-icon.png | Bin 302 -> 0 bytes core/assets/sprites/sprites.atlas | 20 +- core/assets/sprites/sprites.png | Bin 109587 -> 109463 bytes core/src/Mindustry.gwt.xml | 2 +- core/src/io/anuke/mindustry/ai/HGraph.java | 29 -- .../src/io/anuke/mindustry/ai/Heuristics.java | 69 ---- .../io/anuke/mindustry/ai/OptimizedGraph.java | 12 - .../mindustry/ai/OptimizedPathFinder.java | 378 ------------------ core/src/io/anuke/mindustry/ai/Raycaster.java | 87 ---- .../anuke/mindustry/ai/SmoothGraphPath.java | 32 -- core/src/io/anuke/mindustry/ai/TileGraph.java | 25 -- .../io/anuke/mindustry/content/AmmoTypes.java | 2 +- .../src/io/anuke/mindustry/content/Items.java | 2 +- .../io/anuke/mindustry/content/Liquids.java | 2 +- .../src/io/anuke/mindustry/content/Mechs.java | 2 +- .../io/anuke/mindustry/content/Recipes.java | 6 +- .../mindustry/content/UpgradeRecipes.java | 6 +- .../io/anuke/mindustry/content/Weapons.java | 2 +- .../mindustry/content/blocks/Blocks.java | 2 +- .../content/blocks/CraftingBlocks.java | 4 +- .../mindustry/content/blocks/DebugBlocks.java | 4 +- .../mindustry/content/blocks/UnitBlocks.java | 2 +- .../content/blocks/WeaponBlocks.java | 2 +- .../content/bullets/TurretBullets.java | 2 +- .../anuke/mindustry/core/ContentLoader.java | 6 +- core/src/io/anuke/mindustry/core/Control.java | 2 +- core/src/io/anuke/mindustry/core/Logic.java | 10 + .../io/anuke/mindustry/core/NetClient.java | 6 +- .../io/anuke/mindustry/core/NetCommon.java | 2 +- .../io/anuke/mindustry/core/NetServer.java | 6 +- .../mindustry/entities/BlockBuilder.java | 11 +- .../entities/ItemAnimationEffect.java | 62 --- .../mindustry/entities/ItemTransfer.java | 37 ++ .../io/anuke/mindustry/entities/Player.java | 9 +- .../mindustry/entities/StatusEffect.java | 3 + .../anuke/mindustry/entities/SyncEntity.java | 1 - .../src/io/anuke/mindustry/entities/Unit.java | 19 +- .../mindustry/entities/UnitInventory.java | 8 +- .../io/anuke/mindustry/entities/Units.java | 3 + .../entities/effect/BelowLiquidEffect.java | 1 + .../mindustry/entities/effect/DamageArea.java | 2 + .../entities/effect/GroundEffectEntity.java | 5 + .../mindustry/entities/effect/Lightning.java | 1 + .../mindustry/entities/effect/Puddle.java | 2 +- .../mindustry/entities/effect/Rubble.java | 2 + .../mindustry/entities/effect/Shield.java | 1 + .../mindustry/entities/units/BaseUnit.java | 2 +- .../entities/units/FlyingUnitType.java | 2 +- .../entities/units/GroundUnitType.java | 5 +- .../mindustry/entities/units/UnitType.java | 4 +- .../io/anuke/mindustry/game/Inventory.java | 96 ----- .../src/io/anuke/mindustry/game/TeamInfo.java | 2 + .../mindustry/game/UpgradeInventory.java | 26 -- .../anuke/mindustry/input/DesktopInput.java | 4 +- .../anuke/mindustry/input/InputHandler.java | 22 +- .../src/io/anuke/mindustry/net/NetEvents.java | 4 +- .../src/io/anuke/mindustry/net/NetworkIO.java | 2 +- .../anuke/mindustry/resource/AmmoEntry.java | 11 - .../io/anuke/mindustry/type/AmmoEntry.java | 11 + .../{resource => type}/AmmoType.java | 6 +- .../mindustry/{resource => type}/Item.java | 2 +- .../{resource => type}/ItemStack.java | 6 +- .../mindustry/{resource => type}/Liquid.java | 2 +- .../mindustry/{resource => type}/Mech.java | 4 +- .../mindustry/{resource => type}/Recipe.java | 12 +- .../mindustry/{resource => type}/Section.java | 2 +- .../mindustry/{resource => type}/Upgrade.java | 2 +- .../mindustry/{resource => type}/Weapon.java | 14 +- .../io/anuke/mindustry/type/WeatherEvent.java | 19 + .../ui/fragments/BlockInventoryFragment.java | 2 +- .../ui/fragments/BlocksFragment.java | 10 +- .../io/anuke/mindustry/world/BaseBlock.java | 4 +- core/src/io/anuke/mindustry/world/Block.java | 6 +- core/src/io/anuke/mindustry/world/Build.java | 7 +- .../io/anuke/mindustry/world/ItemBuffer.java | 2 +- core/src/io/anuke/mindustry/world/Tile.java | 2 +- .../world/blocks/types/BlockPart.java | 4 +- .../world/blocks/types/BuildBlock.java | 60 ++- .../world/blocks/types/defense/Turret.java | 4 +- .../types/defense/turrets/BurstTurret.java | 2 +- .../types/defense/turrets/DoubleTurret.java | 2 +- .../types/defense/turrets/ItemTurret.java | 6 +- .../types/defense/turrets/LaserTurret.java | 2 +- .../types/defense/turrets/LiquidTurret.java | 6 +- .../types/defense/turrets/PowerTurret.java | 2 +- .../distribution/BufferedItemBridge.java | 2 +- .../blocks/types/distribution/Conduit.java | 2 +- .../blocks/types/distribution/Conveyor.java | 2 +- .../blocks/types/distribution/ItemBridge.java | 2 +- .../blocks/types/distribution/Junction.java | 2 +- .../types/distribution/LiquidBridge.java | 2 +- .../distribution/LiquidExtendingBridge.java | 2 +- .../types/distribution/LiquidJunction.java | 2 +- .../types/distribution/OverflowGate.java | 2 +- .../blocks/types/distribution/Router.java | 2 +- .../blocks/types/distribution/Sorter.java | 2 +- .../blocks/types/distribution/Splitter.java | 2 +- .../blocks/types/distribution/Teleporter.java | 4 +- .../types/distribution/TunnelConduit.java | 2 +- .../types/distribution/TunnelConveyor.java | 2 +- .../blocks/types/modules/InventoryModule.java | 4 +- .../blocks/types/modules/LiquidModule.java | 2 +- .../blocks/types/power/BurnerGenerator.java | 2 +- .../blocks/types/power/DecayGenerator.java | 2 +- .../blocks/types/power/FusionReactor.java | 2 +- .../types/power/LiquidBurnerGenerator.java | 2 +- .../types/power/LiquidHeatGenerator.java | 2 +- .../blocks/types/power/NuclearReactor.java | 4 +- .../blocks/types/production/Cultivator.java | 2 +- .../world/blocks/types/production/Drill.java | 4 +- .../blocks/types/production/Fracker.java | 2 +- .../types/production/GenericCrafter.java | 6 +- .../blocks/types/production/Incinerator.java | 4 +- .../blocks/types/production/LiquidMixer.java | 4 +- .../blocks/types/production/PowerCrafter.java | 6 +- .../blocks/types/production/PowerSmelter.java | 4 +- .../world/blocks/types/production/Pump.java | 2 +- .../blocks/types/production/Separator.java | 4 +- .../blocks/types/production/Smelter.java | 2 +- .../blocks/types/production/SolidPump.java | 2 +- .../world/blocks/types/storage/CoreBlock.java | 16 +- .../blocks/types/storage/SortedUnloader.java | 2 +- .../blocks/types/storage/StorageBlock.java | 2 +- .../world/blocks/types/storage/Unloader.java | 2 +- .../world/blocks/types/storage/Vault.java | 2 +- .../blocks/types/units/ResupplyPoint.java | 2 +- .../world/blocks/types/units/UnitFactory.java | 4 +- 127 files changed, 368 insertions(+), 1028 deletions(-) delete mode 100644 core/assets-raw/sprites/blocks/distribution/vault-icon.png delete mode 100644 core/src/io/anuke/mindustry/ai/HGraph.java delete mode 100644 core/src/io/anuke/mindustry/ai/Heuristics.java delete mode 100644 core/src/io/anuke/mindustry/ai/OptimizedGraph.java delete mode 100644 core/src/io/anuke/mindustry/ai/OptimizedPathFinder.java delete mode 100644 core/src/io/anuke/mindustry/ai/Raycaster.java delete mode 100644 core/src/io/anuke/mindustry/ai/SmoothGraphPath.java delete mode 100644 core/src/io/anuke/mindustry/ai/TileGraph.java delete mode 100644 core/src/io/anuke/mindustry/entities/ItemAnimationEffect.java create mode 100644 core/src/io/anuke/mindustry/entities/ItemTransfer.java delete mode 100644 core/src/io/anuke/mindustry/game/Inventory.java delete mode 100644 core/src/io/anuke/mindustry/game/UpgradeInventory.java delete mode 100644 core/src/io/anuke/mindustry/resource/AmmoEntry.java create mode 100644 core/src/io/anuke/mindustry/type/AmmoEntry.java rename core/src/io/anuke/mindustry/{resource => type}/AmmoType.java (90%) rename core/src/io/anuke/mindustry/{resource => type}/Item.java (97%) rename core/src/io/anuke/mindustry/{resource => type}/ItemStack.java (60%) rename core/src/io/anuke/mindustry/{resource => type}/Liquid.java (97%) rename core/src/io/anuke/mindustry/{resource => type}/Mech.java (59%) rename core/src/io/anuke/mindustry/{resource => type}/Recipe.java (76%) rename core/src/io/anuke/mindustry/{resource => type}/Section.java (72%) rename core/src/io/anuke/mindustry/{resource => type}/Upgrade.java (95%) rename core/src/io/anuke/mindustry/{resource => type}/Weapon.java (87%) create mode 100644 core/src/io/anuke/mindustry/type/WeatherEvent.java diff --git a/core/assets-raw/sprites/blocks/distribution/vault-icon.png b/core/assets-raw/sprites/blocks/distribution/vault-icon.png deleted file mode 100644 index 13f2aa0fcdaa1aba539eb90951bac3a75a37e475..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302 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�ZKX1*cKY{Q1#f4A( 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 z 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 z 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%0D2UElSb%RKv&rn4i1g9^hWh76&E{6oh*8cdiP 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 Bt6Bg6 delta 96439 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%0D8m4!J%I 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%0ApgrP$t;c+$}iFE4%zWyOr2#=KGuSJfCjRmsd~w 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 P4N8!nu6{1-oD!M<^McCi diff --git a/core/src/Mindustry.gwt.xml b/core/src/Mindustry.gwt.xml index 11108dfe0c..efc50b6b51 100644 --- a/core/src/Mindustry.gwt.xml +++ b/core/src/Mindustry.gwt.xml @@ -10,7 +10,7 @@ - + diff --git a/core/src/io/anuke/mindustry/ai/HGraph.java b/core/src/io/anuke/mindustry/ai/HGraph.java deleted file mode 100644 index 5fa0c45056..0000000000 --- a/core/src/io/anuke/mindustry/ai/HGraph.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.anuke.mindustry.ai; - -import com.badlogic.gdx.ai.pfa.Connection; -import com.badlogic.gdx.ai.pfa.HierarchicalGraph; -import com.badlogic.gdx.utils.Array; -import io.anuke.mindustry.world.Tile; - -public class HGraph implements HierarchicalGraph { - - @Override - public int getLevelCount() { - return 0; - } - - @Override - public void setLevel(int level) { - - } - - @Override - public Tile convertNodeBetweenLevels(int inputLevel, Tile node, int outputLevel) { - return null; - } - - @Override - public Array> getConnections(Tile fromNode) { - return null; - } -} diff --git a/core/src/io/anuke/mindustry/ai/Heuristics.java b/core/src/io/anuke/mindustry/ai/Heuristics.java deleted file mode 100644 index ad5ff8b453..0000000000 --- a/core/src/io/anuke/mindustry/ai/Heuristics.java +++ /dev/null @@ -1,69 +0,0 @@ -package io.anuke.mindustry.ai; - -import com.badlogic.gdx.ai.pfa.Heuristic; -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.Tile; -import io.anuke.ucore.function.Predicate; - -import static io.anuke.mindustry.Vars.tilesize; - -public class Heuristics { - /**How many times more it costs to go through a destructible block than an empty block.*/ - static final float solidMultiplier = 5f; - /**How many times more it costs to go through a tile that touches a solid block.*/ - static final float occludedMultiplier = 5f; - - /**Calculates the fastest path. No priorities, just avoids solid blocks.*/ - public static class FastestHeuristic implements Heuristic { - - @Override - public float estimate(Tile node, Tile other){ - //Get Manhattan distance cost - float cost = Math.abs(node.worldx() - other.worldx()) + Math.abs(node.worldy() - other.worldy()); - - //If either one of the tiles is a breakable solid block (that is, it's player-made), - //increase the cost by the tilesize times the solid block multiplier - //Also add the block health, so blocks with more health cost more to traverse - if(node.breakable() && node.block().solid) cost += tilesize* solidMultiplier + node.block().health; - if(other.breakable() && other.block().solid) cost += tilesize* solidMultiplier + other.block().health; - - //if this block has solid blocks near it, increase the cost, as we don't want enemies hugging walls - //if(node.occluded) cost += tilesize*occludedMultiplier; - - return cost; - } - } - - /**Calculates the fastest and most destructive path based on a block predicate.*/ - public static class DestrutiveHeuristic implements Heuristic { - /**Should return whether a block if "free", e.g. whether it's an important target*/ - private final Predicate frees; - - public DestrutiveHeuristic(Predicate frees){ - this.frees = frees; - } - - @Override - public float estimate(Tile node, Tile other){ - //Get Manhattan distance cost - float cost = Math.abs(node.worldx() - other.worldx()) + Math.abs(node.worldy() - other.worldy()); - - //If either one of the tiles is a breakable solid block (that is, it's player-made), - //increase the cost by the tilesize times the solid block multiplier - //Also add the block health, so blocks with more health cost more to traverse - if(node.breakable() && node.block().solid) cost += tilesize* solidMultiplier + node.block().health; - if(other.breakable() && other.block().solid) cost += tilesize* solidMultiplier + other.block().health; - - //if this block has solid blocks near it, increase the cost, as we don't want enemies hugging walls - //if(node.occluded) cost += tilesize*occludedMultiplier; - - if(other.getLinked() != null) other = other.getLinked(); - if(node.getLinked() != null) node = node.getLinked(); - - //check if it's free - if(frees.test(other.block()) || frees.test(node.block())) cost = 0; - - return cost; - } - } -} diff --git a/core/src/io/anuke/mindustry/ai/OptimizedGraph.java b/core/src/io/anuke/mindustry/ai/OptimizedGraph.java deleted file mode 100644 index 02bd9e5ebd..0000000000 --- a/core/src/io/anuke/mindustry/ai/OptimizedGraph.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.anuke.mindustry.ai; - -/**An interface for an indexed graph that doesn't use allocations for connections.*/ -public interface OptimizedGraph{ - /**This is used in the same way as getConnections(), but does not use Connection objects.*/ - N[] connectionsOf(N node); - - /** Returns the unique index of the given node. - * @param node the node whose index will be returned - * @return the unique index of the given node. */ - int getIndex (N node); -} diff --git a/core/src/io/anuke/mindustry/ai/OptimizedPathFinder.java b/core/src/io/anuke/mindustry/ai/OptimizedPathFinder.java deleted file mode 100644 index 1b8b59e5f4..0000000000 --- a/core/src/io/anuke/mindustry/ai/OptimizedPathFinder.java +++ /dev/null @@ -1,378 +0,0 @@ -package io.anuke.mindustry.ai; - -import com.badlogic.gdx.ai.pfa.GraphPath; -import com.badlogic.gdx.ai.pfa.PathFinderQueue; -import com.badlogic.gdx.ai.pfa.PathFinderRequest; -import com.badlogic.gdx.utils.BinaryHeap; -import com.badlogic.gdx.utils.IntMap; -import com.badlogic.gdx.utils.TimeUtils; -import io.anuke.mindustry.content.fx.Fx; -import io.anuke.mindustry.world.Tile; -import io.anuke.ucore.core.Effects; -import io.anuke.ucore.function.Consumer; -import io.anuke.ucore.util.Geometry; -import io.anuke.ucore.util.Mathf; - -/**An IndexedAStarPathfinder that uses an OptimizedGraph, and therefore has less allocations.*/ -public class OptimizedPathFinder { - IntMap records = new IntMap<>(); - BinaryHeap openList; - NodeRecord current; - - private int searchId; - private Tile end; - - private static final byte UNVISITED = 0; - private static final byte OPEN = 1; - private static final byte CLOSED = 2; - - private static final boolean debug = false; - - public OptimizedPathFinder() { - this.openList = new BinaryHeap<>(); - } - - public boolean searchNodePath(Tile startNode, Tile endNode, GraphPath outPath) { - this.end = endNode; - - // Perform AStar - boolean found = search(startNode, endNode); - - if (found) { - // Create a path made of nodes - generateNodePath(startNode, outPath); - } - - return found; - } - - protected boolean search(Tile startNode, Tile endNode) { - - initSearch(startNode, endNode); - - // Iterate through processing each node - do { - // Retrieve the node with smallest estimated total cost from the open list - current = openList.pop(); - current.category = CLOSED; - - // Terminate if we reached the goal node - if (current.node == endNode) return true; - - visitChildren(endNode); - - } while (openList.size > 0); - - // We've run out of nodes without finding the goal, so there's no solution - return false; - } - - public boolean search(PathFinderRequest request, long timeToRun) { - - long lastTime = TimeUtils.nanoTime(); - - // We have to initialize the search if the status has just changed - if (request.statusChanged) { - initSearch(request.startNode, request.endNode); - request.statusChanged = false; - } - - // Iterate through processing each node - do { - - // Check the available time - long currentTime = TimeUtils.nanoTime(); - timeToRun -= currentTime - lastTime; - if (timeToRun <= PathFinderQueue.TIME_TOLERANCE) return false; - - // Retrieve the node with smallest estimated total cost from the open list - current = openList.pop(); - current.category = CLOSED; - - // Terminate if we reached the goal node; we've found a path. - if (current.node == request.endNode) { - request.pathFound = true; - - generateNodePath(request.startNode, request.resultPath); - - return true; - } - - // Visit current node's children - visitChildren(request.endNode); - - // Store the current time - lastTime = currentTime; - - } while (openList.size > 0); - - // The open list is empty and we've not found a path. - request.pathFound = false; - return true; - } - - protected void initSearch(Tile startNode, Tile endNode) { - - // Increment the search id - if (++searchId < 0) searchId = 1; - - // Initialize the open list - openList.clear(); - - // Initialize the record for the start node and add it to the open list - NodeRecord startRecord = getNodeRecord(startNode); - startRecord.node = startNode; - //startRecord.connection = null; - startRecord.costSoFar = 0; - addToOpenList(startRecord, estimate(startNode, endNode)); - - current = null; - } - - protected void visitChildren(Tile endNode) { - if(debug) Effects.effect(Fx.node3, current.node.worldx(), current.node.worldy()); - - nodes(current.node, node -> { - float addCost = estimate(current.node, node); - - float nodeCost = current.costSoFar + addCost; - - float nodeHeuristic; - NodeRecord nodeRecord = getNodeRecord(node); - - if (nodeRecord.category == CLOSED) { // The node is closed - - // If we didn't find a shorter route, skip - if (nodeRecord.costSoFar <= nodeCost){ - return; - } - - // We can use the node's old cost values to calculate its heuristic - // without calling the possibly expensive heuristic function - nodeHeuristic = nodeRecord.getEstimatedTotalCost() - nodeRecord.costSoFar; - } else if (nodeRecord.category == OPEN) { // The node is open - - //If our route is no better, then skip - if (nodeRecord.costSoFar <= nodeCost){ - return; - } - - // Remove it from the open list (it will be re-added with the new cost) - openList.remove(nodeRecord); - - // We can use the node's old cost values to calculate its heuristic - // without calling the possibly expensive heuristic function - nodeHeuristic = nodeRecord.getEstimatedTotalCost() - nodeRecord.costSoFar; - } else { // the node is unvisited - - // We'll need to calculate the heuristic value using the function, - // since we don't have a node record with a previously calculated value - nodeHeuristic = estimate(node, endNode); - } - - // Update node record's cost and connection - nodeRecord.costSoFar = nodeCost; - nodeRecord.from = current.node; - - // Add it to the open list with the estimated total cost - addToOpenList(nodeRecord, nodeCost + nodeHeuristic); - }); - } - - protected void nodes(Tile current, Consumer cons){ - if(obstacle(current)) return; - for(int i = 0; i < 4; i ++){ - Tile n = current.getNearby(i); - if(!obstacle(n)) cons.accept(n); - } - } - - protected void jps(Tile current, int direction, Tile end, Consumer cons){ - if(obstacle(current)) return; //skip solid or off-the-screen stuff - - //if there's no start point, scan everything. - if(direction == -1){ - for(int i = 0; i < 8; i ++){ - jps(current.getNearby(Geometry.d8[i]), i, end, cons); - } - return; - } - - if(direction % 2 == 0){ - //forced neighbor in the straight pattern - if(obstacle(rel(current, direction + 2)) && !obstacle(rel(current, direction + 1))){ - cons.accept(rel(current, direction + 1)); - } - - if(obstacle(rel(current, direction - 2)) && !obstacle(rel(current, direction - 1))){ - cons.accept(rel(current, direction - 1)); - } - }else{ //moving diagonal - //forced neighbor in the diagonal pattern - if(obstacle(rel(current, direction + 3)) && !obstacle(rel(current, direction + 2)) && !obstacle(rel(current, direction -2))) { - cons.accept(rel(current, direction + 2)); - } - - if(obstacle(rel(current, direction - 3)) && !obstacle(rel(current, direction - 2))&& !obstacle(rel(current, direction + 2))){ - cons.accept(rel(current, direction - 2)); - } - } - - while(!obstacle(current) && !trap(current, direction)){ - if(debug) Effects.effect(Fx.node1, current.worldx(), current.worldy()); - //moving straight - if(direction % 2 == 0){ - Tile sf = scanDir(rel(current, direction), end, direction); //check if there's anything of interest going straight - if(sf != null){ //if there is, jump to that location immediately and stop. else, nothing must be there, end. - cons.accept(sf); - } - return; - }else{ //moving diagonal - Tile sl = scanDir(rel(current, Mathf.mod(direction - 1, 8)), end, Mathf.mod(direction - 1, 8)); - - if(sl != null){ - cons.accept(sl); - } - - Tile sr = scanDir(rel(current, Mathf.mod(direction + 1, 8)), end, Mathf.mod(direction + 1, 8)); - - if(sr != null){ - cons.accept(sr); - } - - Tile sf = scanDir(rel(current, direction), end, direction); - - if(sf != null){ - cons.accept(sf); - return; - } - } - - if(current == end){ - cons.accept(end); - return; - } - - current = rel(current, direction); - } - } - - protected boolean trap(Tile tile, int direction){ - return direction % 2 == 1 && obstacle(rel(tile, direction - 1)) && obstacle(rel(tile, direction + 1)); - } - - protected Tile scanDir(Tile tile, Tile end, int direction){ - while(!obstacle(tile)){ - if(debug) Effects.effect(Fx.node2, tile.worldx(), tile.worldy()); - if(tile == end) return tile; - if(direction % 2 == 0){ - - //forced neighbor in the straight pattern - if((obstacle(rel(tile, direction + 2)) && !obstacle(rel(tile, direction + 1))) || - (obstacle(rel(tile, direction - 2)) && !obstacle(rel(tile, direction - 1)))){ - //Log.info("Found forced linear neighbor {0} {1} // {2}", tile.x, tile.y, direction); - if(debug) Effects.effect(Fx.node4, tile.worldx(), tile.worldy()); - return tile; - } - }else{ //moving diagonal - //forced neighbor in the diagonal pattern, end here - if((obstacle(rel(tile, direction + 3)) && !obstacle(rel(tile, direction + 2)) && !obstacle(rel(tile, direction - 2))) || - (obstacle(rel(tile, direction - 3)) && !obstacle(rel(tile, direction - 2)) && !obstacle(rel(tile, direction + 2)))) { - if(debug) Effects.effect(Fx.node4, tile.worldx(), tile.worldy()); - //Log.info("Found forced diagonal neighbor {0} {1} // {2}", tile.x, tile.y, direction); - return tile; - }else{ - return null; - } - } - Tile next = rel(tile, direction); - if(obstacle(next)) break; - tile = next; - } - return null; - } - - protected Tile rel(Tile tile, int i){ - return tile.getNearby(Geometry.d8[Mathf.mod(i, 8)]); - } - - protected boolean obstacle(Tile tile){ - return tile == null || (tile.solid() && end.target() != tile && tile.target() != end); - } - - protected float estimate(Tile tile, Tile other){ - return Math.abs(tile.worldx() - other.worldx()) + Math.abs(tile.worldy() - other.worldy()) +0; - // (tile.occluded ? tilesize : 0) + (other.occluded ? tilesize : 0); - } - - protected int relDirection(Tile from, Tile current){ - if(from.y == current.y && from.x > current.x) return 0; - if(from.y == current.y && from.x < current.x) return 4; - if(from.x == current.x && from.y > current.y) return 2; - if(from.x == current.x && from.y < current.y) return 6; - - if(from.y > current.y && from.x > current.x) return 1; - if(from.y < current.y && from.x < current.x) return 5; - if(from.x > current.x && from.y < current.y) return 7; - if(from.x < current.x && from.y > current.y) return 3; - return -1; - } - - protected void generateNodePath(Tile startNode, GraphPath outPath) { - - // Work back along the path, accumulating nodes - // outPath.clear(); - while (current.from != null) { - outPath.add(current.node); - current = records.get(indexOf(current.from)); - } - outPath.add(startNode); - - // Reverse the path - outPath.reverse(); - } - - protected void addToOpenList(NodeRecord nodeRecord, float estimatedTotalCost) { - openList.add(nodeRecord, estimatedTotalCost); - nodeRecord.category = OPEN; - } - - protected NodeRecord getNodeRecord(Tile node) { - if(!records.containsKey(indexOf(node))){ - NodeRecord record = new NodeRecord(); - record.node = node; - record.searchId = searchId; - records.put(indexOf(node), record); - return record; - }else{ - NodeRecord record = records.get(indexOf(node)); - if(record.searchId != searchId){ - record.category = UNVISITED; - record.searchId = searchId; - } - return record; - } - } - - private int indexOf(Tile node){ - return node.packedPosition(); - } - - static class NodeRecord extends BinaryHeap.Node { - Tile node; - Tile from; - - float costSoFar; - byte category; - - int searchId; - - public NodeRecord() { - super(0); - } - - public float getEstimatedTotalCost() { - return getValue(); - } - } -} diff --git a/core/src/io/anuke/mindustry/ai/Raycaster.java b/core/src/io/anuke/mindustry/ai/Raycaster.java deleted file mode 100644 index 6ce48805e0..0000000000 --- a/core/src/io/anuke/mindustry/ai/Raycaster.java +++ /dev/null @@ -1,87 +0,0 @@ -package io.anuke.mindustry.ai; - -import com.badlogic.gdx.ai.utils.Collision; -import com.badlogic.gdx.ai.utils.Ray; -import com.badlogic.gdx.ai.utils.RaycastCollisionDetector; -import com.badlogic.gdx.math.Vector2; -import io.anuke.mindustry.world.Tile; -import io.anuke.ucore.util.Geometry; -import io.anuke.ucore.util.Mathf; - -import static io.anuke.mindustry.Vars.tilesize; -import static io.anuke.mindustry.Vars.world; - -public class Raycaster implements RaycastCollisionDetector{ - private boolean found = false; - - @Override - public boolean collides(Ray ray){ - found = false; - - Geometry.iterateLine(0f, ray.start.x, ray.start.y, ray.end.x, ray.end.y, tilesize, (x, y)->{ - if(solid(x, y)){ - found = true; - return; - } - }); - - return found; - } - - @Override - public boolean findCollision(Collision collision, Ray ray){ - Vector2 v = vectorCast(ray.start.x, ray.start.y, ray.end.x, ray.end.y); - if(v == null) return false; - collision.point = v; - collision.normal = v.nor(); - return true; - } - - Vector2 vectorCast(float x0f, float y0f, float x1f, float y1f){ - int x0 = (int)x0f; - int y0 = (int)y0f; - int x1 = (int)x1f; - int y1 = (int)y1f; - int dx = Math.abs(x1 - x0); - int dy = Math.abs(y1 - y0); - - int sx = x0 < x1 ? 1 : -1; - int sy = y0 < y1 ? 1 : -1; - - int err = dx - dy; - int e2; - while(true){ - - if(solid(x0, y0)){ - return new Vector2(x0, y0); - } - if(x0 == x1 && y0 == y1) break; - - e2 = 2 * err; - if(e2 > -dy){ - err = err - dy; - x0 = x0 + sx; - } - - if(e2 < dx){ - err = err + dx; - y0 = y0 + sy; - } - } - return null; - } - - private boolean solid(float x, float y){ - Tile tile = world.tile(Mathf.scl2(x, tilesize), Mathf.scl2(y, tilesize)); - - if(tile == null || tile.solid()) return true; - - for(int i = 0; i < 4; i ++){ - Tile near = tile.getNearby(i); - if(near == null || near.solid()) return true; - } - - return false; - } - -} diff --git a/core/src/io/anuke/mindustry/ai/SmoothGraphPath.java b/core/src/io/anuke/mindustry/ai/SmoothGraphPath.java deleted file mode 100644 index 39b1b75ec2..0000000000 --- a/core/src/io/anuke/mindustry/ai/SmoothGraphPath.java +++ /dev/null @@ -1,32 +0,0 @@ -package io.anuke.mindustry.ai; - -import com.badlogic.gdx.ai.pfa.DefaultGraphPath; -import com.badlogic.gdx.ai.pfa.SmoothableGraphPath; -import com.badlogic.gdx.math.Vector2; -import io.anuke.mindustry.world.Tile; - -public class SmoothGraphPath extends DefaultGraphPath implements SmoothableGraphPath{ - private Vector2 vector = new Vector2(); - - @Override - public Vector2 getNodePosition(int index){ - Tile tile = nodes.get(index); - return vector.set(tile.worldx(), tile.worldy()); - } - - @Override - public void swapNodes(int index1, int index2){ - nodes.swap(index1, index2); - } - - @Override - public void truncatePath(int newLength){ - nodes.truncate(newLength); - } - - @Override - public void add (Tile node) { - nodes.add(node); - } - -} diff --git a/core/src/io/anuke/mindustry/ai/TileGraph.java b/core/src/io/anuke/mindustry/ai/TileGraph.java deleted file mode 100644 index c4026d6ec7..0000000000 --- a/core/src/io/anuke/mindustry/ai/TileGraph.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.anuke.mindustry.ai; - -import io.anuke.mindustry.world.Tile; - -/**Tilegraph that ignores player-made tiles.*/ -public class TileGraph implements OptimizedGraph { - private Tile[] tiles = new Tile[4]; - - /**Used for the OptimizedPathFinder implementation.*/ - @Override - public Tile[] connectionsOf(Tile node){ - Tile[] nodes = node.getNearby(tiles); - for(int i = 0; i < 4; i ++){ - if(nodes[i] != null && !nodes[i].passable()){ - nodes[i] = null; - } - } - return nodes; - } - - @Override - public int getIndex(Tile node){ - return node.packedPosition(); - } -} diff --git a/core/src/io/anuke/mindustry/content/AmmoTypes.java b/core/src/io/anuke/mindustry/content/AmmoTypes.java index f127240bef..5983a10391 100644 --- a/core/src/io/anuke/mindustry/content/AmmoTypes.java +++ b/core/src/io/anuke/mindustry/content/AmmoTypes.java @@ -2,7 +2,7 @@ package io.anuke.mindustry.content; import io.anuke.mindustry.content.bullets.TurretBullets; import io.anuke.mindustry.content.fx.ShootFx; -import io.anuke.mindustry.resource.AmmoType; +import io.anuke.mindustry.type.AmmoType; public class AmmoTypes { public static final AmmoType diff --git a/core/src/io/anuke/mindustry/content/Items.java b/core/src/io/anuke/mindustry/content/Items.java index e1e69ba949..3bc1945643 100644 --- a/core/src/io/anuke/mindustry/content/Items.java +++ b/core/src/io/anuke/mindustry/content/Items.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.content; import com.badlogic.gdx.graphics.Color; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; public class Items { public static final Item diff --git a/core/src/io/anuke/mindustry/content/Liquids.java b/core/src/io/anuke/mindustry/content/Liquids.java index f841d6bfce..8a74d5beaf 100644 --- a/core/src/io/anuke/mindustry/content/Liquids.java +++ b/core/src/io/anuke/mindustry/content/Liquids.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.content; import com.badlogic.gdx.graphics.Color; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Liquid; public class Liquids { diff --git a/core/src/io/anuke/mindustry/content/Mechs.java b/core/src/io/anuke/mindustry/content/Mechs.java index 8653a6e0d1..f758e4c13d 100644 --- a/core/src/io/anuke/mindustry/content/Mechs.java +++ b/core/src/io/anuke/mindustry/content/Mechs.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.content; -import io.anuke.mindustry.resource.Mech; +import io.anuke.mindustry.type.Mech; public class Mechs { public static final Mech diff --git a/core/src/io/anuke/mindustry/content/Recipes.java b/core/src/io/anuke/mindustry/content/Recipes.java index 3aacb01132..2180561285 100644 --- a/core/src/io/anuke/mindustry/content/Recipes.java +++ b/core/src/io/anuke/mindustry/content/Recipes.java @@ -1,9 +1,9 @@ package io.anuke.mindustry.content; import io.anuke.mindustry.content.blocks.*; -import io.anuke.mindustry.resource.ItemStack; -import io.anuke.mindustry.resource.Recipe; -import static io.anuke.mindustry.resource.Section.*; +import io.anuke.mindustry.type.ItemStack; +import io.anuke.mindustry.type.Recipe; +import static io.anuke.mindustry.type.Section.*; public class Recipes { static { diff --git a/core/src/io/anuke/mindustry/content/UpgradeRecipes.java b/core/src/io/anuke/mindustry/content/UpgradeRecipes.java index 5d6e681477..bfaf3309eb 100644 --- a/core/src/io/anuke/mindustry/content/UpgradeRecipes.java +++ b/core/src/io/anuke/mindustry/content/UpgradeRecipes.java @@ -2,9 +2,9 @@ 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.mindustry.type.Item; +import io.anuke.mindustry.type.ItemStack; +import io.anuke.mindustry.type.Upgrade; import io.anuke.ucore.util.Mathf; public class UpgradeRecipes { diff --git a/core/src/io/anuke/mindustry/content/Weapons.java b/core/src/io/anuke/mindustry/content/Weapons.java index 28248934d7..1b7b89dc83 100644 --- a/core/src/io/anuke/mindustry/content/Weapons.java +++ b/core/src/io/anuke/mindustry/content/Weapons.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.content; import io.anuke.mindustry.content.fx.ShootFx; -import io.anuke.mindustry.resource.Weapon; +import io.anuke.mindustry.type.Weapon; public class Weapons { public static final Weapon diff --git a/core/src/io/anuke/mindustry/content/blocks/Blocks.java b/core/src/io/anuke/mindustry/content/blocks/Blocks.java index da39825cef..37b4059e7d 100644 --- a/core/src/io/anuke/mindustry/content/blocks/Blocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/Blocks.java @@ -5,7 +5,7 @@ import io.anuke.mindustry.content.Items; import io.anuke.mindustry.content.Liquids; import io.anuke.mindustry.content.StatusEffects; import io.anuke.mindustry.graphics.CacheLayer; -import io.anuke.mindustry.resource.ItemStack; +import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.*; diff --git a/core/src/io/anuke/mindustry/content/blocks/CraftingBlocks.java b/core/src/io/anuke/mindustry/content/blocks/CraftingBlocks.java index ede38dc179..5de9433d19 100644 --- a/core/src/io/anuke/mindustry/content/blocks/CraftingBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/CraftingBlocks.java @@ -4,8 +4,8 @@ import com.badlogic.gdx.graphics.Color; import io.anuke.mindustry.content.Items; import io.anuke.mindustry.content.Liquids; import io.anuke.mindustry.content.fx.BlockFx; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.ItemStack; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.blocks.types.production.*; diff --git a/core/src/io/anuke/mindustry/content/blocks/DebugBlocks.java b/core/src/io/anuke/mindustry/content/blocks/DebugBlocks.java index f2d083a298..f429a75406 100644 --- a/core/src/io/anuke/mindustry/content/blocks/DebugBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/DebugBlocks.java @@ -3,8 +3,8 @@ package io.anuke.mindustry.content.blocks; 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; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.PowerBlock; diff --git a/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java b/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java index a306003dbf..85c57ab858 100644 --- a/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java @@ -2,7 +2,7 @@ package io.anuke.mindustry.content.blocks; import io.anuke.mindustry.content.Items; import io.anuke.mindustry.content.UnitTypes; -import io.anuke.mindustry.resource.ItemStack; +import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.blocks.types.units.RepairPoint; import io.anuke.mindustry.world.blocks.types.units.ResupplyPoint; diff --git a/core/src/io/anuke/mindustry/content/blocks/WeaponBlocks.java b/core/src/io/anuke/mindustry/content/blocks/WeaponBlocks.java index 975b5e5c8b..ab3a27a60e 100644 --- a/core/src/io/anuke/mindustry/content/blocks/WeaponBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/WeaponBlocks.java @@ -3,7 +3,7 @@ package io.anuke.mindustry.content.blocks; import com.badlogic.gdx.graphics.Color; import io.anuke.mindustry.content.AmmoTypes; import io.anuke.mindustry.content.fx.ShootFx; -import io.anuke.mindustry.resource.AmmoType; +import io.anuke.mindustry.type.AmmoType; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.blocks.types.defense.Turret; import io.anuke.mindustry.world.blocks.types.defense.turrets.*; diff --git a/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java b/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java index 5a80dbb4bd..ac84d2b9e6 100644 --- a/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java +++ b/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java @@ -14,7 +14,7 @@ import io.anuke.mindustry.entities.effect.Fire; import io.anuke.mindustry.entities.effect.Lightning; import io.anuke.mindustry.entities.effect.Puddle; import io.anuke.mindustry.graphics.Palette; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Timers; diff --git a/core/src/io/anuke/mindustry/core/ContentLoader.java b/core/src/io/anuke/mindustry/core/ContentLoader.java index 8a3c24c6e1..e3c1c120dc 100644 --- a/core/src/io/anuke/mindustry/core/ContentLoader.java +++ b/core/src/io/anuke/mindustry/core/ContentLoader.java @@ -4,7 +4,7 @@ import io.anuke.mindustry.content.*; import io.anuke.mindustry.content.blocks.*; import io.anuke.mindustry.entities.StatusEffect; import io.anuke.mindustry.entities.units.UnitType; -import io.anuke.mindustry.resource.*; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Block; import io.anuke.ucore.util.Log; @@ -59,8 +59,8 @@ public class ContentLoader { Log.info("--- CONTENT INFO ---"); Log.info("Blocks loaded: {0}\nItems loaded: {1}\nLiquids loaded: {2}\nUpgrades loaded: {3}\nUnits loaded: {4}\nAmmo types loaded: {5}\nStatus effects loaded: {6}\nRecipes loaded: {7}\nTotal content classes: {8}", - Block.getAllBlocks().size, Item.getAllItems().size, Liquid.getAllLiquids().size, - Mech.getAllUpgrades().size, UnitType.getAllTypes().size, AmmoType.getAllTypes().size, StatusEffect.getAllEffects().size, Recipe.getAllRecipes().size, content.length); + Block.getAllBlocks().size, io.anuke.mindustry.type.Item.getAllItems().size, Liquid.getAllLiquids().size, + io.anuke.mindustry.type.Mech.getAllUpgrades().size, UnitType.getAllTypes().size, io.anuke.mindustry.type.AmmoType.getAllTypes().size, StatusEffect.getAllEffects().size, io.anuke.mindustry.type.Recipe.getAllRecipes().size, content.length); Log.info("-------------------"); } diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 5a17ad4c16..351d9c0680 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -18,7 +18,7 @@ import io.anuke.mindustry.io.Map; 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.type.Item; import io.anuke.ucore.core.*; import io.anuke.ucore.entities.Entities; import io.anuke.ucore.input.InputProxy; diff --git a/core/src/io/anuke/mindustry/core/Logic.java b/core/src/io/anuke/mindustry/core/Logic.java index 5bb0181d14..a4212bea16 100644 --- a/core/src/io/anuke/mindustry/core/Logic.java +++ b/core/src/io/anuke/mindustry/core/Logic.java @@ -11,6 +11,8 @@ 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.mindustry.type.Item; +import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Events; import io.anuke.ucore.core.Timers; import io.anuke.ucore.entities.Entities; @@ -42,6 +44,14 @@ public class Logic extends Module { public void play(){ state.wavetime = wavespace * state.difficulty.timeScaling * 2; + for(Tile tile : state.teams.get(players[0].team).cores){ + for(Item item : Item.getAllItems()){ + if(item.material){ + tile.entity.items.addItem(item, 1000); + } + } + } + Events.fire(PlayEvent.class); } diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/io/anuke/mindustry/core/NetClient.java index 424c75e5be..a2897dd23d 100644 --- a/core/src/io/anuke/mindustry/core/NetClient.java +++ b/core/src/io/anuke/mindustry/core/NetClient.java @@ -13,9 +13,9 @@ import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Net.SendMode; import io.anuke.mindustry.net.NetworkIO; import io.anuke.mindustry.net.Packets.*; -import io.anuke.mindustry.resource.Recipe; -import io.anuke.mindustry.resource.Upgrade; -import io.anuke.mindustry.resource.Weapon; +import io.anuke.mindustry.type.Recipe; +import io.anuke.mindustry.type.Upgrade; +import io.anuke.mindustry.type.Weapon; import io.anuke.mindustry.world.Build; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Effects; diff --git a/core/src/io/anuke/mindustry/core/NetCommon.java b/core/src/io/anuke/mindustry/core/NetCommon.java index 32b2f7b7d6..8396f2719d 100644 --- a/core/src/io/anuke/mindustry/core/NetCommon.java +++ b/core/src/io/anuke/mindustry/core/NetCommon.java @@ -7,7 +7,7 @@ import io.anuke.mindustry.net.Packets.BlockConfigPacket; import io.anuke.mindustry.net.Packets.BlockTapPacket; import io.anuke.mindustry.net.Packets.ChatPacket; import io.anuke.mindustry.net.Packets.WeaponSwitchPacket; -import io.anuke.mindustry.resource.Upgrade; +import io.anuke.mindustry.type.Upgrade; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.modules.Module; diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index 0a39b43a41..33d3e529a0 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -16,9 +16,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.Recipe; -import io.anuke.mindustry.resource.Upgrade; -import io.anuke.mindustry.resource.Weapon; +import io.anuke.mindustry.type.Recipe; +import io.anuke.mindustry.type.Upgrade; +import io.anuke.mindustry.type.Weapon; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Build; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/entities/BlockBuilder.java b/core/src/io/anuke/mindustry/entities/BlockBuilder.java index dfb9f58714..92e1d3bf7a 100644 --- a/core/src/io/anuke/mindustry/entities/BlockBuilder.java +++ b/core/src/io/anuke/mindustry/entities/BlockBuilder.java @@ -2,7 +2,7 @@ package io.anuke.mindustry.entities; import com.badlogic.gdx.utils.Queue; import io.anuke.mindustry.Vars; -import io.anuke.mindustry.resource.Recipe; +import io.anuke.mindustry.type.Recipe; import io.anuke.mindustry.world.Build; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.BuildBlock; @@ -76,10 +76,17 @@ public interface BlockBuilder { getPlaceQueue().removeFirst(); } }else{ + TileEntity core = unit.getClosestCore(); + + //if there is no core to build with, stop building! + if(core == null){ + return; + } + //otherwise, update it. BuildEntity entity = tile.entity(); - entity.progress += 1f / entity.recipe.cost; + entity.addProgress(core.items, 1f / entity.recipe.cost); unit.rotation = Mathf.slerpDelta(unit.rotation, unit.angleTo(entity), 0.4f); } } diff --git a/core/src/io/anuke/mindustry/entities/ItemAnimationEffect.java b/core/src/io/anuke/mindustry/entities/ItemAnimationEffect.java deleted file mode 100644 index fded944215..0000000000 --- a/core/src/io/anuke/mindustry/entities/ItemAnimationEffect.java +++ /dev/null @@ -1,62 +0,0 @@ -package io.anuke.mindustry.entities; - -import com.badlogic.gdx.math.Interpolation; -import com.badlogic.gdx.math.Vector2; -import io.anuke.mindustry.Vars; -import io.anuke.mindustry.resource.Item; -import io.anuke.ucore.entities.Entity; -import io.anuke.ucore.entities.TimedEntity; -import io.anuke.ucore.function.Callable; -import io.anuke.ucore.graphics.Draw; -import io.anuke.ucore.util.Mathf; - -/**This class should not be used anymore, as the animation does not fit the style well.*/ -@Deprecated -public class ItemAnimationEffect extends TimedEntity { - private static final float size = 5f; - - private final Vector2 vec = new Vector2(); - private final Vector2 from = new Vector2(); - private final Vector2 to = new Vector2(); - private final Item item; - private final Callable removed; - - public Interpolation interp = Interpolation.fade; - public float endSize = 0.9f; - - public ItemAnimationEffect(Item item, float x, float y, float tox, float toy, Callable removed) { - this.x = x; - this.y = y; - this.item = item; - this.removed = removed; - from.set(x, y); - to.set(tox, toy); - lifetime = 40f; - } - - @Override - public void removed() { - super.removed(); - removed.run(); - } - - @Override - public void update() { - super.update(); - - vec.set(from).interpolate(to, fin(), interp); - x = vec.x; - y = vec.y; - } - - @Override - public void draw() { - float s = size * (1f-Mathf.curve(fin(), endSize)); - Draw.rect(item.region, x, y, s, s); - } - - @Override - public T add() { - return super.add(Vars.effectGroup); - } -} diff --git a/core/src/io/anuke/mindustry/entities/ItemTransfer.java b/core/src/io/anuke/mindustry/entities/ItemTransfer.java new file mode 100644 index 0000000000..21f23e4ac2 --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/ItemTransfer.java @@ -0,0 +1,37 @@ +package io.anuke.mindustry.entities; + +import io.anuke.mindustry.Vars; +import io.anuke.mindustry.type.Item; +import io.anuke.ucore.entities.Entity; +import io.anuke.ucore.entities.TimedEntity; +import io.anuke.ucore.function.Callable; + +public class ItemTransfer extends TimedEntity { + + + public static void create(Item item, float fromx, float fromy, float tox, float toy, Callable done){ + + } + + private ItemTransfer(){} + + @Override + public void removed() { + super.removed(); + } + + @Override + public void update() { + super.update(); + } + + @Override + public void draw() { + + } + + @Override + public T add() { + return super.add(Vars.effectGroup); + } +} diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index f04edbebf1..8b465ca6be 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -14,7 +14,10 @@ import io.anuke.mindustry.game.Team; import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.NetEvents; -import io.anuke.mindustry.resource.*; +import io.anuke.mindustry.type.ItemStack; +import io.anuke.mindustry.type.Mech; +import io.anuke.mindustry.type.Upgrade; +import io.anuke.mindustry.type.Weapon; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.Floor; import io.anuke.ucore.core.*; @@ -375,12 +378,12 @@ public class Player extends Unit implements BlockBuilder { } @Override - public boolean acceptsAmmo(Item item) { + public boolean acceptsAmmo(io.anuke.mindustry.type.Item item) { return weapon.getAmmoType(item) != null && inventory.canAcceptAmmo(weapon.getAmmoType(item)); } @Override - public void addAmmo(Item item) { + public void addAmmo(io.anuke.mindustry.type.Item item) { inventory.addAmmo(weapon.getAmmoType(item)); } diff --git a/core/src/io/anuke/mindustry/entities/StatusEffect.java b/core/src/io/anuke/mindustry/entities/StatusEffect.java index c698adda8e..3e038e63f3 100644 --- a/core/src/io/anuke/mindustry/entities/StatusEffect.java +++ b/core/src/io/anuke/mindustry/entities/StatusEffect.java @@ -8,10 +8,13 @@ public class StatusEffect{ private static final Array array = new Array<>(); private static int lastid; + /**Duration of this status effect in ticks at maximum power.*/ public final float baseDuration; public final int id; + /**Set of 'opposite' effects, which will decrease the duration of this effect when applied.*/ protected ObjectSet opposites = new ObjectSet<>(); + /**The strength of time decrease when met with an opposite effect, as a fraction of the other's duration.*/ protected float oppositeScale = 0.5f; public StatusEffect(float baseDuration){ diff --git a/core/src/io/anuke/mindustry/entities/SyncEntity.java b/core/src/io/anuke/mindustry/entities/SyncEntity.java index 2c8c5f536c..d86f7b4719 100644 --- a/core/src/io/anuke/mindustry/entities/SyncEntity.java +++ b/core/src/io/anuke/mindustry/entities/SyncEntity.java @@ -115,7 +115,6 @@ public abstract class SyncEntity extends DestructibleEntity{ } public void update(){ - //TODO prevent rubberbanding from getting too bad, clamp values? time += 1f / spacing * Math.min(Timers.delta(), 1f); diff --git a/core/src/io/anuke/mindustry/entities/Unit.java b/core/src/io/anuke/mindustry/entities/Unit.java index ad369c166e..fdd5d8820f 100644 --- a/core/src/io/anuke/mindustry/entities/Unit.java +++ b/core/src/io/anuke/mindustry/entities/Unit.java @@ -3,12 +3,14 @@ package io.anuke.mindustry.entities; import com.badlogic.gdx.math.Vector2; import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.game.TeamInfo.TeamData; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.Floor; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Timers; import io.anuke.ucore.entities.SolidEntity; +import io.anuke.ucore.util.Geometry; import io.anuke.ucore.util.Mathf; import java.io.DataInputStream; @@ -76,6 +78,21 @@ public abstract class Unit extends SyncEntity implements SerializableEntity { this.status.set(StatusEffect.getByID(effect), etime); } + public TileEntity getClosestCore(){ + if(state.teams.has(team)){ + TeamData data = state.teams.get(team); + + Tile tile = Geometry.findClosest(x, y, data.cores); + if(tile == null){ + return null; + }else{ + return tile.entity; + } + }else{ + return null; + } + } + public Floor getFloorOn(){ Tile tile = world.tileWorld(x, y); return (Floor)(tile == null || (tile.floor() == null) ? Blocks.defaultFloor : tile.floor()); diff --git a/core/src/io/anuke/mindustry/entities/UnitInventory.java b/core/src/io/anuke/mindustry/entities/UnitInventory.java index 2690fc6adc..807c2fdcac 100644 --- a/core/src/io/anuke/mindustry/entities/UnitInventory.java +++ b/core/src/io/anuke/mindustry/entities/UnitInventory.java @@ -1,10 +1,10 @@ package io.anuke.mindustry.entities; import com.badlogic.gdx.utils.Array; -import io.anuke.mindustry.resource.AmmoEntry; -import io.anuke.mindustry.resource.AmmoType; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.ItemStack; +import io.anuke.mindustry.type.AmmoEntry; +import io.anuke.mindustry.type.AmmoType; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.ItemStack; import java.io.DataInputStream; import java.io.DataOutputStream; diff --git a/core/src/io/anuke/mindustry/entities/Units.java b/core/src/io/anuke/mindustry/entities/Units.java index 3c0b76c1c8..4c212550bb 100644 --- a/core/src/io/anuke/mindustry/entities/Units.java +++ b/core/src/io/anuke/mindustry/entities/Units.java @@ -19,14 +19,17 @@ import static io.anuke.mindustry.Vars.*; public class Units { private static Rectangle rect = new Rectangle(); + /**Returns the neareset ally tile in a range.*/ public static TileEntity findAllyTile(Team team, float x, float y, float range, Predicate pred){ return findTile(x, y, range, tile -> !state.teams.areEnemies(team, tile.getTeam()) && pred.test(tile)); } + /**Returns the neareset enemy tile in a range.*/ public static TileEntity findEnemyTile(Team team, float x, float y, float range, Predicate pred){ return findTile(x, y, range, tile -> state.teams.areEnemies(team, tile.getTeam()) && pred.test(tile)); } + /**Returns the neareset tile entity in a range.*/ public static TileEntity findTile(float x, float y, float range, Predicate pred){ Entity closest = null; float dst = 0; diff --git a/core/src/io/anuke/mindustry/entities/effect/BelowLiquidEffect.java b/core/src/io/anuke/mindustry/entities/effect/BelowLiquidEffect.java index afec58633f..9fdb754c87 100644 --- a/core/src/io/anuke/mindustry/entities/effect/BelowLiquidEffect.java +++ b/core/src/io/anuke/mindustry/entities/effect/BelowLiquidEffect.java @@ -1,4 +1,5 @@ package io.anuke.mindustry.entities.effect; +/**A flag interface for marking an effect as appearing below liquids.*/ public interface BelowLiquidEffect { } diff --git a/core/src/io/anuke/mindustry/entities/effect/DamageArea.java b/core/src/io/anuke/mindustry/entities/effect/DamageArea.java index 3e5bbb331d..6d78e714b9 100644 --- a/core/src/io/anuke/mindustry/entities/effect/DamageArea.java +++ b/core/src/io/anuke/mindustry/entities/effect/DamageArea.java @@ -23,10 +23,12 @@ import io.anuke.ucore.util.Translator; import static io.anuke.mindustry.Vars.*; +/**Utility class for damaging in an area.*/ public class DamageArea{ private static Rectangle rect = new Rectangle(); private static Translator tr = new Translator(); + /**Creates a dynamic explosion based on specified parameters.*/ public static void dynamicExplosion(float x, float y, float flammability, float explosiveness, float power, float radius, Color color){ for(int i = 0; i < Mathf.clamp(power / 20, 0, 6); i ++){ int branches = 5 + Mathf.clamp((int)(power/30), 1, 20); diff --git a/core/src/io/anuke/mindustry/entities/effect/GroundEffectEntity.java b/core/src/io/anuke/mindustry/entities/effect/GroundEffectEntity.java index 2d230d7294..a6361ec66b 100644 --- a/core/src/io/anuke/mindustry/entities/effect/GroundEffectEntity.java +++ b/core/src/io/anuke/mindustry/entities/effect/GroundEffectEntity.java @@ -9,6 +9,7 @@ import io.anuke.ucore.entities.EffectEntity; import io.anuke.ucore.function.EffectRenderer; import io.anuke.ucore.util.Mathf; +/**A ground effect contains an effect that is rendered on the ground layer as opposed to the top layer.*/ public class GroundEffectEntity extends EffectEntity { private boolean once; @@ -52,8 +53,12 @@ public class GroundEffectEntity extends EffectEntity { once = false; } + /**An effect that is rendered on the ground layer as opposed to the top layer.*/ public static class GroundEffect extends Effect{ + /**How long this effect stays on the ground when static.*/ public final float staticLife; + /**If true, this effect will stop and lie on the ground for a specific duration, + * after its initial lifetime is over.*/ public final boolean isStatic; public GroundEffect(float life, float staticLife, EffectRenderer draw) { diff --git a/core/src/io/anuke/mindustry/entities/effect/Lightning.java b/core/src/io/anuke/mindustry/entities/effect/Lightning.java index df7500f5f4..49b550f65f 100644 --- a/core/src/io/anuke/mindustry/entities/effect/Lightning.java +++ b/core/src/io/anuke/mindustry/entities/effect/Lightning.java @@ -31,6 +31,7 @@ public class Lightning extends TimedEntity implements Poolable{ public Color color = Palette.lancerLaser; + /**Create a lighting branch at a location. Use Team.none to damage everyone.*/ public static void create(Team team, Effect effect, Color color, float damage, float x, float y, float targetAngle, int length){ Lightning l = Pools.obtain(Lightning.class); diff --git a/core/src/io/anuke/mindustry/entities/effect/Puddle.java b/core/src/io/anuke/mindustry/entities/effect/Puddle.java index 2249b181c4..081004b2b1 100644 --- a/core/src/io/anuke/mindustry/entities/effect/Puddle.java +++ b/core/src/io/anuke/mindustry/entities/effect/Puddle.java @@ -15,7 +15,7 @@ import io.anuke.mindustry.entities.Bullet; import io.anuke.mindustry.entities.SerializableEntity; import io.anuke.mindustry.entities.Units; import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Timers; diff --git a/core/src/io/anuke/mindustry/entities/effect/Rubble.java b/core/src/io/anuke/mindustry/entities/effect/Rubble.java index c840292cde..3cd542da03 100644 --- a/core/src/io/anuke/mindustry/entities/effect/Rubble.java +++ b/core/src/io/anuke/mindustry/entities/effect/Rubble.java @@ -7,10 +7,12 @@ import io.anuke.ucore.util.Mathf; import static io.anuke.mindustry.Vars.groundEffectGroup; +/**Class for creating block rubble on the ground.*/ public class Rubble extends TimedEntity implements BelowLiquidEffect{ private static final Color color = Color.valueOf("52504e"); private int size; + /**Creates a rubble effect at a position. Provide a block size to use.*/ public static void create(float x, float y, int size){ Rubble rubble = new Rubble(); rubble.size = size; diff --git a/core/src/io/anuke/mindustry/entities/effect/Shield.java b/core/src/io/anuke/mindustry/entities/effect/Shield.java index fd34aefc64..f6d263dac9 100644 --- a/core/src/io/anuke/mindustry/entities/effect/Shield.java +++ b/core/src/io/anuke/mindustry/entities/effect/Shield.java @@ -14,6 +14,7 @@ import io.anuke.ucore.util.Mathf; import static io.anuke.mindustry.Vars.bulletGroup; import static io.anuke.mindustry.Vars.shieldGroup; +//todo re-implement public class Shield extends Entity{ public boolean active; public boolean hitPlayers = false; diff --git a/core/src/io/anuke/mindustry/entities/units/BaseUnit.java b/core/src/io/anuke/mindustry/entities/units/BaseUnit.java index b2ff038e4f..5b76077339 100644 --- a/core/src/io/anuke/mindustry/entities/units/BaseUnit.java +++ b/core/src/io/anuke/mindustry/entities/units/BaseUnit.java @@ -5,7 +5,7 @@ import io.anuke.mindustry.entities.BulletType; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.BlockFlag; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Effects.Effect; diff --git a/core/src/io/anuke/mindustry/entities/units/FlyingUnitType.java b/core/src/io/anuke/mindustry/entities/units/FlyingUnitType.java index c4d615c19b..87671cb61d 100644 --- a/core/src/io/anuke/mindustry/entities/units/FlyingUnitType.java +++ b/core/src/io/anuke/mindustry/entities/units/FlyingUnitType.java @@ -3,7 +3,7 @@ package io.anuke.mindustry.entities.units; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.entities.Units; -import io.anuke.mindustry.resource.AmmoType; +import io.anuke.mindustry.type.AmmoType; import io.anuke.mindustry.world.BlockFlag; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Timers; diff --git a/core/src/io/anuke/mindustry/entities/units/GroundUnitType.java b/core/src/io/anuke/mindustry/entities/units/GroundUnitType.java index 00e9dd77c7..4ce4250912 100644 --- a/core/src/io/anuke/mindustry/entities/units/GroundUnitType.java +++ b/core/src/io/anuke/mindustry/entities/units/GroundUnitType.java @@ -1,13 +1,10 @@ package io.anuke.mindustry.entities.units; import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.utils.ObjectSet; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.entities.Units; -import io.anuke.mindustry.game.TeamInfo.TeamData; -import io.anuke.mindustry.resource.AmmoType; +import io.anuke.mindustry.type.AmmoType; import io.anuke.mindustry.world.BlockFlag; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.Floor; diff --git a/core/src/io/anuke/mindustry/entities/units/UnitType.java b/core/src/io/anuke/mindustry/entities/units/UnitType.java index 6710b20d84..ca451507dd 100644 --- a/core/src/io/anuke/mindustry/entities/units/UnitType.java +++ b/core/src/io/anuke/mindustry/entities/units/UnitType.java @@ -8,8 +8,8 @@ import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.NetEvents; -import io.anuke.mindustry.resource.AmmoType; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.AmmoType; +import io.anuke.mindustry.type.Item; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Timers; import io.anuke.ucore.util.Angles; diff --git a/core/src/io/anuke/mindustry/game/Inventory.java b/core/src/io/anuke/mindustry/game/Inventory.java deleted file mode 100644 index 4f78a476a9..0000000000 --- a/core/src/io/anuke/mindustry/game/Inventory.java +++ /dev/null @@ -1,96 +0,0 @@ -package io.anuke.mindustry.game; - -import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.ObjectSet; -import io.anuke.mindustry.content.Items; -import io.anuke.mindustry.game.TeamInfo.TeamData; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.ItemStack; -import io.anuke.mindustry.world.Tile; - -import java.util.Arrays; - -import static io.anuke.mindustry.Vars.debug; -import static io.anuke.mindustry.Vars.state; - -public class Inventory { - private final int[] empty = new int[Item.getAllItems().size]; - - public void clearItems(){ - Arrays.fill(items(), 0); - - if(debug){ - for(Item item : Item.getAllItems()){ - if(item.material) items()[item.id] = 99999; - } - }else{ - addItem(Items.iron, 40); - } - } - - public void fill(){ - Arrays.fill(items(), 999999999); - } - - public int getAmount(Item item){ - return items()[item.id]; - } - - public void addItem(Item item, int amount){ - items()[item.id] += amount; - } - - public boolean hasItems(ItemStack[] items){ - for(ItemStack stack : items) - if(!hasItem(stack)) - return false; - return true; - } - - public boolean hasItems(ItemStack[] items, int scaling){ - for(ItemStack stack : items) - if(!hasItem(stack.item, stack.amount * scaling)) - return false; - return true; - } - - public boolean hasItem(ItemStack req){ - return items()[req.item.id] >= req.amount; - } - - public boolean hasItem(Item item, int amount){ - return items()[item.id] >= amount; - } - - public void removeItem(ItemStack req){ - items()[req.item.id] -= req.amount; - if(items()[req.item.id] < 0) items()[req.item.id] = 0; //prevents negative item glitches in multiplayer - } - - public void removeItems(ItemStack... reqs){ - for(ItemStack req : reqs) - removeItem(req); - } - - public int[] writeItems(){ - return items(); - } - - public int[] readItems(){ - return items(); - } - - /* - public int[] getItems(){ - updated = true; - return items(); - }*/ - - private int[] items(){ - ObjectSet set = state.teams.getTeams(true); - if(set.size == 0) return empty; - Array tiles = set.first().cores; - if(tiles.size == 0) return empty; - return tiles.first().entity.items.items; - } -} diff --git a/core/src/io/anuke/mindustry/game/TeamInfo.java b/core/src/io/anuke/mindustry/game/TeamInfo.java index 7400363bdf..bb598f0f3d 100644 --- a/core/src/io/anuke/mindustry/game/TeamInfo.java +++ b/core/src/io/anuke/mindustry/game/TeamInfo.java @@ -18,10 +18,12 @@ public class TeamInfo { private ObjectSet allTeamData = new ObjectSet<>(); private ObjectSet allTeams = new ObjectSet<>(); + /**Returns all teams on a side.*/ public ObjectSet getTeams(boolean ally) { return ally ? allyData : enemyData; } + /**Returns all team data.*/ public ObjectSet getTeams() { return allTeamData; } diff --git a/core/src/io/anuke/mindustry/game/UpgradeInventory.java b/core/src/io/anuke/mindustry/game/UpgradeInventory.java deleted file mode 100644 index 62ca604c6e..0000000000 --- a/core/src/io/anuke/mindustry/game/UpgradeInventory.java +++ /dev/null @@ -1,26 +0,0 @@ -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 { - private final Array weapons = new Array<>(); - - public boolean hasWeapon(Weapon weapon){ - return weapons.contains(weapon, true); - } - - public void addWeapon(Weapon weapon){ - weapons.add(weapon); - } - - public Array getWeapons(){ - return weapons; - } - - public void reset(){ - weapons.clear(); - weapons.add(Weapons.blaster); - } -} diff --git a/core/src/io/anuke/mindustry/input/DesktopInput.java b/core/src/io/anuke/mindustry/input/DesktopInput.java index 68b2694708..9a63999aef 100644 --- a/core/src/io/anuke/mindustry/input/DesktopInput.java +++ b/core/src/io/anuke/mindustry/input/DesktopInput.java @@ -7,7 +7,7 @@ import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.NetEvents; -import io.anuke.mindustry.resource.Weapon; +import io.anuke.mindustry.type.Weapon; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.*; import io.anuke.ucore.core.Inputs.DeviceType; @@ -129,7 +129,7 @@ public class DesktopInput extends InputHandler{ droppingItem = false; } - if(recipe == null && target != null && !ui.hasMouse() && Inputs.keyDown(section,"block_info") && target.block().isAccessible()){ + if(recipe == null && target != null && !ui.hasMouse() && target.block().isAccessible()){ showCursor = true; if(Inputs.keyTap(section,"select")){ canBeginShoot = false; diff --git a/core/src/io/anuke/mindustry/input/InputHandler.java b/core/src/io/anuke/mindustry/input/InputHandler.java index 868b2f95ca..55447c166c 100644 --- a/core/src/io/anuke/mindustry/input/InputHandler.java +++ b/core/src/io/anuke/mindustry/input/InputHandler.java @@ -2,13 +2,12 @@ package io.anuke.mindustry.input; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.InputAdapter; -import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.math.Vector2; import io.anuke.mindustry.entities.BlockBuilder.BuildRequest; -import io.anuke.mindustry.entities.ItemAnimationEffect; +import io.anuke.mindustry.entities.ItemTransfer; import io.anuke.mindustry.entities.Player; -import io.anuke.mindustry.resource.ItemStack; -import io.anuke.mindustry.resource.Recipe; +import io.anuke.mindustry.type.ItemStack; +import io.anuke.mindustry.type.Recipe; import io.anuke.mindustry.ui.fragments.OverlayFragment; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Build; @@ -107,7 +106,7 @@ public abstract class InputHandler extends InputAdapter{ Timers.run(i * 3, () -> { tile.block().getStackOffset(stack.item, tile, stackTrns); - new ItemAnimationEffect(stack.item, + ItemTransfer.create(stack.item, player.x + Angles.trnsx(rotation + 180f, backTrns), player.y + Angles.trnsy(rotation + 180f, backTrns), tile.drawx() + stackTrns.x, tile.drawy() + stackTrns.y, () -> { @@ -117,7 +116,7 @@ public abstract class InputHandler extends InputAdapter{ if(end && remaining[1] > 0) { tile.block().handleStack(stack.item, remaining[1], tile, player); } - }).add(); + }); stack.amount -= removed; remaining[0] -= removed; @@ -130,6 +129,8 @@ public abstract class InputHandler extends InputAdapter{ }); } }else{ + //TODO create drop on the ground + /* Vector2 vec = Graphics.screen(player.x, player.y); if(vec.dst(Gdx.input.getX(), Gdx.graphics.getHeight() - Gdx.input.getY()) > playerSelectRange) { @@ -140,15 +141,12 @@ public abstract class InputHandler extends InputAdapter{ float x = player.x + Angles.trnsx(rotation + 180f, backTrns), y = player.y + Angles.trnsy(rotation + 180f, backTrns); - ItemAnimationEffect e = new ItemAnimationEffect(stack.item, - x, y, x + Mathf.range(20f), y + Mathf.range(20f), () -> {}).add(); - e.interp = Interpolation.pow3Out; - e.endSize = 0.5f; - e.lifetime = 20; + ItemTransfer.create(stack.item, + x, y, x + Mathf.range(20f), y + Mathf.range(20f), () -> {}); }); } player.inventory.clear(); - } + }*/ } } diff --git a/core/src/io/anuke/mindustry/net/NetEvents.java b/core/src/io/anuke/mindustry/net/NetEvents.java index da224bf696..040046ccff 100644 --- a/core/src/io/anuke/mindustry/net/NetEvents.java +++ b/core/src/io/anuke/mindustry/net/NetEvents.java @@ -10,8 +10,8 @@ import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.net.Net.SendMode; import io.anuke.mindustry.net.Packets.*; -import io.anuke.mindustry.resource.Recipe; -import io.anuke.mindustry.resource.Upgrade; +import io.anuke.mindustry.type.Recipe; +import io.anuke.mindustry.type.Upgrade; import io.anuke.mindustry.world.Tile; import static io.anuke.mindustry.Vars.*; diff --git a/core/src/io/anuke/mindustry/net/NetworkIO.java b/core/src/io/anuke/mindustry/net/NetworkIO.java index 80d5af9294..b1de73f210 100644 --- a/core/src/io/anuke/mindustry/net/NetworkIO.java +++ b/core/src/io/anuke/mindustry/net/NetworkIO.java @@ -7,7 +7,7 @@ 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.type.Upgrade; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.BlockPart; import io.anuke.ucore.core.Timers; diff --git a/core/src/io/anuke/mindustry/resource/AmmoEntry.java b/core/src/io/anuke/mindustry/resource/AmmoEntry.java deleted file mode 100644 index 749bededa6..0000000000 --- a/core/src/io/anuke/mindustry/resource/AmmoEntry.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.anuke.mindustry.resource; - -public class AmmoEntry{ - public AmmoType type; - public int amount; - - public AmmoEntry(AmmoType type, int amount) { - this.type = type; - this.amount = amount; - } -} diff --git a/core/src/io/anuke/mindustry/type/AmmoEntry.java b/core/src/io/anuke/mindustry/type/AmmoEntry.java new file mode 100644 index 0000000000..f4deb909ce --- /dev/null +++ b/core/src/io/anuke/mindustry/type/AmmoEntry.java @@ -0,0 +1,11 @@ +package io.anuke.mindustry.type; + +public class AmmoEntry{ + public io.anuke.mindustry.type.AmmoType type; + public int amount; + + public AmmoEntry(io.anuke.mindustry.type.AmmoType type, int amount) { + this.type = type; + this.amount = amount; + } +} diff --git a/core/src/io/anuke/mindustry/resource/AmmoType.java b/core/src/io/anuke/mindustry/type/AmmoType.java similarity index 90% rename from core/src/io/anuke/mindustry/resource/AmmoType.java rename to core/src/io/anuke/mindustry/type/AmmoType.java index a6ee9d2d6d..3bb5dd91e9 100644 --- a/core/src/io/anuke/mindustry/resource/AmmoType.java +++ b/core/src/io/anuke/mindustry/type/AmmoType.java @@ -1,4 +1,4 @@ -package io.anuke.mindustry.resource; +package io.anuke.mindustry.type; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.content.fx.Fx; @@ -13,7 +13,7 @@ public class AmmoType { /**The item used. Always null if liquid isn't.*/ public final Item item; /**The liquid used. Always null if item isn't.*/ - public final Liquid liquid; + public final io.anuke.mindustry.type.Liquid liquid; /**The resulting bullet.*/ public final BulletType bullet; /**For item ammo, this is amount given per ammo item. @@ -48,7 +48,7 @@ public class AmmoType { this.quantityMultiplier = multiplier; } - public AmmoType(Liquid liquid, BulletType result, float multiplier){ + public AmmoType(io.anuke.mindustry.type.Liquid liquid, BulletType result, float multiplier){ this.item = null; this.liquid = liquid; this.bullet = result; diff --git a/core/src/io/anuke/mindustry/resource/Item.java b/core/src/io/anuke/mindustry/type/Item.java similarity index 97% rename from core/src/io/anuke/mindustry/resource/Item.java rename to core/src/io/anuke/mindustry/type/Item.java index 6c1d7a5583..08a33ef620 100644 --- a/core/src/io/anuke/mindustry/resource/Item.java +++ b/core/src/io/anuke/mindustry/type/Item.java @@ -1,4 +1,4 @@ -package io.anuke.mindustry.resource; +package io.anuke.mindustry.type; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.TextureRegion; diff --git a/core/src/io/anuke/mindustry/resource/ItemStack.java b/core/src/io/anuke/mindustry/type/ItemStack.java similarity index 60% rename from core/src/io/anuke/mindustry/resource/ItemStack.java rename to core/src/io/anuke/mindustry/type/ItemStack.java index c11bce57b1..6ab73ca5af 100644 --- a/core/src/io/anuke/mindustry/resource/ItemStack.java +++ b/core/src/io/anuke/mindustry/type/ItemStack.java @@ -1,10 +1,10 @@ -package io.anuke.mindustry.resource; +package io.anuke.mindustry.type; public class ItemStack{ - public Item item; + public io.anuke.mindustry.type.Item item; public int amount; - public ItemStack(Item item, int amount){ + public ItemStack(io.anuke.mindustry.type.Item item, int amount){ this.item = item; this.amount = amount; } diff --git a/core/src/io/anuke/mindustry/resource/Liquid.java b/core/src/io/anuke/mindustry/type/Liquid.java similarity index 97% rename from core/src/io/anuke/mindustry/resource/Liquid.java rename to core/src/io/anuke/mindustry/type/Liquid.java index 605888b735..f5d7d12744 100644 --- a/core/src/io/anuke/mindustry/resource/Liquid.java +++ b/core/src/io/anuke/mindustry/type/Liquid.java @@ -1,4 +1,4 @@ -package io.anuke.mindustry.resource; +package io.anuke.mindustry.type; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.utils.Array; diff --git a/core/src/io/anuke/mindustry/resource/Mech.java b/core/src/io/anuke/mindustry/type/Mech.java similarity index 59% rename from core/src/io/anuke/mindustry/resource/Mech.java rename to core/src/io/anuke/mindustry/type/Mech.java index 5ccd99a59d..cfcdad335c 100644 --- a/core/src/io/anuke/mindustry/resource/Mech.java +++ b/core/src/io/anuke/mindustry/type/Mech.java @@ -1,6 +1,6 @@ -package io.anuke.mindustry.resource; +package io.anuke.mindustry.type; -public class Mech extends Upgrade{ +public class Mech extends io.anuke.mindustry.type.Upgrade { public boolean flying; public float mass = 1f; diff --git a/core/src/io/anuke/mindustry/resource/Recipe.java b/core/src/io/anuke/mindustry/type/Recipe.java similarity index 76% rename from core/src/io/anuke/mindustry/resource/Recipe.java rename to core/src/io/anuke/mindustry/type/Recipe.java index a21b3679e4..7f9a0c99d3 100644 --- a/core/src/io/anuke/mindustry/resource/Recipe.java +++ b/core/src/io/anuke/mindustry/type/Recipe.java @@ -1,4 +1,4 @@ -package io.anuke.mindustry.resource; +package io.anuke.mindustry.type; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.ObjectMap; @@ -11,20 +11,20 @@ public class Recipe { public final int id; public final Block result; - public final ItemStack[] requirements; - public final Section section; + public final io.anuke.mindustry.type.ItemStack[] requirements; + public final io.anuke.mindustry.type.Section section; public final float cost; public boolean desktopOnly = false, debugOnly = false; - public Recipe(Section section, Block result, ItemStack... requirements){ + public Recipe(io.anuke.mindustry.type.Section section, Block result, io.anuke.mindustry.type.ItemStack... requirements){ this.id = lastid ++; this.result = result; this.requirements = requirements; this.section = section; float timeToPlace = 0f; - for(ItemStack stack : requirements){ + for(io.anuke.mindustry.type.ItemStack stack : requirements){ timeToPlace += stack.amount * stack.item.cost; } @@ -44,7 +44,7 @@ public class Recipe { return this; } - public static Array getBySection(Section section, Array r){ + public static Array getBySection(io.anuke.mindustry.type.Section section, Array r){ for(Recipe recipe : allRecipes){ if(recipe.section == section ) { r.add(recipe); diff --git a/core/src/io/anuke/mindustry/resource/Section.java b/core/src/io/anuke/mindustry/type/Section.java similarity index 72% rename from core/src/io/anuke/mindustry/resource/Section.java rename to core/src/io/anuke/mindustry/type/Section.java index 34747cd099..98f0342167 100644 --- a/core/src/io/anuke/mindustry/resource/Section.java +++ b/core/src/io/anuke/mindustry/type/Section.java @@ -1,4 +1,4 @@ -package io.anuke.mindustry.resource; +package io.anuke.mindustry.type; public enum Section{ weapon, production, distribution, liquid, power, defense, crafting, units diff --git a/core/src/io/anuke/mindustry/resource/Upgrade.java b/core/src/io/anuke/mindustry/type/Upgrade.java similarity index 95% rename from core/src/io/anuke/mindustry/resource/Upgrade.java rename to core/src/io/anuke/mindustry/type/Upgrade.java index d8ed2b421c..4c9e941b82 100644 --- a/core/src/io/anuke/mindustry/resource/Upgrade.java +++ b/core/src/io/anuke/mindustry/type/Upgrade.java @@ -1,4 +1,4 @@ -package io.anuke.mindustry.resource; +package io.anuke.mindustry.type; import com.badlogic.gdx.utils.Array; import io.anuke.ucore.util.Bundles; diff --git a/core/src/io/anuke/mindustry/resource/Weapon.java b/core/src/io/anuke/mindustry/type/Weapon.java similarity index 87% rename from core/src/io/anuke/mindustry/resource/Weapon.java rename to core/src/io/anuke/mindustry/type/Weapon.java index 1aa355b053..3417634016 100644 --- a/core/src/io/anuke/mindustry/resource/Weapon.java +++ b/core/src/io/anuke/mindustry/type/Weapon.java @@ -1,4 +1,4 @@ -package io.anuke.mindustry.resource; +package io.anuke.mindustry.type; import com.badlogic.gdx.utils.ObjectMap; import io.anuke.mindustry.Vars; @@ -16,11 +16,11 @@ import io.anuke.ucore.util.Bits; import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Translator; -public class Weapon extends Upgrade{ +public class Weapon extends io.anuke.mindustry.type.Upgrade { /**minimum cursor distance from player, fixes 'cross-eyed' shooting.*/ protected static float minPlayerDist = 20f; /**ammo type map. set with setAmmo()*/ - protected ObjectMap ammoMap = new ObjectMap<>(); + protected ObjectMap ammoMap = new ObjectMap<>(); /**shell ejection effect*/ protected Effect ejectEffect = Fx.none; /**weapon reload in frames*/ @@ -83,12 +83,12 @@ public class Weapon extends Upgrade{ p.inventory.useAmmo(); } - public AmmoType getAmmoType(Item item){ + public io.anuke.mindustry.type.AmmoType getAmmoType(io.anuke.mindustry.type.Item item){ return ammoMap.get(item); } - protected void setAmmo(AmmoType... types){ - for(AmmoType type : types){ + protected void setAmmo(io.anuke.mindustry.type.AmmoType... types){ + for(io.anuke.mindustry.type.AmmoType type : types){ ammoMap.put(type.item, type); } } @@ -96,7 +96,7 @@ public class Weapon extends Upgrade{ void shootInternal(Player p, float x, float y, float rotation, boolean left){ Angles.shotgun(shots, spacing, rotation, f -> bullet(p, x, y, f + Mathf.range(inaccuracy))); - AmmoType type = p.inventory.getAmmo(); + io.anuke.mindustry.type.AmmoType type = p.inventory.getAmmo(); tr.trns(rotation + 180f, type.recoil); diff --git a/core/src/io/anuke/mindustry/type/WeatherEvent.java b/core/src/io/anuke/mindustry/type/WeatherEvent.java new file mode 100644 index 0000000000..0d6b20336e --- /dev/null +++ b/core/src/io/anuke/mindustry/type/WeatherEvent.java @@ -0,0 +1,19 @@ +package io.anuke.mindustry.type; + +import com.badlogic.gdx.utils.Array; + +public class WeatherEvent { + private static final Array all = new Array<>(); + private static int lastid; + + public final int id; + public final String name; + + public WeatherEvent(String name){ + this.id = lastid ++; + this.name = name; + + all.add(this); + } + +} diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java index a323f1631f..b314fbc282 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java @@ -9,7 +9,7 @@ import com.badlogic.gdx.utils.IntSet; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.input.InputHandler; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.ui.ItemImage; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Core; diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java index 64bfd9466c..268fc95653 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java @@ -9,10 +9,10 @@ import com.badlogic.gdx.utils.IntSet; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.input.InputHandler; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.ItemStack; -import io.anuke.mindustry.resource.Recipe; -import io.anuke.mindustry.resource.Section; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.ItemStack; +import io.anuke.mindustry.type.Recipe; +import io.anuke.mindustry.type.Section; import io.anuke.mindustry.ui.dialogs.FloatingDialog; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockStats; @@ -62,7 +62,7 @@ public class BlocksFragment implements Fragment{ blocks = new table(){{ itemtable = new Table("button"); - itemtable.setVisible(() -> input.recipe == null && !state.mode.infiniteResources); + itemtable.setVisible(() -> false); itemtable.update(() -> { int[] items = tmpItems; for(int i = 0; i < items.length; i ++){ diff --git a/core/src/io/anuke/mindustry/world/BaseBlock.java b/core/src/io/anuke/mindustry/world/BaseBlock.java index 9eb12c4178..6a2f5cd055 100644 --- a/core/src/io/anuke/mindustry/world/BaseBlock.java +++ b/core/src/io/anuke/mindustry/world/BaseBlock.java @@ -4,8 +4,8 @@ import com.badlogic.gdx.math.GridPoint2; import io.anuke.mindustry.content.fx.EnvironmentFx; import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.entities.effect.Puddle; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.Liquid; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Timers; import io.anuke.ucore.util.Mathf; diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index d96810fba8..5d0307bdde 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -17,9 +17,9 @@ import io.anuke.mindustry.graphics.Layer; import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.NetEvents; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.ItemStack; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.ItemStack; +import io.anuke.mindustry.type.Liquid; import io.anuke.ucore.core.Timers; import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.graphics.Hue; diff --git a/core/src/io/anuke/mindustry/world/Build.java b/core/src/io/anuke/mindustry/world/Build.java index ea7416a64e..fa21fddd07 100644 --- a/core/src/io/anuke/mindustry/world/Build.java +++ b/core/src/io/anuke/mindustry/world/Build.java @@ -7,7 +7,7 @@ import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.content.fx.Fx; import io.anuke.mindustry.entities.Units; import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.resource.Recipe; +import io.anuke.mindustry.type.Recipe; import io.anuke.mindustry.world.blocks.types.BuildBlock.BuildEntity; import io.anuke.ucore.core.Effects; import io.anuke.ucore.entities.Entities; @@ -26,7 +26,6 @@ public class Build { if(tile == null) return null; Block block = tile.isLinked() ? tile.getLinked().block() : tile.block(); - Recipe result = Recipe.getByResult(block); //todo add break results to core inventory @@ -59,9 +58,7 @@ public class Build { Block sub = Block.getByName("build" + result.size); tile.setBlock(sub, rotation); - tile.entity().result = result; - tile.entity().recipe = recipe; - tile.entity().stacks = recipe.requirements; + tile.entity().set(recipe); tile.setTeam(team); if(result.isMultiblock()){ diff --git a/core/src/io/anuke/mindustry/world/ItemBuffer.java b/core/src/io/anuke/mindustry/world/ItemBuffer.java index 5f23f4714e..fa0ba89eb5 100644 --- a/core/src/io/anuke/mindustry/world/ItemBuffer.java +++ b/core/src/io/anuke/mindustry/world/ItemBuffer.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.world; import com.badlogic.gdx.utils.NumberUtils; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.ucore.core.Timers; import io.anuke.ucore.util.Bits; diff --git a/core/src/io/anuke/mindustry/world/Tile.java b/core/src/io/anuke/mindustry/world/Tile.java index b8a3944cdc..442c7c17e2 100644 --- a/core/src/io/anuke/mindustry/world/Tile.java +++ b/core/src/io/anuke/mindustry/world/Tile.java @@ -6,7 +6,7 @@ import com.badlogic.gdx.utils.reflect.ClassReflection; import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.resource.Recipe; +import io.anuke.mindustry.type.Recipe; import io.anuke.mindustry.world.blocks.types.Floor; import io.anuke.mindustry.world.blocks.types.modules.InventoryModule; import io.anuke.mindustry.world.blocks.types.modules.LiquidModule; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/BlockPart.java b/core/src/io/anuke/mindustry/world/blocks/types/BlockPart.java index b97dd17d2f..7968d3162c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/BlockPart.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/BlockPart.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.world.blocks.types; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/BuildBlock.java b/core/src/io/anuke/mindustry/world/blocks/types/BuildBlock.java index 124aac1975..ecbbcd9c4e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/BuildBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/BuildBlock.java @@ -9,12 +9,12 @@ import io.anuke.mindustry.entities.effect.Rubble; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.graphics.Layer; import io.anuke.mindustry.graphics.Shaders; -import io.anuke.mindustry.resource.ItemStack; -import io.anuke.mindustry.resource.Recipe; +import io.anuke.mindustry.type.Recipe; import io.anuke.mindustry.world.BarType; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockBar; import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.blocks.types.modules.InventoryModule; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Graphics; import io.anuke.ucore.graphics.Draw; @@ -33,7 +33,7 @@ public class BuildBlock extends Block { @Override public void setBars(){ - bars.replace(new BlockBar(BarType.health, true, tile -> tile.entity().progress)); + bars.replace(new BlockBar(BarType.health, true, tile -> (float)tile.entity().progress)); } @Override @@ -58,7 +58,7 @@ public class BuildBlock extends Block { for(TextureRegion region : entity.result.getBlockIcon()){ Shaders.blockbuild.region = region; - Shaders.blockbuild.progress = entity.progress; + Shaders.blockbuild.progress = (float)entity.progress; Shaders.blockbuild.apply(); Draw.rect(region, tile.drawx(), tile.drawy(), entity.result.rotate ? tile.getRotation() * 90 : 0); @@ -77,8 +77,8 @@ public class BuildBlock extends Block { @Override public void update(Tile tile) { BuildEntity entity = tile.entity(); - entity.progress -= 1f/entity.result.health/decaySpeedScl; - if(entity.progress > 1f){ + + if(entity.progress >= 1f){ Team team = tile.getTeam(); tile.setBlock(entity.result); tile.setTeam(team); @@ -86,6 +86,12 @@ public class BuildBlock extends Block { }else if(entity.progress < 0f){ entity.damage(entity.health + 1); } + + if(!entity.updated){ + entity.progress -= 1f/entity.result.health/decaySpeedScl; + } + + entity.updated = false; } @Override @@ -94,9 +100,45 @@ public class BuildBlock extends Block { } public class BuildEntity extends TileEntity{ - public Block result; public Recipe recipe; - public float progress = 0.05f; - public ItemStack[] stacks; + + private double progress = 0; + private double[] accumulator; + private Block result; + private boolean updated; + + public void addProgress(InventoryModule inventory, double amount){ + double maxProgress = amount; + + for(int i = 0; i < recipe.requirements.length; i ++){ + accumulator[i] += recipe.requirements[i].amount*amount; //add amount progressed to the accumulator + int required = (int)(accumulator[i]); //calculate items that are required now + + if(required > 0){ //if this amount is positive... + //calculate how many items it can actually use + int maxUse = Math.min(required, inventory.getItem(recipe.requirements[i].item)); + //get this as a fraction + double fraction = maxUse / (double)required; + + //move max progress down if this fraction is less than 1 + maxProgress = Math.min(maxProgress, maxProgress*fraction); + + //remove stuff that is actually used + accumulator[i] -= maxUse; + inventory.removeItem(recipe.requirements[i].item, maxUse); + } + //else, no items are required yet, so just keep going + } + + progress += maxProgress; + updated = true; + } + + public void set(Recipe recipe){ + updated = true; + this.result = recipe.result; + this.recipe = recipe; + this.accumulator = new double[recipe.requirements.length]; + } } } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java index da0f825ffa..c87db61f4b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java @@ -7,8 +7,8 @@ import io.anuke.mindustry.content.fx.Fx; import io.anuke.mindustry.entities.*; import io.anuke.mindustry.graphics.Layer; import io.anuke.mindustry.graphics.Palette; -import io.anuke.mindustry.resource.AmmoEntry; -import io.anuke.mindustry.resource.AmmoType; +import io.anuke.mindustry.type.AmmoEntry; +import io.anuke.mindustry.type.AmmoType; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockGroup; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/BurstTurret.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/BurstTurret.java index 62474fbf27..ca939bfeb8 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/BurstTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/BurstTurret.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.world.blocks.types.defense.turrets; -import io.anuke.mindustry.resource.AmmoType; +import io.anuke.mindustry.type.AmmoType; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Timers; import io.anuke.ucore.util.Mathf; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/DoubleTurret.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/DoubleTurret.java index 8bb2c107d9..9991011cf4 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/DoubleTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/DoubleTurret.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.world.blocks.types.defense.turrets; -import io.anuke.mindustry.resource.AmmoType; +import io.anuke.mindustry.type.AmmoType; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.util.Mathf; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/ItemTurret.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/ItemTurret.java index 2668763c6c..cd5f07f993 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/ItemTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/ItemTurret.java @@ -1,9 +1,9 @@ package io.anuke.mindustry.world.blocks.types.defense.turrets; import com.badlogic.gdx.utils.ObjectMap; -import io.anuke.mindustry.resource.AmmoEntry; -import io.anuke.mindustry.resource.AmmoType; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.AmmoEntry; +import io.anuke.mindustry.type.AmmoType; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.BarType; import io.anuke.mindustry.world.BlockBar; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/LaserTurret.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/LaserTurret.java index 0d074f6dfd..75282011e6 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/LaserTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/LaserTurret.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.world.blocks.types.defense.turrets; import io.anuke.mindustry.content.fx.Fx; -import io.anuke.mindustry.resource.AmmoType; +import io.anuke.mindustry.type.AmmoType; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Effects.Effect; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/LiquidTurret.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/LiquidTurret.java index f423f0bcaa..9f6f7f6a40 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/LiquidTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/LiquidTurret.java @@ -1,9 +1,9 @@ package io.anuke.mindustry.world.blocks.types.defense.turrets; import com.badlogic.gdx.utils.ObjectMap; -import io.anuke.mindustry.resource.AmmoType; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.AmmoType; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.BarType; import io.anuke.mindustry.world.BlockBar; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/PowerTurret.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/PowerTurret.java index 6b51f881ee..c0630f9d2b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/PowerTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/PowerTurret.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.world.blocks.types.defense.turrets; -import io.anuke.mindustry.resource.AmmoType; +import io.anuke.mindustry.type.AmmoType; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.defense.Turret; import io.anuke.ucore.util.Strings; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/BufferedItemBridge.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/BufferedItemBridge.java index 3c72651cde..c224b64b14 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/BufferedItemBridge.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/BufferedItemBridge.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.world.blocks.types.distribution; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.ItemBuffer; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.util.Mathf; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conduit.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conduit.java index e59961e1ac..fa3cb0cf03 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conduit.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conduit.java @@ -2,7 +2,7 @@ package io.anuke.mindustry.world.blocks.types.distribution; import com.badlogic.gdx.graphics.g2d.TextureRegion; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.LiquidBlock; import io.anuke.mindustry.world.blocks.types.modules.LiquidModule; 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 ef4cf0e743..2a6c5b3235 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 @@ -5,7 +5,7 @@ import io.anuke.mindustry.content.Items; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.graphics.Layer; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockGroup; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/ItemBridge.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/ItemBridge.java index d5314ec6e1..03835a5c03 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/ItemBridge.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/ItemBridge.java @@ -6,7 +6,7 @@ import com.badlogic.gdx.utils.IntSet; import com.badlogic.gdx.utils.IntSet.IntSetIterator; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.graphics.Layer; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Timers; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java index 96345699eb..16672ec700 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java @@ -3,7 +3,7 @@ package io.anuke.mindustry.world.blocks.types.distribution; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.NumberUtils; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockGroup; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidBridge.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidBridge.java index cced0c8156..b07aabab99 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidBridge.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidBridge.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.world.blocks.types.distribution; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Timers; import io.anuke.ucore.util.Mathf; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidExtendingBridge.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidExtendingBridge.java index 0f2f6c94b4..c86abaf771 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidExtendingBridge.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidExtendingBridge.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.world.blocks.types.distribution; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Timers; import io.anuke.ucore.util.Mathf; 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 254f942b86..1de5a382b6 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 @@ -1,7 +1,7 @@ package io.anuke.mindustry.world.blocks.types.distribution; import com.badlogic.gdx.graphics.g2d.TextureRegion; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.LiquidBlock; import io.anuke.ucore.graphics.Draw; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/OverflowGate.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/OverflowGate.java index 111b86de5c..e1197d31db 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/OverflowGate.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/OverflowGate.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.world.blocks.types.distribution; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.util.Mathf; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Router.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Router.java index 27dd5d7704..b9b4ec8ba1 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Router.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Router.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.world.blocks.types.distribution; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockGroup; import io.anuke.mindustry.world.Tile; 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 6355fdb047..9eef97fbf6 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,7 +4,7 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.content.Items; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockGroup; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Splitter.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Splitter.java index 3cd2562f0a..ede5a95e01 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Splitter.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Splitter.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.world.blocks.types.distribution; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockGroup; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java index 51e015e0ab..b2eb1a0e88 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java @@ -6,8 +6,8 @@ import com.badlogic.gdx.utils.ObjectSet; import io.anuke.mindustry.content.Liquids; import io.anuke.mindustry.content.fx.BlockFx; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.PowerBlock; import io.anuke.ucore.core.Effects; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/TunnelConduit.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/TunnelConduit.java index 2ee765df66..82423dbfcb 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/TunnelConduit.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/TunnelConduit.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.world.blocks.types.distribution; import com.badlogic.gdx.graphics.g2d.TextureRegion; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.BarType; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.LiquidBlock; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/TunnelConveyor.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/TunnelConveyor.java index 6ecea280f9..7eed31a1b9 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/TunnelConveyor.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/TunnelConveyor.java @@ -3,7 +3,7 @@ package io.anuke.mindustry.world.blocks.types.distribution; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.NumberUtils; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.*; import io.anuke.ucore.core.Timers; import io.anuke.ucore.util.Bits; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/modules/InventoryModule.java b/core/src/io/anuke/mindustry/world/blocks/types/modules/InventoryModule.java index 1928a87714..9200d242fe 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/modules/InventoryModule.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/modules/InventoryModule.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.world.blocks.types.modules; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.ItemStack; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.world.blocks.types.BlockModule; import java.io.DataInputStream; 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 3012b891eb..8637de3261 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,7 +1,7 @@ package io.anuke.mindustry.world.blocks.types.modules; import io.anuke.mindustry.content.Liquids; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.blocks.types.BlockModule; import java.io.DataInputStream; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/power/BurnerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/types/power/BurnerGenerator.java index 8901f1637b..c337ed8b78 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/power/BurnerGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/power/BurnerGenerator.java @@ -3,7 +3,7 @@ package io.anuke.mindustry.world.blocks.types.power; import com.badlogic.gdx.graphics.Color; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.content.fx.BlockFx; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.BarType; import io.anuke.mindustry.world.BlockBar; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/power/DecayGenerator.java b/core/src/io/anuke/mindustry/world/blocks/types/power/DecayGenerator.java index 36a538e300..90f9d9aa16 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/power/DecayGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/power/DecayGenerator.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.world.blocks.types.power; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; public class DecayGenerator extends BurnerGenerator { diff --git a/core/src/io/anuke/mindustry/world/blocks/types/power/FusionReactor.java b/core/src/io/anuke/mindustry/world/blocks/types/power/FusionReactor.java index 41c9f69fa7..5d4312999d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/power/FusionReactor.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/power/FusionReactor.java @@ -4,7 +4,7 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.TextureRegion; import io.anuke.mindustry.content.Liquids; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.production.GenericCrafter.GenericCrafterEntity; import io.anuke.ucore.core.Graphics; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/power/LiquidBurnerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/types/power/LiquidBurnerGenerator.java index ff62036740..511236a609 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/power/LiquidBurnerGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/power/LiquidBurnerGenerator.java @@ -2,7 +2,7 @@ package io.anuke.mindustry.world.blocks.types.power; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.content.fx.BlockFx; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.power.BurnerGenerator.BurnerEntity; import io.anuke.ucore.core.Effects; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/power/LiquidHeatGenerator.java b/core/src/io/anuke/mindustry/world/blocks/types/power/LiquidHeatGenerator.java index 7d6181454b..974e90ffed 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/power/LiquidHeatGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/power/LiquidHeatGenerator.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.world.blocks.types.power; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Liquid; public class LiquidHeatGenerator extends LiquidBurnerGenerator { diff --git a/core/src/io/anuke/mindustry/world/blocks/types/power/NuclearReactor.java b/core/src/io/anuke/mindustry/world/blocks/types/power/NuclearReactor.java index 62c13ea02a..af36a767f3 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/power/NuclearReactor.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/power/NuclearReactor.java @@ -6,8 +6,8 @@ import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.effect.DamageArea; import io.anuke.mindustry.content.fx.BlockFx; import io.anuke.mindustry.content.fx.ExplosionFx; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.BarType; import io.anuke.mindustry.world.BlockBar; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Cultivator.java b/core/src/io/anuke/mindustry/world/blocks/types/production/Cultivator.java index 3db7e6428a..0fbc12db9c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/Cultivator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/Cultivator.java @@ -4,7 +4,7 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.TextureRegion; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.content.fx.Fx; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Timers; import io.anuke.ucore.graphics.Draw; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Drill.java b/core/src/io/anuke/mindustry/world/blocks/types/production/Drill.java index 4beed3b39b..b599d7b511 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/Drill.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/Drill.java @@ -7,8 +7,8 @@ import io.anuke.mindustry.content.Liquids; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.content.fx.BlockFx; import io.anuke.mindustry.graphics.Layer; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockGroup; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Fracker.java b/core/src/io/anuke/mindustry/world/blocks/types/production/Fracker.java index c751ecc37f..ac5606992d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/Fracker.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/Fracker.java @@ -2,7 +2,7 @@ package io.anuke.mindustry.world.blocks.types.production; import com.badlogic.gdx.graphics.g2d.TextureRegion; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Timers; import io.anuke.ucore.graphics.Draw; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/GenericCrafter.java b/core/src/io/anuke/mindustry/world/blocks/types/production/GenericCrafter.java index 84c368d649..855d0ac257 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/GenericCrafter.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/GenericCrafter.java @@ -4,9 +4,9 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.content.fx.BlockFx; import io.anuke.mindustry.content.fx.Fx; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.ItemStack; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.ItemStack; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.BarType; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockBar; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Incinerator.java b/core/src/io/anuke/mindustry/world/blocks/types/production/Incinerator.java index f88db5ce8b..bbcc8bc15c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/Incinerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/Incinerator.java @@ -3,8 +3,8 @@ package io.anuke.mindustry.world.blocks.types.production; import com.badlogic.gdx.graphics.Color; import io.anuke.mindustry.content.fx.BlockFx; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.BarType; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; 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 e2b8cffffe..6a8d7b7d0e 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 @@ -2,8 +2,8 @@ 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; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.LiquidBlock; import io.anuke.ucore.core.Timers; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/PowerCrafter.java b/core/src/io/anuke/mindustry/world/blocks/types/production/PowerCrafter.java index 9ebd09853a..b8cfd433cf 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/PowerCrafter.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/PowerCrafter.java @@ -1,9 +1,9 @@ package io.anuke.mindustry.world.blocks.types.production; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.ItemStack; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.ItemStack; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.production.GenericCrafter.GenericCrafterEntity; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/PowerSmelter.java b/core/src/io/anuke/mindustry/world/blocks/types/production/PowerSmelter.java index 9845629718..595d2ff4fb 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/PowerSmelter.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/PowerSmelter.java @@ -3,8 +3,8 @@ package io.anuke.mindustry.world.blocks.types.production; import com.badlogic.gdx.graphics.Color; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.content.fx.BlockFx; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.ItemStack; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.world.BarType; import io.anuke.mindustry.world.BlockBar; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Pump.java b/core/src/io/anuke/mindustry/world/blocks/types/production/Pump.java index ff97d8dd91..af793e06a0 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/Pump.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/Pump.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.world.blocks.types.production; import com.badlogic.gdx.graphics.g2d.TextureRegion; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.BlockGroup; import io.anuke.mindustry.graphics.Layer; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Separator.java b/core/src/io/anuke/mindustry/world/blocks/types/production/Separator.java index d91c7a3bef..4a4660ec04 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/Separator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/Separator.java @@ -2,8 +2,8 @@ package io.anuke.mindustry.world.blocks.types.production; import com.badlogic.gdx.graphics.Color; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.production.GenericCrafter.GenericCrafterEntity; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Smelter.java b/core/src/io/anuke/mindustry/world/blocks/types/production/Smelter.java index 23f01efb5f..07245f7382 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/Smelter.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/Smelter.java @@ -3,7 +3,7 @@ package io.anuke.mindustry.world.blocks.types.production; import com.badlogic.gdx.graphics.Color; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.content.fx.BlockFx; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.BarType; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockBar; 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 f8a74a9ea7..ef0c5c5c12 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 @@ -5,7 +5,7 @@ import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.content.Liquids; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.content.fx.Fx; -import io.anuke.mindustry.resource.Liquid; +import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Effects.Effect; 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 934738c3c0..58d8b20618 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 @@ -1,9 +1,10 @@ package io.anuke.mindustry.world.blocks.types.storage; import com.badlogic.gdx.math.Rectangle; +import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.entities.Units; import io.anuke.mindustry.net.Net; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.BlockFlag; import io.anuke.ucore.graphics.Draw; @@ -28,13 +29,22 @@ public class CoreBlock extends StorageBlock { unbreakable = true; size = 3; hasItems = true; - itemCapacity = 2000; + itemCapacity = 1000; flags = EnumSet.of(BlockFlag.resupplyPoint, BlockFlag.target); } + @Override + public int acceptStack(Item item, int amount, Tile tile, Unit source){ + if(acceptItem(item, tile, tile) && hasItems && source.team == tile.getTeam()){ + return Math.min(itemCapacity - tile.entity.items.getItem(item), amount); + }else{ + return 0; + } + } + @Override public boolean acceptItem(Item item, Tile tile, Tile source) { - return tile.entity.items.totalItems() < itemCapacity; + return tile.entity.items.items[item.id]< itemCapacity && item.material; } @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 c679ba3ed4..7f09546fea 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,7 +4,7 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.content.Items; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.scene.style.TextureRegionDrawable; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/storage/StorageBlock.java b/core/src/io/anuke/mindustry/world/blocks/types/storage/StorageBlock.java index 30f114ade6..652d56d542 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/storage/StorageBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/storage/StorageBlock.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.world.blocks.types.storage; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; 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 37f7c51e78..c097dfcefc 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 @@ -1,6 +1,6 @@ package io.anuke.mindustry.world.blocks.types.storage; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockGroup; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/storage/Vault.java b/core/src/io/anuke/mindustry/world/blocks/types/storage/Vault.java index 4cb76911cc..e8d1a8f99c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/storage/Vault.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/storage/Vault.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.world.blocks.types.storage; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Timers; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/units/ResupplyPoint.java b/core/src/io/anuke/mindustry/world/blocks/types/units/ResupplyPoint.java index eb90d5cb22..f4a11db6b3 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/units/ResupplyPoint.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/units/ResupplyPoint.java @@ -6,7 +6,7 @@ import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.entities.Units; import io.anuke.mindustry.graphics.Layer; -import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.BlockFlag; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/units/UnitFactory.java b/core/src/io/anuke/mindustry/world/blocks/types/units/UnitFactory.java index cc32202952..37c38f747e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/units/UnitFactory.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/units/UnitFactory.java @@ -10,8 +10,8 @@ import io.anuke.mindustry.entities.units.BaseUnit; import io.anuke.mindustry.entities.units.UnitType; import io.anuke.mindustry.content.fx.BlockFx; import io.anuke.mindustry.graphics.Shaders; -import io.anuke.mindustry.resource.Item; -import io.anuke.mindustry.resource.ItemStack; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.world.BarType; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.BlockBar;