Payload API changes
|
|
@ -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
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 720 B After Width: | Height: | Size: 724 B |
|
Before Width: | Height: | Size: 820 KiB After Width: | Height: | Size: 812 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 244 KiB After Width: | Height: | Size: 239 KiB |
|
Before Width: | Height: | Size: 867 KiB After Width: | Height: | Size: 876 KiB |
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||