Payload API changes

This commit is contained in:
Anuken 2020-05-25 15:03:31 -04:00
parent 732d90635f
commit aae6d2038b
13 changed files with 1994 additions and 1999 deletions

View file

@ -234,3 +234,4 @@
63510=air-factory|block-air-factory-medium
63509=basic-reconstructor|block-basic-reconstructor-medium
63508=block-loader|block-block-loader-medium
63507=block-unloader|block-block-unloader-medium

Binary file not shown.

Before

Width:  |  Height:  |  Size: 720 B

After

Width:  |  Height:  |  Size: 724 B

Before After
Before After

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 820 KiB

After

Width:  |  Height:  |  Size: 812 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 126 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 244 KiB

After

Width:  |  Height:  |  Size: 239 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 867 KiB

After

Width:  |  Height:  |  Size: 876 KiB

Before After
Before After

View file

@ -29,6 +29,7 @@ import mindustry.ui.dialogs.*;
import mindustry.world.*;
import mindustry.world.blocks.environment.*;
import mindustry.world.blocks.storage.*;
import mindustry.world.meta.*;
import static mindustry.Vars.*;
@ -683,7 +684,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
for(Block block : blocksOut){
TextureRegion region = block.icon(Cicon.medium);
if(!Core.atlas.isFound(region) || !block.inEditor) continue;
if(!Core.atlas.isFound(region) || !block.inEditor || (block.buildVisibility == BuildVisibility.debugOnly)) continue;
ImageButton button = new ImageButton(Tex.whiteui, Styles.clearTogglei);
button.getStyle().imageUp = new TextureRegionDrawable(region);

View file

@ -2,15 +2,12 @@ package mindustry.world.blocks.distribution;
import arc.*;
import arc.graphics.g2d.*;
import arc.input.*;
import arc.math.*;
import arc.math.geom.*;
import arc.util.ArcAnnotate.*;
import arc.util.*;
import arc.util.io.*;
import mindustry.annotations.Annotations.*;
import mindustry.content.*;
import mindustry.game.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.world.*;
@ -80,12 +77,7 @@ public class PayloadConveyor extends Block{
public void updateTile(){
progress = Time.time() % moveTime;
//TODO DEBUG
if(Core.input.keyTap(KeyCode.g) && world.entWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y) == this){
item = new UnitPayload((Mathf.chance(0.5) ? UnitTypes.wraith : UnitTypes.dagger).create(Team.sharded));
itemRotation = rotdeg();
animation = 0f;
}
updatePayload();
//TODO nondeterministic input priority
int curStep = curStep();
@ -106,9 +98,7 @@ public class PayloadConveyor extends Block{
}
}else if(!blocked){
//dump item forward
float trnext = size * tilesize / 2f, cx = Geometry.d4(rotation()).x, cy = Geometry.d4(rotation()).y;
if(item.dump(x + cx * trnext, y + cy * trnext, rotdeg())){
if(item.dump()){
item = null;
}
}
@ -159,25 +149,8 @@ public class PayloadConveyor extends Block{
Draw.z(Layer.blockOver);
if(animation > fract()){
animation = Mathf.lerp(animation, 0.8f, 0.15f);
}
animation = Math.max(animation, fract());
float fract = animation;
rot = Mathf.slerp(itemRotation, rotdeg(), fract);
if(fract < 0.5f){
Tmp.v1.trns(itemRotation + 180, (0.5f - fract) * tilesize * size);
}else{
Tmp.v1.trns(rotdeg(), (fract - 0.5f) * tilesize * size);
}
float vx = Tmp.v1.x, vy = Tmp.v1.y;
if(item != null){
item.draw(x + vx, y + vy, rot);
item.draw();
}
}
@ -192,6 +165,8 @@ public class PayloadConveyor extends Block{
this.stepAccepted = curStep();
this.itemRotation = source.angleTo(this);
this.animation = 0;
updatePayload();
}
@Override
@ -212,6 +187,29 @@ public class PayloadConveyor extends Block{
item = Payload.read(read);
}
public void updatePayload(){
if(item != null){
if(animation > fract()){
animation = Mathf.lerp(animation, 0.8f, 0.15f);
}
animation = Math.max(animation, fract());
float fract = animation;
float rot = Mathf.slerp(itemRotation, rotdeg(), fract);
if(fract < 0.5f){
Tmp.v1.trns(itemRotation + 180, (0.5f - fract) * tilesize * size);
}else{
Tmp.v1.trns(rotdeg(), (fract - 0.5f) * tilesize * size);
}
float vx = Tmp.v1.x, vy = Tmp.v1.y;
item.set(x + vx, y + vy, rot);
}
}
boolean blends(int direction){
if(direction == rotation()){
return !blocked || next != null;

View file

@ -38,13 +38,13 @@ public class BlockPayload implements Payload{
}
@Override
public void set(float x, float y){
public void set(float x, float y, float rotation){
entity.set(x, y);
}
@Override
public void draw(float x, float y, float rotation){
Drawf.shadow(x, y, entity.block().size * tilesize * 2f);
Draw.rect(entity.block().icon(Cicon.full), x, y, 0);
public void draw(){
Drawf.shadow(entity.x(), entity.y(), entity.block().size * tilesize * 2f);
Draw.rect(entity.block().icon(Cicon.full), entity.x(), entity.y());
}
}

View file

@ -11,20 +11,20 @@ import static mindustry.Vars.content;
public interface Payload{
int payloadUnit = 0, payloadBlock = 1;
/** sets this payload's position on the map. */
void set(float x, float y, float rotation);
/** draws this payload at a position. */
void draw(float x, float y, float rotation);
void draw();
/** @return whether this payload was dumped. */
default boolean dump(){
return false;
}
/** writes the payload for saving. */
void write(Writes write);
/** sets this payload's position on the map. */
void set(float x, float y);
/** @return whether this payload was dumped. */
default boolean dump(float x, float y, float rotation){
return false;
}
static void write(@Nullable Payload payload, Writes write){
if(payload == null){
write.bool(false);

View file

@ -22,27 +22,24 @@ public class UnitPayload implements Payload{
}
@Override
public void set(float x, float y){
public void set(float x, float y, float rotation){
unit.set(x, y);
unit.rotation(rotation);
}
@Override
public boolean dump(float x, float y, float rotation){
public boolean dump(){
//no client dumping
if(Vars.net.client()) return true;
unit.set(x, y);
unit.rotation(rotation);
unit.add();
return true;
}
@Override
public void draw(float x, float y, float rotation){
// Drawf.shadow(x, y, 24);
//Draw.rect("pneumatic-drill", x, y, rotation);
Drawf.shadow(x, y, 20);
Draw.rect(unit.type().icon(Cicon.full), x, y, rotation - 90);
public void draw(){
Drawf.shadow(unit.x(), unit.y(), 20);
Draw.rect(unit.type().icon(Cicon.full), unit.x(), unit.y(), unit.rotation() - 90);
}
}

View file

@ -46,13 +46,22 @@ public class PayloadAcceptor extends Block{
this.payload = (T)payload;
this.payVector.set(source).sub(this).clamp(-size * tilesize / 2f, size * tilesize / 2f, -size * tilesize / 2f, size * tilesize / 2f);
this.payRotation = source.angleTo(this);
updatePayload();
}
public void updatePayload(){
if(payload != null){
payload.set(x + payVector.x, y + payVector.y, payRotation);
}
}
/** @return true if the payload is in position. */
public boolean moveInPayload(){
if(payload == null) return false;
payload.set(x + payVector.x, y + payVector.y);
updatePayload();
payRotation = Mathf.slerpDelta(payRotation, rotate ? rotdeg() : 90f, 0.3f);
payVector.approachDelta(Vec2.ZERO, payloadSpeed);
@ -62,7 +71,8 @@ public class PayloadAcceptor extends Block{
public void moveOutPayload(){
if(payload == null) return;
payload.set(x + payVector.x, y + payVector.y);
updatePayload();
payVector.trns(rotdeg(), payVector.len() + edelta() * payloadSpeed);
payRotation = rotdeg();
@ -81,7 +91,7 @@ public class PayloadAcceptor extends Block{
}
public void dumpPayload(){
if(payload.dump(x + payVector.x, y + payVector.y, payRotation)){
if(payload.dump()){
payload = null;
}
}
@ -92,8 +102,10 @@ public class PayloadAcceptor extends Block{
public void drawPayload(){
if(payload != null){
payload.set(x + payVector.x, y + payVector.y, payRotation);
Draw.z(Layer.blockOver);
payload.draw(x + payVector.x, y + payVector.y, payRotation);
payload.draw();
}
}