Added unit drops, boosting

This commit is contained in:
Anuken
2018-06-21 15:58:37 -04:00
parent a76e99af86
commit f7dbe807e4
17 changed files with 263 additions and 196 deletions

View File

@@ -40,7 +40,7 @@ public class Vars{
//waves can last no longer than 3 minutes, otherwise the next one spawns
public static final float maxwavespace = 60*60*4f;
public static final float coreBuildRange = 400f;
public static final float coreBuildRange = 800f;
//discord group URL
public static final String discordURL = "https://discord.gg/BKADYds";

View File

@@ -15,32 +15,32 @@ public class AmmoTypes implements ContentList {
//bullets
bulletIron = new AmmoType(Items.iron, StandardBullets.iron, 5) {{
bulletIron = new AmmoType(Items.iron, StandardBullets.iron, 3) {{
shootEffect = ShootFx.shootSmall;
smokeEffect = ShootFx.shootSmallSmoke;
}};
bulletLead = new AmmoType(Items.lead, StandardBullets.lead, 5) {{
bulletLead = new AmmoType(Items.lead, StandardBullets.lead, 3) {{
shootEffect = ShootFx.shootSmall;
smokeEffect = ShootFx.shootSmallSmoke;
}};
bulletSteel = new AmmoType(Items.steel, StandardBullets.steel, 5) {{
bulletSteel = new AmmoType(Items.steel, StandardBullets.steel, 3) {{
shootEffect = ShootFx.shootSmall;
smokeEffect = ShootFx.shootSmallSmoke;
}};
bulletThorium = new AmmoType(Items.thorium, StandardBullets.thorium, 5) {{
bulletThorium = new AmmoType(Items.thorium, StandardBullets.thorium, 3) {{
shootEffect = ShootFx.shootSmall;
smokeEffect = ShootFx.shootSmallSmoke;
}};
bulletSilicon = new AmmoType(Items.silicon, StandardBullets.homing, 5) {{
bulletSilicon = new AmmoType(Items.silicon, StandardBullets.homing, 3) {{
shootEffect = ShootFx.shootSmall;
smokeEffect = ShootFx.shootSmallSmoke;
}};
bulletThermite = new AmmoType(Items.thermite, StandardBullets.tracer, 5) {{
bulletThermite = new AmmoType(Items.thermite, StandardBullets.tracer, 3) {{
shootEffect = ShootFx.shootSmall;
smokeEffect = ShootFx.shootSmallSmoke;
}};

View File

@@ -17,26 +17,22 @@ public class Mechs implements ContentList {
alpha = new Mech("alpha-mech", false){{
drillPower = 2;
speed = 1.1f;
maxSpeed = 1.1f;
speed = 0.5f;
}};
delta = new Mech("delta-mech", false){{
drillPower = -1;
speed = 1.5f;
maxSpeed = 1.5f;
speed = 0.6f;
}};
tau = new Mech("tau-mech", false){{
drillPower = 2;
speed = 1.1f;
maxSpeed = 1.1f;
speed = 0.5f;
}};
omega = new Mech("omega-mech", false){{
drillPower = 1;
speed = 1.0f;
maxSpeed = 1.0f;
speed = 0.4f;
}};
dart = new Mech("dart-ship", true){{

View File

@@ -40,6 +40,7 @@ public class Recipes implements ContentList{
new Recipe(power, PowerBlocks.battery, new ItemStack(Items.iron, 8), new ItemStack(Items.lead, 30));
//new Recipe(power, PowerBlocks.batteryLarge, new ItemStack(Items.steel, 5), new ItemStack(Items.iron, 5));
new Recipe(power, PowerBlocks.combustiongenerator, new ItemStack(Items.iron, 30), new ItemStack(Items.lead, 30));
//new Recipe(distribution, StorageBlocks.vault, new ItemStack(Items.steel, 50));
//new Recipe(distribution, StorageBlocks.core, new ItemStack(Items.steel, 50));
//new Recipe(distribution, StorageBlocks.unloader, new ItemStack(Items.steel, 5));
@@ -49,6 +50,10 @@ public class Recipes implements ContentList{
new Recipe(production, ProductionBlocks.reinforcedDrill, new ItemStack(Items.iron, 20), new ItemStack(Items.lead, 20));
new Recipe(production, ProductionBlocks.steelDrill, new ItemStack(Items.iron, 40), new ItemStack(Items.lead, 25), new ItemStack(Items.steel, 25));
new Recipe(production, ProductionBlocks.titaniumDrill, new ItemStack(Items.iron, 40), new ItemStack(Items.titanium, 40), new ItemStack(Items.steel, 40));
new Recipe(units, UnitBlocks.droneFactory, new ItemStack(Items.iron, 50), new ItemStack(Items.lead, 50));
new Recipe(units, UnitBlocks.repairPoint, new ItemStack(Items.lead, 20), new ItemStack(Items.steel, 10));
/*
new Recipe(production, ProductionBlocks.laserdrill, new ItemStack(Items.titanium, 40), new ItemStack(Items.surgealloy, 40));
new Recipe(production, ProductionBlocks.nucleardrill, new ItemStack(Items.titanium, 40), new ItemStack(Items.surgealloy, 40));

View File

@@ -21,7 +21,8 @@ public class DefenseBlocks extends BlockList implements ContentList {
}};
ironwalllarge = new Wall("ironwall-large") {{
health = 80 * wallHealthMultiplier;
health = 80 * 4 * wallHealthMultiplier;
size = 2;
}};
steelwall = new Wall("steelwall") {{

View File

@@ -170,8 +170,10 @@ public class NetServer extends Module{
long elapsed = TimeUtils.timeSinceMillis(connection.lastRecievedTime);
float maxSpeed = packet.boosting ? player.mech.boostSpeed : player.mech.speed;
//extra 1.1x multiplicaton is added just in case
float maxMove = elapsed / 1000f * 60f * player.mech.maxSpeed * 1.1f;
float maxMove = elapsed / 1000f * 60f * maxSpeed * 1.1f;
player.pointerX = packet.pointerX;
player.pointerY = packet.pointerY;

View File

@@ -32,7 +32,10 @@ import io.anuke.ucore.entities.EntityGroup;
import io.anuke.ucore.entities.trait.SolidTrait;
import io.anuke.ucore.graphics.Draw;
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.DataOutput;
@@ -54,7 +57,8 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
public float pointerX, pointerY;
public String name = "name";
public String uuid, usid;
public boolean isAdmin, isTransferring, isShooting;
public boolean isAdmin, isTransferring, isShooting, isBoosting;
public float boostHeat;
public Color color = new Color();
public Mech mech;
@@ -83,7 +87,6 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
//region unit and event overrides, utility methods
@Override
public int getItemCapacity() {
return mech.itemCapacity;
@@ -250,10 +253,12 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
if((debug && (!showPlayer || !showUI)) || dead) return;
if(!movement.isZero() && moved){
walktime += Timers.delta() * movement.len()/1.6f * getFloorOn().speedMultiplier;
walktime += Timers.delta() * movement.len()/0.7f * getFloorOn().speedMultiplier;
baseRotation = Mathf.slerpDelta(baseRotation, movement.angle(), 0.13f);
}
boostHeat = Mathf.lerpDelta(boostHeat, isBoosting ? 1f : 0f, 0.08f);
boolean snap = snapCamera && isLocal;
float px = x, py =y;
@@ -263,7 +268,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
y = (int)y;
}
float ft = Mathf.sin(walktime, 6f, 2f);
float ft = Mathf.sin(walktime, 6f, 2f) * (1f-boostHeat);
Floor floor = getFloorOn();
@@ -275,11 +280,15 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
Draw.tint(Color.WHITE, floor.liquidColor, 0.5f);
}
float boostTrnsY = -boostHeat * 3f;
float boostTrnsX = boostHeat * 3f;
float boostAng = boostHeat*40f;
for (int i : Mathf.signs) {
Draw.rect(mech.legRegion,
x + Angles.trnsx(baseRotation, ft * i),
y + Angles.trnsy(baseRotation, ft * i),
12f * i, 12f - Mathf.clamp(ft * i, 0, 2), baseRotation - 90);
x + Angles.trnsx(baseRotation, ft * i + boostTrnsY, -boostTrnsX*i),
y + Angles.trnsy(baseRotation, ft * i + boostTrnsY, -boostTrnsX*i),
12f * i, 12f - Mathf.clamp(ft * i, 0, 2), baseRotation - 90 + boostAng*i);
}
Draw.rect(mech.baseRegion, x, y, baseRotation- 90);
@@ -328,8 +337,13 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
drawBuilding(this);
}
if(mech.flying){
trail.draw(Palette.lighterOrange, Palette.lightishOrange, 5f);
if(mech.flying || boostHeat > 0.001f){
float wobblyness = 0.6f;
trail.update(x + Angles.trnsx(rotation + 180f, 5f) + Mathf.range(wobblyness),
y + Angles.trnsy(rotation + 180f, 5f) + Mathf.range(wobblyness));
trail.draw(Palette.lighterOrange, Palette.lightishOrange, 5f * (isFlying() ? 1f : boostHeat));
}else{
trail.clear();
}
}
@@ -421,11 +435,6 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
avoidOthers(8f);
float wobblyness = 0.6f;
trail.update(x + Angles.trnsx(rotation + 180f, 6f) + Mathf.range(wobblyness),
y + Angles.trnsy(rotation + 180f, 6f) + Mathf.range(wobblyness));
if(!isShooting()) {
updateBuilding(this);
}
@@ -444,7 +453,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
if(ui.chatfrag.chatOpen()) return;
float speed = Inputs.keyDown("dash") && debug ? 5f : mech.speed;
float speed = isBoosting ? mech.boostSpeed : mech.speed;
float carrySlowdown = 0.3f;
speed *= ((1f-carrySlowdown) + (inventory.hasItem() ? (float)inventory.getItem().amount/inventory.capacity(): 1f) * carrySlowdown);
@@ -474,14 +483,12 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
}
}
movement.set(0, 0);
movement.setZero();
String section = "player_" + (playerIndex + 1);
float xa = Inputs.getAxis(section, "move_x");
float ya = Inputs.getAxis(section, "move_y");
if(Math.abs(xa) < 0.3) xa = 0;
if(Math.abs(ya) < 0.3) ya = 0;
movement.y += ya*speed;
movement.x += xa*speed;
@@ -497,7 +504,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
velocity.add(movement);
float prex = x, prey = y;
updateVelocityStatus(mech.drag, debug ? speed : mech.maxSpeed);
updateVelocityStatus(mech.drag, 10f);
moved = distanceTo(prex, prey) > 0.01f;
if(!isShooting()){
@@ -620,7 +627,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
}
public boolean isShooting(){
return isShooting && inventory.hasAmmo();
return isShooting && inventory.hasAmmo() && !isBoosting;
}
public void setRespawning(){
@@ -680,6 +687,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
buffer.writeInt(Color.rgba8888(color));
buffer.writeBoolean(dead);
buffer.writeByte(mech.id);
buffer.writeBoolean(isBoosting);
}
@Override
@@ -691,12 +699,15 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
color.set(buffer.readInt());
dead = buffer.readBoolean();
mech = Upgrade.getByID(buffer.readByte());
boolean dashing = buffer.readBoolean();
interpolator.read(lastx, lasty, x, y, time, rotation);
rotation = lastrot;
if(isLocal){
x = lastx;
y = lasty;
}else{
isBoosting = dashing;
}
}

View File

@@ -306,6 +306,7 @@ public abstract class BaseUnit extends Unit{
if(unit == null) return;
unit.onSuperDeath();
UnitDrops.dropItems(unit);
Effects.effect(ExplosionFx.explosion, unit);
Effects.shake(2f, 2f, unit);

View File

@@ -0,0 +1,24 @@
package io.anuke.mindustry.entities.units;
import io.anuke.mindustry.content.Items;
import io.anuke.mindustry.gen.CallEntity;
import io.anuke.mindustry.type.Item;
import io.anuke.ucore.util.Mathf;
public class UnitDrops {
private static Item[] dropTable;
public static void dropItems(BaseUnit unit){
if(dropTable == null){
dropTable = new Item[]{Items.iron, Items.lead, Items.steel};
}
for(Item item : dropTable){
if(Mathf.chance(0.2)){
int amount = Mathf.random(1, 30);
CallEntity.createItemDrop(item, amount, unit.x + Mathf.range(2f), unit.y + Mathf.range(2f),
unit.getVelocity().x + Mathf.range(0.5f), unit.getVelocity().y + Mathf.range(0.5f));
}
}
}
}

View File

@@ -126,6 +126,8 @@ public class DesktopInput extends InputHandler{
public void update(){
if(player.isDead() || state.is(State.menu) || ui.hasDialog()) return;
player.isBoosting = Inputs.keyDown("dash");
//deslect if not placing
if(!isPlacing() && mode == placing){
mode = none;

View File

@@ -104,6 +104,7 @@ public class Packets {
public long timeSent;
//player snapshot data
public float x, y, pointerX, pointerY, rotation, baseRotation, xv, yv;
public boolean boosting;
@Override
public void write(ByteBuffer buffer) {
@@ -117,6 +118,7 @@ public class Packets {
buffer.putFloat(player.y);
buffer.putFloat(player.pointerX);
buffer.putFloat(player.pointerY);
buffer.put(player.isBoosting ? (byte)1 : 0);
buffer.put((byte)(Mathf.clamp(player.getVelocity().x, -Unit.maxAbsVelocity, Unit.maxAbsVelocity) * Unit.velocityPercision));
buffer.put((byte)(Mathf.clamp(player.getVelocity().y, -Unit.maxAbsVelocity, Unit.maxAbsVelocity) * Unit.velocityPercision));
@@ -135,6 +137,7 @@ public class Packets {
y = buffer.getFloat();
pointerX = buffer.getFloat();
pointerY = buffer.getFloat();
boosting = buffer.get() == 1;
xv = buffer.get() / Unit.velocityPercision;
yv = buffer.get() / Unit.velocityPercision;
rotation = buffer.getShort()/2f;

View File

@@ -9,6 +9,7 @@ public class Mech extends Upgrade {
public float speed = 1.1f;
public float maxSpeed = 1.1f;
public float boostSpeed = 0.75f;
public float drag = 0.4f;
public float mass = 1f;
public float armor = 1f;

View File

@@ -1,10 +1,12 @@
package io.anuke.mindustry.ui.fragments;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.Player;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.input.InputHandler;
import io.anuke.mindustry.type.Category;
import io.anuke.mindustry.type.ItemStack;
@@ -116,6 +118,7 @@ public class BlocksFragment implements Fragment{
int cati = 0;
int checkedi = 0;
int rowsUsed = 0;
//add categories
for (Category cat : Category.values()) {
@@ -184,6 +187,8 @@ public class BlocksFragment implements Fragment{
}
image.getImageCell().setActor(istack).size(size);
image.getStyle().imageUpColor = Color.WHITE;
image.getStyle().imageDisabledColor = Color.GRAY;
image.addChild(istack);
image.setTouchable(Touchable.enabled);
image.getImage().remove();
@@ -225,9 +230,23 @@ public class BlocksFragment implements Fragment{
}
});
image.setDisabled(() -> {
TileEntity entity = players[0].getClosestCore();
if(entity == null) return true;
for(ItemStack s : r.requirements){
if(!entity.items.hasItem(s.item, Mathf.ceil(s.amount/2f))){
return true;
}
}
return false;
});
recipeTable.add(image).size(size + 8);
image.update(() -> {
image.getImage().setColor(image.isDisabled() ? Color.GRAY : Color.WHITE);
for(Player player : players){
if(control.input(player.playerIndex).recipe == r){
image.setChecked(true);
@@ -238,6 +257,7 @@ public class BlocksFragment implements Fragment{
});
if (i % rows == rows - 1) {
rowsUsed = Math.max((i+1)/rows, rowsUsed);
recipeTable.row();
}
@@ -252,7 +272,7 @@ public class BlocksFragment implements Fragment{
}
selectTable.row();
selectTable.add(stack).growX().left().top().colspan(Category.values().length).padBottom(-5).height((size + 12)*maxrow);
selectTable.add(stack).growX().left().top().colspan(Category.values().length).padBottom(-5).height((size + 12)*rowsUsed);
}
void toggle(boolean show, float t, Interpolation ip){
@@ -305,14 +325,7 @@ public class BlocksFragment implements Fragment{
for(ItemStack stack : recipe.requirements){
requirements.addImage(stack.item.region).size(8*3);
Label reqlabel = new Label("");
reqlabel.update(() -> {
int current = stack.amount;
String text = Mathf.clamp(current, 0, stack.amount) + "/" + stack.amount;
reqlabel.setText(text);
});
Label reqlabel = new Label(() -> Mathf.clamp(stack.amount, 0, stack.amount) + "/" + stack.amount);
requirements.add(reqlabel).left();
requirements.row();

View File

@@ -36,7 +36,8 @@ public class ColorMapper{
"c3a490", pair(Blocks.iron),
"161616", pair(Blocks.coal),
"6277bc", pair(Blocks.titanium),
"83bc58", pair(Blocks.thorium),
"c594dc", pair(Blocks.thorium),
"9790b5", pair(Blocks.lead),
"000000", pair(Blocks.space)
);
}