Sprite reorganization, new power and tier-based pumps
@@ -30,7 +30,7 @@ public class IOFinder {
|
|||||||
|
|
||||||
//make sure there's only one read method
|
//make sure there's only one read method
|
||||||
if(readers.stream().filter(elem -> getValue(elem.getAnnotation(ReadClass.class)).equals(typeName)).count() > 1){
|
if(readers.stream().filter(elem -> getValue(elem.getAnnotation(ReadClass.class)).equals(typeName)).count() > 1){
|
||||||
Utils.messager.printMessage(Kind.ERROR, "Multiple writer methods for type: ", writer);
|
Utils.messager.printMessage(Kind.ERROR, "Multiple writer methods for type '" + typeName + "'", writer);
|
||||||
}
|
}
|
||||||
|
|
||||||
//make sure there's only one write method
|
//make sure there's only one write method
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ public class RemoteReadGenerator {
|
|||||||
ClassSerializer ser = serializers.get(typeName);
|
ClassSerializer ser = serializers.get(typeName);
|
||||||
|
|
||||||
if (ser == null) { //make sure a serializer exists!
|
if (ser == null) { //make sure a serializer exists!
|
||||||
Utils.messager.printMessage(Kind.ERROR, "No @ReadClass method to read class type: ", var);
|
Utils.messager.printMessage(Kind.ERROR, "No @ReadClass method to read class type: '" + typeName + "'", var);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ public class RemoteWriteGenerator {
|
|||||||
ClassSerializer ser = serializers.get(typeName);
|
ClassSerializer ser = serializers.get(typeName);
|
||||||
|
|
||||||
if(ser == null){ //make sure a serializer exists!
|
if(ser == null){ //make sure a serializer exists!
|
||||||
Utils.messager.printMessage(Kind.ERROR, "No @WriteClass method to write class type: ", var);
|
Utils.messager.printMessage(Kind.ERROR, "No @WriteClass method to write class type: '" + typeName + "'", var);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 228 B |
|
Before Width: | Height: | Size: 246 B |
|
Before Width: | Height: | Size: 174 B After Width: | Height: | Size: 174 B |
|
Before Width: | Height: | Size: 188 B After Width: | Height: | Size: 188 B |
|
Before Width: | Height: | Size: 188 B After Width: | Height: | Size: 188 B |
|
Before Width: | Height: | Size: 261 B After Width: | Height: | Size: 261 B |
|
Before Width: | Height: | Size: 286 B After Width: | Height: | Size: 286 B |
|
Before Width: | Height: | Size: 327 B After Width: | Height: | Size: 327 B |
|
Before Width: | Height: | Size: 219 B After Width: | Height: | Size: 219 B |
|
Before Width: | Height: | Size: 298 B After Width: | Height: | Size: 298 B |
|
Before Width: | Height: | Size: 289 B After Width: | Height: | Size: 289 B |
|
Before Width: | Height: | Size: 574 B After Width: | Height: | Size: 574 B |
|
Before Width: | Height: | Size: 239 B After Width: | Height: | Size: 239 B |
|
Before Width: | Height: | Size: 341 B After Width: | Height: | Size: 341 B |
|
Before Width: | Height: | Size: 379 B After Width: | Height: | Size: 379 B |
|
Before Width: | Height: | Size: 473 B After Width: | Height: | Size: 473 B |
|
Before Width: | Height: | Size: 461 B After Width: | Height: | Size: 461 B |
|
Before Width: | Height: | Size: 354 B After Width: | Height: | Size: 354 B |
|
Before Width: | Height: | Size: 296 B After Width: | Height: | Size: 296 B |
|
Before Width: | Height: | Size: 678 B After Width: | Height: | Size: 678 B |
|
Before Width: | Height: | Size: 192 B After Width: | Height: | Size: 192 B |
|
Before Width: | Height: | Size: 196 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 228 B After Width: | Height: | Size: 228 B |
|
Before Width: | Height: | Size: 174 B After Width: | Height: | Size: 174 B |
|
Before Width: | Height: | Size: 196 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 233 B After Width: | Height: | Size: 233 B |
|
Before Width: | Height: | Size: 174 B After Width: | Height: | Size: 174 B |
|
Before Width: | Height: | Size: 196 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 260 B After Width: | Height: | Size: 260 B |
|
Before Width: | Height: | Size: 192 B After Width: | Height: | Size: 192 B |
|
Before Width: | Height: | Size: 256 B After Width: | Height: | Size: 256 B |
|
Before Width: | Height: | Size: 338 B After Width: | Height: | Size: 338 B |
|
Before Width: | Height: | Size: 298 B After Width: | Height: | Size: 298 B |
|
Before Width: | Height: | Size: 160 B After Width: | Height: | Size: 160 B |
|
Before Width: | Height: | Size: 181 B After Width: | Height: | Size: 181 B |
|
Before Width: | Height: | Size: 185 B After Width: | Height: | Size: 185 B |
|
Before Width: | Height: | Size: 238 B After Width: | Height: | Size: 238 B |
|
Before Width: | Height: | Size: 160 B After Width: | Height: | Size: 160 B |
|
Before Width: | Height: | Size: 177 B After Width: | Height: | Size: 177 B |
|
Before Width: | Height: | Size: 178 B After Width: | Height: | Size: 178 B |
|
Before Width: | Height: | Size: 227 B After Width: | Height: | Size: 227 B |
|
Before Width: | Height: | Size: 199 B After Width: | Height: | Size: 199 B |
|
Before Width: | Height: | Size: 191 B After Width: | Height: | Size: 191 B |
|
Before Width: | Height: | Size: 161 B After Width: | Height: | Size: 161 B |
|
Before Width: | Height: | Size: 168 B After Width: | Height: | Size: 168 B |
|
Before Width: | Height: | Size: 154 B After Width: | Height: | Size: 154 B |
|
Before Width: | Height: | Size: 286 B After Width: | Height: | Size: 286 B |
|
Before Width: | Height: | Size: 235 B After Width: | Height: | Size: 235 B |
|
Before Width: | Height: | Size: 225 B After Width: | Height: | Size: 225 B |
|
Before Width: | Height: | Size: 169 B After Width: | Height: | Size: 169 B |
|
Before Width: | Height: | Size: 168 B After Width: | Height: | Size: 168 B |
|
Before Width: | Height: | Size: 256 B After Width: | Height: | Size: 256 B |
|
Before Width: | Height: | Size: 613 B After Width: | Height: | Size: 613 B |
|
Before Width: | Height: | Size: 196 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 188 B After Width: | Height: | Size: 188 B |
|
Before Width: | Height: | Size: 285 B After Width: | Height: | Size: 285 B |
|
Before Width: | Height: | Size: 219 B After Width: | Height: | Size: 219 B |
|
Before Width: | Height: | Size: 267 B After Width: | Height: | Size: 267 B |
BIN
core/assets-raw/sprites/blocks/liquid/rotary-pump.png
Normal file
|
After Width: | Height: | Size: 339 B |
BIN
core/assets-raw/sprites/blocks/liquid/thermal-pump.png
Normal file
|
After Width: | Height: | Size: 323 B |
|
Before Width: | Height: | Size: 313 B |
|
Before Width: | Height: | Size: 246 B |
|
Before Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 171 B After Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 111 KiB |
@@ -80,7 +80,7 @@ public class Pathfinder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean passable(Tile tile, Team team){
|
private boolean passable(Tile tile, Team team){
|
||||||
return (tile.getWallID() == 0 && !(tile.floor().liquid && (tile.floor().damageTaken > 0 || tile.floor().drownTime > 0)))
|
return (tile.getWallID() == 0 && !(tile.floor().isLiquid && (tile.floor().damageTaken > 0 || tile.floor().drownTime > 0)))
|
||||||
|| (tile.breakable() && (tile.getTeam() != team)) || !tile.solid();
|
|| (tile.breakable() && (tile.getTeam() != team)) || !tile.solid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ public class Liquids implements ContentList {
|
|||||||
water = new Liquid("water", Color.valueOf("486acd")) {
|
water = new Liquid("water", Color.valueOf("486acd")) {
|
||||||
{
|
{
|
||||||
heatCapacity = 0.4f;
|
heatCapacity = 0.4f;
|
||||||
|
tier = 0;
|
||||||
effect = StatusEffects.wet;
|
effect = StatusEffects.wet;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -25,6 +26,7 @@ public class Liquids implements ContentList {
|
|||||||
{
|
{
|
||||||
temperature = 0.8f;
|
temperature = 0.8f;
|
||||||
viscosity = 0.8f;
|
viscosity = 0.8f;
|
||||||
|
tier = 2;
|
||||||
effect = StatusEffects.melting;
|
effect = StatusEffects.melting;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -34,6 +36,7 @@ public class Liquids implements ContentList {
|
|||||||
viscosity = 0.7f;
|
viscosity = 0.7f;
|
||||||
flammability = 0.6f;
|
flammability = 0.6f;
|
||||||
explosiveness = 0.6f;
|
explosiveness = 0.6f;
|
||||||
|
tier = 1;
|
||||||
effect = StatusEffects.oiled;
|
effect = StatusEffects.oiled;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -42,6 +45,7 @@ public class Liquids implements ContentList {
|
|||||||
{
|
{
|
||||||
heatCapacity = 0.75f;
|
heatCapacity = 0.75f;
|
||||||
temperature = 0.5f;
|
temperature = 0.5f;
|
||||||
|
tier = 1;
|
||||||
effect = StatusEffects.freezing;
|
effect = StatusEffects.freezing;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -108,8 +108,9 @@ public class Recipes implements ContentList{
|
|||||||
new Recipe(liquid, LiquidBlocks.bridgeconduit, new ItemStack(Items.titanium, 2), new ItemStack(Items.steel, 2));
|
new Recipe(liquid, LiquidBlocks.bridgeconduit, new ItemStack(Items.titanium, 2), new ItemStack(Items.steel, 2));
|
||||||
new Recipe(liquid, LiquidBlocks.laserconduit, new ItemStack(Items.titanium, 2), new ItemStack(Items.steel, 2));
|
new Recipe(liquid, LiquidBlocks.laserconduit, new ItemStack(Items.titanium, 2), new ItemStack(Items.steel, 2));
|
||||||
|
|
||||||
new Recipe(liquid, LiquidBlocks.pump, new ItemStack(Items.steel, 10));
|
new Recipe(liquid, LiquidBlocks.mechanicalPump, new ItemStack(Items.steel, 10));
|
||||||
new Recipe(liquid, LiquidBlocks.fluxpump, new ItemStack(Items.steel, 10), new ItemStack(Items.surgealloy, 5));
|
new Recipe(liquid, LiquidBlocks.rotaryPump, new ItemStack(Items.steel, 10), new ItemStack(Items.surgealloy, 5));
|
||||||
|
new Recipe(liquid, LiquidBlocks.thermalPump, new ItemStack(Items.steel, 10), new ItemStack(Items.surgealloy, 5));
|
||||||
|
|
||||||
new Recipe(units, UnitBlocks.repairPoint, new ItemStack(Items.steel, 10));
|
new Recipe(units, UnitBlocks.repairPoint, new ItemStack(Items.steel, 10));
|
||||||
new Recipe(units, UnitBlocks.dropPoint, new ItemStack(Items.steel, 10));
|
new Recipe(units, UnitBlocks.dropPoint, new ItemStack(Items.steel, 10));
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ public class Blocks extends BlockList implements ContentList{
|
|||||||
speedMultiplier = 0.2f;
|
speedMultiplier = 0.2f;
|
||||||
variants = 0;
|
variants = 0;
|
||||||
liquidDrop = Liquids.water;
|
liquidDrop = Liquids.water;
|
||||||
liquid = true;
|
isLiquid = true;
|
||||||
status = StatusEffects.wet;
|
status = StatusEffects.wet;
|
||||||
statusIntensity = 1f;
|
statusIntensity = 1f;
|
||||||
drownTime = 140f;
|
drownTime = 140f;
|
||||||
@@ -66,7 +66,7 @@ public class Blocks extends BlockList implements ContentList{
|
|||||||
status = StatusEffects.wet;
|
status = StatusEffects.wet;
|
||||||
statusIntensity = 0.9f;
|
statusIntensity = 0.9f;
|
||||||
liquidDrop = Liquids.water;
|
liquidDrop = Liquids.water;
|
||||||
liquid = true;
|
isLiquid = true;
|
||||||
cacheLayer = CacheLayer.water;
|
cacheLayer = CacheLayer.water;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@ public class Blocks extends BlockList implements ContentList{
|
|||||||
statusIntensity = 0.8f;
|
statusIntensity = 0.8f;
|
||||||
variants = 0;
|
variants = 0;
|
||||||
liquidDrop = Liquids.lava;
|
liquidDrop = Liquids.lava;
|
||||||
liquid = true;
|
isLiquid = true;
|
||||||
cacheLayer = CacheLayer.lava;
|
cacheLayer = CacheLayer.lava;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -91,7 +91,7 @@ public class Blocks extends BlockList implements ContentList{
|
|||||||
speedMultiplier = 0.2f;
|
speedMultiplier = 0.2f;
|
||||||
variants = 0;
|
variants = 0;
|
||||||
liquidDrop = Liquids.oil;
|
liquidDrop = Liquids.oil;
|
||||||
liquid = true;
|
isLiquid = true;
|
||||||
cacheLayer = CacheLayer.oil;
|
cacheLayer = CacheLayer.oil;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ public class CraftingBlocks extends BlockList implements ContentList {
|
|||||||
hasLiquids = hasItems = true;
|
hasLiquids = hasItems = true;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
weaponFactory = new WeaponFactory("weaponfactory") {{
|
weaponFactory = new MechFactory("weaponfactory") {{
|
||||||
size = 2;
|
size = 2;
|
||||||
health = 250;
|
health = 250;
|
||||||
}};
|
}};
|
||||||
|
|||||||
@@ -6,17 +6,30 @@ import io.anuke.mindustry.world.blocks.distribution.*;
|
|||||||
import io.anuke.mindustry.world.blocks.production.Pump;
|
import io.anuke.mindustry.world.blocks.production.Pump;
|
||||||
|
|
||||||
public class LiquidBlocks extends BlockList implements ContentList{
|
public class LiquidBlocks extends BlockList implements ContentList{
|
||||||
public static Block pump, fluxpump, conduit, pulseconduit, liquidrouter, liquidtank, liquidjunction, bridgeconduit, laserconduit;
|
public static Block mechanicalPump, rotaryPump, thermalPump, conduit, pulseconduit, liquidrouter, liquidtank, liquidjunction, bridgeconduit, laserconduit;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load() {
|
public void load() {
|
||||||
|
|
||||||
pump = new Pump("pump") {{
|
mechanicalPump = new Pump("mechanical-pump") {{
|
||||||
pumpAmount = 0.1f;
|
pumpAmount = 0.1f;
|
||||||
|
tier = 0;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
fluxpump = new Pump("fluxpump") {{
|
rotaryPump = new Pump("rotary-pump") {{
|
||||||
pumpAmount = 0.2f;
|
pumpAmount = 0.2f;
|
||||||
|
powerUse = 0.015f;
|
||||||
|
liquidCapacity = 30f;
|
||||||
|
size = 2;
|
||||||
|
tier = 1;
|
||||||
|
}};
|
||||||
|
|
||||||
|
thermalPump = new Pump("thermal-pump") {{
|
||||||
|
pumpAmount = 0.3f;
|
||||||
|
powerUse = 0.02f;
|
||||||
|
liquidCapacity = 40f;
|
||||||
|
size = 2;
|
||||||
|
tier = 2;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
conduit = new Conduit("conduit") {{
|
conduit = new Conduit("conduit") {{
|
||||||
|
|||||||
@@ -62,12 +62,12 @@ public class ContentLoader {
|
|||||||
//ammotypes
|
//ammotypes
|
||||||
new AmmoTypes(),
|
new AmmoTypes(),
|
||||||
|
|
||||||
//mechs
|
|
||||||
new Mechs(),
|
|
||||||
|
|
||||||
//weapons
|
//weapons
|
||||||
new Weapons(),
|
new Weapons(),
|
||||||
|
|
||||||
|
//mechs
|
||||||
|
new Mechs(),
|
||||||
|
|
||||||
//units
|
//units
|
||||||
new UnitTypes(),
|
new UnitTypes(),
|
||||||
|
|
||||||
|
|||||||
@@ -306,7 +306,7 @@ public class NetServer extends Module{
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!player.timer.get(Player.timeSync, serverSyncTime)) continue;
|
if(!player.timer.get(Player.timerSync, serverSyncTime)) continue;
|
||||||
|
|
||||||
//if the player hasn't acknowledged that it has recieved the packet, send the same thing again
|
//if the player hasn't acknowledged that it has recieved the packet, send the same thing again
|
||||||
if(connection.lastSentSnapshotID > connection.lastSnapshotID){
|
if(connection.lastSentSnapshotID > connection.lastSnapshotID){
|
||||||
|
|||||||
@@ -3,23 +3,27 @@ package io.anuke.mindustry.entities;
|
|||||||
import com.badlogic.gdx.graphics.Color;
|
import com.badlogic.gdx.graphics.Color;
|
||||||
import com.badlogic.gdx.graphics.g2d.GlyphLayout;
|
import com.badlogic.gdx.graphics.g2d.GlyphLayout;
|
||||||
import com.badlogic.gdx.math.Vector2;
|
import com.badlogic.gdx.math.Vector2;
|
||||||
import com.badlogic.gdx.utils.Array;
|
|
||||||
import com.badlogic.gdx.utils.Pools;
|
import com.badlogic.gdx.utils.Pools;
|
||||||
import com.badlogic.gdx.utils.Queue;
|
import com.badlogic.gdx.utils.Queue;
|
||||||
import io.anuke.annotations.Annotations.Loc;
|
import io.anuke.annotations.Annotations.Loc;
|
||||||
import io.anuke.annotations.Annotations.Remote;
|
import io.anuke.annotations.Annotations.Remote;
|
||||||
import io.anuke.mindustry.Vars;
|
import io.anuke.mindustry.Vars;
|
||||||
import io.anuke.mindustry.content.Mechs;
|
import io.anuke.mindustry.content.Mechs;
|
||||||
import io.anuke.mindustry.content.Weapons;
|
|
||||||
import io.anuke.mindustry.entities.effect.ItemDrop;
|
import io.anuke.mindustry.entities.effect.ItemDrop;
|
||||||
import io.anuke.mindustry.entities.traits.*;
|
import io.anuke.mindustry.entities.traits.BuilderTrait;
|
||||||
|
import io.anuke.mindustry.entities.traits.CarriableTrait;
|
||||||
|
import io.anuke.mindustry.entities.traits.CarryTrait;
|
||||||
|
import io.anuke.mindustry.entities.traits.TargetTrait;
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.mindustry.gen.CallEntity;
|
import io.anuke.mindustry.gen.CallEntity;
|
||||||
import io.anuke.mindustry.graphics.Palette;
|
import io.anuke.mindustry.graphics.Palette;
|
||||||
import io.anuke.mindustry.graphics.Trail;
|
import io.anuke.mindustry.graphics.Trail;
|
||||||
import io.anuke.mindustry.net.In;
|
import io.anuke.mindustry.net.In;
|
||||||
import io.anuke.mindustry.net.Net;
|
import io.anuke.mindustry.net.Net;
|
||||||
import io.anuke.mindustry.type.*;
|
import io.anuke.mindustry.type.Item;
|
||||||
|
import io.anuke.mindustry.type.ItemStack;
|
||||||
|
import io.anuke.mindustry.type.Mech;
|
||||||
|
import io.anuke.mindustry.type.Upgrade;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.Floor;
|
import io.anuke.mindustry.world.blocks.Floor;
|
||||||
@@ -29,7 +33,10 @@ import io.anuke.ucore.entities.EntityGroup;
|
|||||||
import io.anuke.ucore.entities.trait.SolidTrait;
|
import io.anuke.ucore.entities.trait.SolidTrait;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
import io.anuke.ucore.graphics.Lines;
|
import io.anuke.ucore.graphics.Lines;
|
||||||
import io.anuke.ucore.util.*;
|
import io.anuke.ucore.util.Angles;
|
||||||
|
import io.anuke.ucore.util.Mathf;
|
||||||
|
import io.anuke.ucore.util.ThreadQueue;
|
||||||
|
import io.anuke.ucore.util.Timer;
|
||||||
|
|
||||||
import java.io.DataInput;
|
import java.io.DataInput;
|
||||||
import java.io.DataOutput;
|
import java.io.DataOutput;
|
||||||
@@ -38,14 +45,13 @@ import java.io.IOException;
|
|||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
public class Player extends Unit implements BuilderTrait, CarryTrait {
|
public class Player extends Unit implements BuilderTrait, CarryTrait {
|
||||||
private static final float debugSpeed = 1.8f;
|
|
||||||
private static final Vector2 movement = new Vector2();
|
private static final Vector2 movement = new Vector2();
|
||||||
|
|
||||||
public static int typeID = -1;
|
public static int typeID = -1;
|
||||||
|
|
||||||
public static final int timerShootLeft = 0;
|
public static final int timerShootLeft = 0;
|
||||||
public static final int timerShootRight = 1;
|
public static final int timerShootRight = 1;
|
||||||
public static final int timeSync = 2;
|
public static final int timerSync = 2;
|
||||||
|
|
||||||
//region instance variables, constructor
|
//region instance variables, constructor
|
||||||
|
|
||||||
@@ -56,9 +62,6 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||||||
public String uuid, usid;
|
public String uuid, usid;
|
||||||
public boolean isAdmin, isTransferring, isShooting;
|
public boolean isAdmin, isTransferring, isShooting;
|
||||||
public Color color = new Color();
|
public Color color = new Color();
|
||||||
|
|
||||||
public Array<Upgrade> upgrades = new Array<>();
|
|
||||||
public Weapon weapon = Weapons.blaster;
|
|
||||||
public Mech mech = Mechs.standard;
|
public Mech mech = Mechs.standard;
|
||||||
|
|
||||||
public int clientid = -1;
|
public int clientid = -1;
|
||||||
@@ -78,8 +81,6 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||||||
public Player(){
|
public Player(){
|
||||||
hitbox.setSize(5);
|
hitbox.setSize(5);
|
||||||
hitboxTile.setSize(4f);
|
hitboxTile.setSize(4f);
|
||||||
|
|
||||||
heal();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
@@ -146,12 +147,12 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean acceptsAmmo(Item item) {
|
public boolean acceptsAmmo(Item item) {
|
||||||
return weapon.getAmmoType(item) != null && inventory.canAcceptAmmo(weapon.getAmmoType(item));
|
return mech.weapon.getAmmoType(item) != null && inventory.canAcceptAmmo(mech.weapon.getAmmoType(item));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addAmmo(Item item) {
|
public void addAmmo(Item item) {
|
||||||
inventory.addAmmo(weapon.getAmmoType(item));
|
inventory.addAmmo(mech.weapon.getAmmoType(item));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -258,7 +259,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||||||
Draw.alpha(hitTime / hitDuration);
|
Draw.alpha(hitTime / hitDuration);
|
||||||
|
|
||||||
if(!mech.flying) {
|
if(!mech.flying) {
|
||||||
if(floor.liquid){
|
if(floor.isLiquid){
|
||||||
Draw.tint(Color.WHITE, floor.liquidColor, 0.5f);
|
Draw.tint(Color.WHITE, floor.liquidColor, 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,7 +273,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||||||
Draw.rect(mech.baseRegion, x, y, baseRotation- 90);
|
Draw.rect(mech.baseRegion, x, y, baseRotation- 90);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(floor.liquid) {
|
if(floor.isLiquid) {
|
||||||
Draw.tint(Color.WHITE, floor.liquidColor, drownTime * 0.4f);
|
Draw.tint(Color.WHITE, floor.liquidColor, drownTime * 0.4f);
|
||||||
}else {
|
}else {
|
||||||
Draw.tint(Color.WHITE);
|
Draw.tint(Color.WHITE);
|
||||||
@@ -282,9 +283,9 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||||||
|
|
||||||
for (int i : Mathf.signs) {
|
for (int i : Mathf.signs) {
|
||||||
float tra = rotation - 90,
|
float tra = rotation - 90,
|
||||||
trX = 4*i, trY = 3 - weapon.getRecoil(this, i > 0)*1.5f;
|
trX = 4*i, trY = 3 - mech.weapon.getRecoil(this, i > 0)*1.5f;
|
||||||
float w = i > 0 ? -8 : 8;
|
float w = i > 0 ? -8 : 8;
|
||||||
Draw.rect(weapon.equipRegion,
|
Draw.rect(mech.weapon.equipRegion,
|
||||||
x + Angles.trnsx(tra, trX, trY),
|
x + Angles.trnsx(tra, trX, trY),
|
||||||
y + Angles.trnsy(tra, trX, trY), w, 8, rotation - 90);
|
y + Angles.trnsy(tra, trX, trY), w, 8, rotation - 90);
|
||||||
}
|
}
|
||||||
@@ -481,8 +482,8 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||||||
|
|
||||||
protected void updateShooting(){
|
protected void updateShooting(){
|
||||||
if(isShooting()){
|
if(isShooting()){
|
||||||
weapon.update(this, true, pointerX, pointerY);
|
mech.weapon.update(this, true, pointerX, pointerY);
|
||||||
weapon.update(this, false, pointerX, pointerY);
|
mech.weapon.update(this, false, pointerX, pointerY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -577,10 +578,8 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||||||
|
|
||||||
/**Resets all values of the player.*/
|
/**Resets all values of the player.*/
|
||||||
public void reset(){
|
public void reset(){
|
||||||
weapon = Weapons.blaster;
|
|
||||||
team = Team.blue;
|
team = Team.blue;
|
||||||
inventory.clear();
|
inventory.clear();
|
||||||
upgrades.clear();
|
|
||||||
placeQueue.clear();
|
placeQueue.clear();
|
||||||
dead = true;
|
dead = true;
|
||||||
respawning = false;
|
respawning = false;
|
||||||
@@ -617,13 +616,8 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||||||
stream.writeBoolean(isLocal);
|
stream.writeBoolean(isLocal);
|
||||||
|
|
||||||
if(isLocal){
|
if(isLocal){
|
||||||
stream.writeInt(playerIndex);
|
stream.writeByte(playerIndex);
|
||||||
super.writeSave(stream, false);
|
super.writeSave(stream, false);
|
||||||
|
|
||||||
stream.writeByte(upgrades.size);
|
|
||||||
for(Upgrade u : upgrades){
|
|
||||||
stream.writeByte(u.id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -632,17 +626,13 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||||||
boolean local = stream.readBoolean();
|
boolean local = stream.readBoolean();
|
||||||
|
|
||||||
if(local){
|
if(local){
|
||||||
int index = stream.readInt();
|
int index = stream.readByte();
|
||||||
players[index].readSaveSuper(stream);
|
players[index].readSaveSuper(stream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void readSaveSuper(DataInput stream) throws IOException {
|
private void readSaveSuper(DataInput stream) throws IOException {
|
||||||
super.readSave(stream);
|
super.readSave(stream);
|
||||||
byte uamount = stream.readByte();
|
|
||||||
for (int i = 0; i < uamount; i++) {
|
|
||||||
upgrades.add(Upgrade.getByID(stream.readByte()));
|
|
||||||
}
|
|
||||||
|
|
||||||
add();
|
add();
|
||||||
}
|
}
|
||||||
@@ -654,7 +644,6 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||||||
buffer.writeBoolean(isAdmin);
|
buffer.writeBoolean(isAdmin);
|
||||||
buffer.writeInt(Color.rgba8888(color));
|
buffer.writeInt(Color.rgba8888(color));
|
||||||
buffer.writeBoolean(dead);
|
buffer.writeBoolean(dead);
|
||||||
buffer.writeByte(weapon.id);
|
|
||||||
buffer.writeByte(mech.id);
|
buffer.writeByte(mech.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -666,7 +655,6 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||||||
isAdmin = buffer.readBoolean();
|
isAdmin = buffer.readBoolean();
|
||||||
color.set(buffer.readInt());
|
color.set(buffer.readInt());
|
||||||
dead = buffer.readBoolean();
|
dead = buffer.readBoolean();
|
||||||
weapon = Upgrade.getByID(buffer.readByte());
|
|
||||||
mech = Upgrade.getByID(buffer.readByte());
|
mech = Upgrade.getByID(buffer.readByte());
|
||||||
interpolator.read(lastx, lasty, x, y, time, rotation);
|
interpolator.read(lastx, lasty, x, y, time, rotation);
|
||||||
rotation = lastrot;
|
rotation = lastrot;
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
|
|||||||
x += velocity.x / getMass() * Timers.delta();
|
x += velocity.x / getMass() * Timers.delta();
|
||||||
y += velocity.y / getMass() * Timers.delta();
|
y += velocity.y / getMass() * Timers.delta();
|
||||||
}else{
|
}else{
|
||||||
boolean onLiquid = floor.liquid;
|
boolean onLiquid = floor.isLiquid;
|
||||||
|
|
||||||
if(tile != null){
|
if(tile != null){
|
||||||
tile.block().unitOn(tile, this);
|
tile.block().unitOn(tile, this);
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ public class GroundEffectEntity extends EffectEntity {
|
|||||||
once = true;
|
once = true;
|
||||||
time = 0f;
|
time = 0f;
|
||||||
Tile tile = Vars.world.tileWorld(x, y);
|
Tile tile = Vars.world.tileWorld(x, y);
|
||||||
if(tile != null && tile.floor().liquid){
|
if(tile != null && tile.floor().isLiquid){
|
||||||
remove();
|
remove();
|
||||||
}
|
}
|
||||||
} else if (once && time >= effect.staticLife) {
|
} else if (once && time >= effect.staticLife) {
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ public class ItemDrop extends SolidEntity implements SyncTrait, DrawTrait, Veloc
|
|||||||
|
|
||||||
Tile tile = world.tileWorld(x, y);
|
Tile tile = world.tileWorld(x, y);
|
||||||
|
|
||||||
Draw.color(Color.WHITE, tile == null || !tile.floor().liquid ? Color.WHITE : tile.floor().liquidColor, sinktime/sinkLifetime);
|
Draw.color(Color.WHITE, tile == null || !tile.floor().isLiquid ? Color.WHITE : tile.floor().liquidColor, sinktime/sinkLifetime);
|
||||||
Draw.rect(item.region, x, y, size, size);
|
Draw.rect(item.region, x, y, size, size);
|
||||||
|
|
||||||
int stored = Mathf.clamp(amount / 6, 1, 8);
|
int stored = Mathf.clamp(amount / 6, 1, 8);
|
||||||
@@ -136,7 +136,7 @@ public class ItemDrop extends SolidEntity implements SyncTrait, DrawTrait, Veloc
|
|||||||
|
|
||||||
Tile tile = world.tileWorld(x, y);
|
Tile tile = world.tileWorld(x, y);
|
||||||
|
|
||||||
if(tile.floor().liquid){
|
if(tile.floor().isLiquid){
|
||||||
sinktime += Timers.delta();
|
sinktime += Timers.delta();
|
||||||
|
|
||||||
if(Mathf.chance(0.04 * Timers.delta())){
|
if(Mathf.chance(0.04 * Timers.delta())){
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ public class Puddle extends BaseEntity implements SaveTrait, Poolable, DrawTrait
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void deposit(Tile tile, Tile source, Liquid liquid, float amount, int generation){
|
private static void deposit(Tile tile, Tile source, Liquid liquid, float amount, int generation){
|
||||||
if(tile.floor().liquid && !canStayOn(liquid, tile.floor().liquidDrop)){
|
if(tile.floor().isLiquid && !canStayOn(liquid, tile.floor().liquidDrop)){
|
||||||
reactPuddle(tile.floor().liquidDrop, liquid, amount, tile,
|
reactPuddle(tile.floor().liquidDrop, liquid, amount, tile,
|
||||||
(tile.worldx() + source.worldx())/2f, (tile.worldy() + source.worldy())/2f);
|
(tile.worldx() + source.worldx())/2f, (tile.worldy() + source.worldy())/2f);
|
||||||
|
|
||||||
@@ -204,7 +204,7 @@ public class Puddle extends BaseEntity implements SaveTrait, Poolable, DrawTrait
|
|||||||
@Override
|
@Override
|
||||||
public void draw() {
|
public void draw() {
|
||||||
seeds = id;
|
seeds = id;
|
||||||
boolean onLiquid = tile.floor().liquid;
|
boolean onLiquid = tile.floor().isLiquid;
|
||||||
float f = Mathf.clamp(amount/(maxLiquid/1.5f));
|
float f = Mathf.clamp(amount/(maxLiquid/1.5f));
|
||||||
float smag = onLiquid ? 0.8f : 0f;
|
float smag = onLiquid ? 0.8f : 0f;
|
||||||
float sscl = 20f;
|
float sscl = 20f;
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ public abstract class GroundUnit extends BaseUnit {
|
|||||||
|
|
||||||
Floor floor = getFloorOn();
|
Floor floor = getFloorOn();
|
||||||
|
|
||||||
if(floor.liquid){
|
if(floor.isLiquid){
|
||||||
Draw.tint(Color.WHITE, floor.liquidColor, 0.5f);
|
Draw.tint(Color.WHITE, floor.liquidColor, 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@ public abstract class GroundUnit extends BaseUnit {
|
|||||||
12f * i, 12f - Mathf.clamp(ft * i, 0, 2), baseRotation - 90);
|
12f * i, 12f - Mathf.clamp(ft * i, 0, 2), baseRotation - 90);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(floor.liquid) {
|
if(floor.isLiquid) {
|
||||||
Draw.tint(Color.WHITE, floor.liquidColor, drownTime * 0.4f);
|
Draw.tint(Color.WHITE, floor.liquidColor, drownTime * 0.4f);
|
||||||
}else {
|
}else {
|
||||||
Draw.tint(Color.WHITE);
|
Draw.tint(Color.WHITE);
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package io.anuke.mindustry.graphics;
|
||||||
|
|
||||||
|
/**Used for generating extra textures before packing.*/
|
||||||
|
public class TextureGenerator {
|
||||||
|
|
||||||
|
public static void main(String[] args){
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -173,6 +173,16 @@ public class TypeIO {
|
|||||||
return Upgrade.getByID(buffer.get());
|
return Upgrade.getByID(buffer.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@WriteClass(Mech.class)
|
||||||
|
public static void writeMech(ByteBuffer buffer, Mech mech){
|
||||||
|
buffer.put(mech.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ReadClass(Mech.class)
|
||||||
|
public static Mech readMech(ByteBuffer buffer){
|
||||||
|
return Upgrade.getByID(buffer.get());
|
||||||
|
}
|
||||||
|
|
||||||
@WriteClass(Liquid.class)
|
@WriteClass(Liquid.class)
|
||||||
public static void writeLiquid(ByteBuffer buffer, Liquid liquid){
|
public static void writeLiquid(ByteBuffer buffer, Liquid liquid){
|
||||||
buffer.put((byte)liquid.id);
|
buffer.put((byte)liquid.id);
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ public class Liquid implements UnlockableContent{
|
|||||||
public Color flameColor = Color.valueOf("ffb763");
|
public Color flameColor = Color.valueOf("ffb763");
|
||||||
/**The associated status effect.*/
|
/**The associated status effect.*/
|
||||||
public StatusEffect effect = StatusEffects.none;
|
public StatusEffect effect = StatusEffects.none;
|
||||||
|
/**Pump tier. Controls which pumps can use this liquid.*/
|
||||||
|
public int tier;
|
||||||
|
|
||||||
public Liquid(String name, Color color) {
|
public Liquid(String name, Color color) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package io.anuke.mindustry.type;
|
package io.anuke.mindustry.type;
|
||||||
|
|
||||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||||
|
import io.anuke.mindustry.content.Weapons;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
|
|
||||||
public class Mech extends Upgrade {
|
public class Mech extends Upgrade {
|
||||||
@@ -10,6 +11,7 @@ public class Mech extends Upgrade {
|
|||||||
public float mass = 1f;
|
public float mass = 1f;
|
||||||
public int drillPower = -1;
|
public int drillPower = -1;
|
||||||
public float carryWeight = 1f;
|
public float carryWeight = 1f;
|
||||||
|
public Weapon weapon = Weapons.blaster;
|
||||||
|
|
||||||
public TextureRegion baseRegion, legRegion, region;
|
public TextureRegion baseRegion, legRegion, region;
|
||||||
|
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ public class PlayerListFragment implements Fragment{
|
|||||||
public void draw(){
|
public void draw(){
|
||||||
float s = getWidth() / 12f;
|
float s = getWidth() / 12f;
|
||||||
for(int i : Mathf.signs){
|
for(int i : Mathf.signs){
|
||||||
Draw.rect((player.weapon.name)
|
Draw.rect((player.mech.weapon.name)
|
||||||
+ "-equip", x + s * 6 + i * 3*s, y + s*6 + 2*s, -8*s*i, 8*s);
|
+ "-equip", x + s * 6 + i * 3*s, y + s*6 + 2*s, -8*s*i, 8*s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,8 +69,6 @@ public class Block extends BaseBlock implements UnlockableContent{
|
|||||||
public boolean rotate;
|
public boolean rotate;
|
||||||
/**whether you can break this with rightclick*/
|
/**whether you can break this with rightclick*/
|
||||||
public boolean breakable;
|
public boolean breakable;
|
||||||
/**whether this block can be drowned in*/
|
|
||||||
public boolean liquid;
|
|
||||||
/**whether this floor can be placed on.*/
|
/**whether this floor can be placed on.*/
|
||||||
public boolean placeableOn = true;
|
public boolean placeableOn = true;
|
||||||
/**tile entity health*/
|
/**tile entity health*/
|
||||||
@@ -308,7 +306,7 @@ public class Block extends BaseBlock implements UnlockableContent{
|
|||||||
}
|
}
|
||||||
|
|
||||||
Damage.dynamicExplosion(x, y, flammability, explosiveness, power, tilesize * size/2f, tempColor);
|
Damage.dynamicExplosion(x, y, flammability, explosiveness, power, tilesize * size/2f, tempColor);
|
||||||
if(!tile.floor().solid && !tile.floor().liquid){
|
if(!tile.floor().solid && !tile.floor().isLiquid){
|
||||||
Rubble.create(tile.drawx(), tile.drawy(), size);
|
Rubble.create(tile.drawx(), tile.drawy(), size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -317,7 +315,7 @@ public class Block extends BaseBlock implements UnlockableContent{
|
|||||||
* Takes flammability of floor liquid into account.*/
|
* Takes flammability of floor liquid into account.*/
|
||||||
public float getFlammability(Tile tile){
|
public float getFlammability(Tile tile){
|
||||||
if(!hasItems || tile.entity == null){
|
if(!hasItems || tile.entity == null){
|
||||||
if(tile.floor().liquid && !solid){
|
if(tile.floor().isLiquid && !solid){
|
||||||
return tile.floor().liquidDrop.flammability;
|
return tile.floor().liquidDrop.flammability;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ public class BreakBlock extends Block {
|
|||||||
public void onDestroyed(Tile tile){
|
public void onDestroyed(Tile tile){
|
||||||
Effects.effect(ExplosionFx.blockExplosionSmoke, tile);
|
Effects.effect(ExplosionFx.blockExplosionSmoke, tile);
|
||||||
|
|
||||||
if(!tile.floor().solid && !tile.floor().liquid){
|
if(!tile.floor().solid && !tile.floor().isLiquid){
|
||||||
Rubble.create(tile.drawx(), tile.drawy(), size);
|
Rubble.create(tile.drawx(), tile.drawy(), size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ public class BuildBlock extends Block {
|
|||||||
public void onDestroyed(Tile tile){
|
public void onDestroyed(Tile tile){
|
||||||
Effects.effect(ExplosionFx.blockExplosionSmoke, tile);
|
Effects.effect(ExplosionFx.blockExplosionSmoke, tile);
|
||||||
|
|
||||||
if(!tile.floor().solid && !tile.floor().liquid){
|
if(!tile.floor().solid && !tile.floor().isLiquid){
|
||||||
Rubble.create(tile.drawx(), tile.drawy(), size);
|
Rubble.create(tile.drawx(), tile.drawy(), size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,6 +59,8 @@ public class Floor extends Block{
|
|||||||
public Liquid liquidDrop = null;
|
public Liquid liquidDrop = null;
|
||||||
/**Whether ores generate on this block.*/
|
/**Whether ores generate on this block.*/
|
||||||
public boolean hasOres = true;
|
public boolean hasOres = true;
|
||||||
|
/**whether this block can be drowned in*/
|
||||||
|
public boolean isLiquid;
|
||||||
|
|
||||||
public Floor(String name) {
|
public Floor(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
@@ -113,7 +115,7 @@ public class Floor extends Block{
|
|||||||
public void init(){
|
public void init(){
|
||||||
super.init();
|
super.init();
|
||||||
|
|
||||||
if(liquid && liquidColor == null){
|
if(isLiquid && liquidColor == null){
|
||||||
throw new RuntimeException("All liquids must define a liquidColor! Problematic block: " + name);
|
throw new RuntimeException("All liquids must define a liquidColor! Problematic block: " + name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import io.anuke.mindustry.gen.CallBlocks;
|
|||||||
import io.anuke.mindustry.graphics.Palette;
|
import io.anuke.mindustry.graphics.Palette;
|
||||||
import io.anuke.mindustry.graphics.Shaders;
|
import io.anuke.mindustry.graphics.Shaders;
|
||||||
import io.anuke.mindustry.net.In;
|
import io.anuke.mindustry.net.In;
|
||||||
|
import io.anuke.mindustry.type.Mech;
|
||||||
import io.anuke.mindustry.type.Upgrade;
|
import io.anuke.mindustry.type.Upgrade;
|
||||||
import io.anuke.mindustry.type.Weapon;
|
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
@@ -31,9 +31,9 @@ import java.io.DataInputStream;
|
|||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class WeaponFactory extends Block{
|
public class MechFactory extends Block{
|
||||||
|
|
||||||
public WeaponFactory(String name){
|
public MechFactory(String name){
|
||||||
super(name);
|
super(name);
|
||||||
solid = true;
|
solid = true;
|
||||||
destructible = true;
|
destructible = true;
|
||||||
@@ -43,12 +43,12 @@ public class WeaponFactory extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(Tile tile) {
|
public void draw(Tile tile) {
|
||||||
WeaponFactoryEntity entity = tile.entity();
|
MechFactoryEntity entity = tile.entity();
|
||||||
|
|
||||||
Draw.rect(name, tile.drawx(), tile.drawy());
|
Draw.rect(name, tile.drawx(), tile.drawy());
|
||||||
|
|
||||||
if(entity.current != null) {
|
if(entity.current != null) {
|
||||||
TextureRegion region = entity.current.equipRegion;
|
TextureRegion region = entity.current.region;
|
||||||
|
|
||||||
Shaders.build.region = region;
|
Shaders.build.region = region;
|
||||||
Shaders.build.progress = entity.progress;
|
Shaders.build.progress = entity.progress;
|
||||||
@@ -74,7 +74,7 @@ public class WeaponFactory extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(Tile tile) {
|
public void update(Tile tile) {
|
||||||
WeaponFactoryEntity entity = tile.entity();
|
MechFactoryEntity entity = tile.entity();
|
||||||
|
|
||||||
if(entity.current != null){
|
if(entity.current != null){
|
||||||
entity.heat = Mathf.lerpDelta(entity.heat, 1f, 0.1f);
|
entity.heat = Mathf.lerpDelta(entity.heat, 1f, 0.1f);
|
||||||
@@ -82,7 +82,7 @@ public class WeaponFactory extends Block{
|
|||||||
entity.progress += 1f / Vars.respawnduration;
|
entity.progress += 1f / Vars.respawnduration;
|
||||||
|
|
||||||
if(entity.progress >= 1f){
|
if(entity.progress >= 1f){
|
||||||
CallBlocks.onWeaponFactoryDone(tile, entity.current);
|
CallBlocks.onMechFactoryDone(tile, entity.current);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
entity.heat = Mathf.lerpDelta(entity.heat, 0f, 0.1f);
|
entity.heat = Mathf.lerpDelta(entity.heat, 0f, 0.1f);
|
||||||
@@ -91,7 +91,7 @@ public class WeaponFactory extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void buildTable(Tile tile, Table table) {
|
public void buildTable(Tile tile, Table table) {
|
||||||
WeaponFactoryEntity entity = tile.entity();
|
MechFactoryEntity entity = tile.entity();
|
||||||
|
|
||||||
Table cont = new Table();
|
Table cont = new Table();
|
||||||
|
|
||||||
@@ -108,7 +108,7 @@ public class WeaponFactory extends Block{
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void showSelect(Tile tile, Table cont){
|
protected void showSelect(Tile tile, Table cont){
|
||||||
WeaponFactoryEntity entity = tile.entity();
|
MechFactoryEntity entity = tile.entity();
|
||||||
|
|
||||||
Array<Upgrade> items = Upgrade.all();
|
Array<Upgrade> items = Upgrade.all();
|
||||||
|
|
||||||
@@ -118,13 +118,13 @@ public class WeaponFactory extends Block{
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
for (Upgrade upgrade : items) {
|
for (Upgrade upgrade : items) {
|
||||||
if (!(upgrade instanceof Weapon)) continue;
|
if (!(upgrade instanceof Mech)) continue;
|
||||||
Weapon weapon = (Weapon) upgrade;
|
Mech mech = (Mech) upgrade;
|
||||||
|
|
||||||
ImageButton button = cont.addImageButton("white", "toggle", 24, () -> CallBlocks.setWeaponFactoryWeapon(null, tile, weapon))
|
ImageButton button = cont.addImageButton("white", "toggle", 24, () -> CallBlocks.setMechFactory(null, tile, mech))
|
||||||
.size(38, 42).padBottom(-5.1f).group(group).get();
|
.size(38, 42).padBottom(-5.1f).group(group).get();
|
||||||
button.getStyle().imageUp = new TextureRegionDrawable(new TextureRegion(weapon.region));
|
button.getStyle().imageUp = new TextureRegionDrawable(new TextureRegion(mech.region));
|
||||||
button.setChecked(entity.current == weapon);
|
button.setChecked(entity.current == mech);
|
||||||
|
|
||||||
if (i++ % 4 == 3) {
|
if (i++ % 4 == 3) {
|
||||||
cont.row();
|
cont.row();
|
||||||
@@ -142,14 +142,14 @@ public class WeaponFactory extends Block{
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void showResult(Tile tile, Table cont){
|
protected void showResult(Tile tile, Table cont){
|
||||||
WeaponFactoryEntity entity = tile.entity();
|
MechFactoryEntity entity = tile.entity();
|
||||||
|
|
||||||
Weapon weapon = entity.result;
|
Mech mech = entity.result;
|
||||||
|
|
||||||
ImageButton button = cont.addImageButton("white", "toggle", 24, () -> CallBlocks.setWeaponFactoryWeapon(null, tile, weapon))
|
ImageButton button = cont.addImageButton("white", "toggle", 24, () -> CallBlocks.pickupMechFactory(null, tile))
|
||||||
.size(38, 42).padBottom(-5.1f).get();
|
.size(38, 42).padBottom(-5.1f).get();
|
||||||
button.getStyle().imageUp = new TextureRegionDrawable(new TextureRegion(weapon.region));
|
button.getStyle().imageUp = new TextureRegionDrawable(new TextureRegion(mech.region));
|
||||||
button.setChecked(entity.current == weapon);
|
button.setChecked(entity.current == mech);
|
||||||
|
|
||||||
cont.update(() -> {
|
cont.update(() -> {
|
||||||
//show selection menu when result disappears
|
//show selection menu when result disappears
|
||||||
@@ -163,15 +163,15 @@ public class WeaponFactory extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TileEntity getEntity() {
|
public TileEntity getEntity() {
|
||||||
return new WeaponFactoryEntity();
|
return new MechFactoryEntity();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Remote(targets = Loc.both, called = Loc.server, in = In.blocks, forward = true)
|
@Remote(targets = Loc.both, called = Loc.server, in = In.blocks, forward = true)
|
||||||
public static void pickupWeaponFactoryWeapon(Player player, Tile tile){
|
public static void pickupMechFactory(Player player, Tile tile){
|
||||||
WeaponFactoryEntity entity = tile.entity();
|
MechFactoryEntity entity = tile.entity();
|
||||||
|
|
||||||
if(entity.current != null){
|
if(entity.current != null){
|
||||||
player.upgrades.add(entity.current);
|
player.mech = entity.current;
|
||||||
entity.current = null;
|
entity.current = null;
|
||||||
entity.progress = 0;
|
entity.progress = 0;
|
||||||
entity.result = null;
|
entity.result = null;
|
||||||
@@ -179,28 +179,28 @@ public class WeaponFactory extends Block{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Remote(targets = Loc.both, called = Loc.server, in = In.blocks, forward = true)
|
@Remote(targets = Loc.both, called = Loc.server, in = In.blocks, forward = true)
|
||||||
public static void setWeaponFactoryWeapon(Player player, Tile tile, Weapon weapon){
|
public static void setMechFactory(Player player, Tile tile, Mech weapon){
|
||||||
WeaponFactoryEntity entity = tile.entity();
|
MechFactoryEntity entity = tile.entity();
|
||||||
entity.current = weapon;
|
entity.current = weapon;
|
||||||
entity.progress = 0f;
|
entity.progress = 0f;
|
||||||
entity.heat = 0f;
|
entity.heat = 0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Remote(called = Loc.server, in = In.blocks)
|
@Remote(called = Loc.server, in = In.blocks)
|
||||||
public static void onWeaponFactoryDone(Tile tile, Weapon result){
|
public static void onMechFactoryDone(Tile tile, Mech result){
|
||||||
WeaponFactoryEntity entity = tile.entity();
|
MechFactoryEntity entity = tile.entity();
|
||||||
Effects.effect(Fx.spawn, entity);
|
Effects.effect(Fx.spawn, entity);
|
||||||
entity.current = null;
|
entity.current = null;
|
||||||
entity.progress = 0;
|
entity.progress = 0;
|
||||||
entity.result = result;
|
entity.result = result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class WeaponFactoryEntity extends TileEntity{
|
public class MechFactoryEntity extends TileEntity{
|
||||||
public Weapon current;
|
public Mech current;
|
||||||
|
public Mech result;
|
||||||
public float progress;
|
public float progress;
|
||||||
public float time;
|
public float time;
|
||||||
public float heat;
|
public float heat;
|
||||||
public Weapon result;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(DataOutputStream stream) throws IOException {
|
public void write(DataOutputStream stream) throws IOException {
|
||||||
@@ -9,12 +9,19 @@ import io.anuke.mindustry.world.blocks.LiquidBlock;
|
|||||||
import io.anuke.mindustry.world.meta.BlockGroup;
|
import io.anuke.mindustry.world.meta.BlockGroup;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
|
import io.anuke.ucore.util.Mathf;
|
||||||
import io.anuke.ucore.util.Strings;
|
import io.anuke.ucore.util.Strings;
|
||||||
|
|
||||||
public class Pump extends LiquidBlock{
|
public class Pump extends LiquidBlock{
|
||||||
protected final Array<Tile> drawTiles = new Array<>();
|
protected final Array<Tile> drawTiles = new Array<>();
|
||||||
|
protected final Array<Tile> updateTiles = new Array<>();
|
||||||
|
|
||||||
|
/**Pump amount per tile this block is on.*/
|
||||||
protected float pumpAmount = 1f;
|
protected float pumpAmount = 1f;
|
||||||
|
/**Power used per frame per tile this block is on.*/
|
||||||
|
protected float powerUse = 0f;
|
||||||
|
/**Maximum liquid tier this pump can use.*/
|
||||||
|
protected int tier = 0;
|
||||||
|
|
||||||
public Pump(String name) {
|
public Pump(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
@@ -53,12 +60,18 @@ public class Pump extends LiquidBlock{
|
|||||||
@Override
|
@Override
|
||||||
public boolean canPlaceOn(Tile tile) {
|
public boolean canPlaceOn(Tile tile) {
|
||||||
if(isMultiblock()){
|
if(isMultiblock()){
|
||||||
|
Liquid last = null;
|
||||||
for(Tile other : tile.getLinkedTiles(drawTiles)){
|
for(Tile other : tile.getLinkedTiles(drawTiles)){
|
||||||
if(isValid(other)){
|
//can't place pump on block with multiple liquids
|
||||||
return true;
|
if(last != null && other.floor().liquidDrop != last){
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isValid(other)){
|
||||||
|
last = other.floor().liquidDrop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return last != null;
|
||||||
}else{
|
}else{
|
||||||
return isValid(tile);
|
return isValid(tile);
|
||||||
}
|
}
|
||||||
@@ -66,10 +79,34 @@ public class Pump extends LiquidBlock{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(Tile tile){
|
public void update(Tile tile){
|
||||||
|
float tiles = 0f;
|
||||||
|
Liquid liquidDrop = null;
|
||||||
|
|
||||||
if(tile.floor().liquidDrop != null){
|
if(isMultiblock()){
|
||||||
float maxPump = Math.min(liquidCapacity - tile.entity.liquids.amount, pumpAmount * Timers.delta());
|
for(Tile other : tile.getLinkedTiles(updateTiles)){
|
||||||
tile.entity.liquids.liquid = tile.floor().liquidDrop;
|
if(isValid(other)){
|
||||||
|
liquidDrop = other.floor().liquidDrop;
|
||||||
|
tiles ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
tiles = 1f;
|
||||||
|
liquidDrop = tile.floor().liquidDrop;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(hasPower){
|
||||||
|
float used = Math.min(powerCapacity, tiles * powerUse * Timers.delta());
|
||||||
|
|
||||||
|
//multiply liquid obtained by the fraction of power this pump has to pump it
|
||||||
|
//e.g. only has 50% power required = only pumps 50% of liquid that it can
|
||||||
|
tiles *= Mathf.clamp(tile.entity.power.amount / used);
|
||||||
|
|
||||||
|
tile.entity.power.amount -= Math.min(tile.entity.power.amount, used);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(liquidDrop != null){
|
||||||
|
float maxPump = Math.min(liquidCapacity - tile.entity.liquids.amount, tiles * pumpAmount * Timers.delta());
|
||||||
|
tile.entity.liquids.liquid = liquidDrop;
|
||||||
tile.entity.liquids.amount += maxPump;
|
tile.entity.liquids.amount += maxPump;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +114,7 @@ public class Pump extends LiquidBlock{
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected boolean isValid(Tile tile){
|
protected boolean isValid(Tile tile){
|
||||||
return tile.floor().liquidDrop != null;
|
return tile.floor().liquidDrop != null && tier >= tile.floor().liquidDrop.tier;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ public class SolidPump extends Pump {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected boolean isValid(Tile tile){
|
protected boolean isValid(Tile tile){
|
||||||
return !tile.floor().liquid;
|
return !tile.floor().isLiquid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||