Merge branch 'master' of https://github.com/Anuken/Mindustry into 7.0-features

 Conflicts:
	core/src/mindustry/type/UnitType.java
	gradle.properties
This commit is contained in:
Anuken
2021-11-04 19:39:16 -04:00
31 changed files with 285 additions and 94 deletions
@@ -61,6 +61,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
transient boolean updateFlow;
transient byte cdump;
transient int rotation;
transient float payloadRotation;
transient boolean enabled = true;
transient float enabledControlTime;
transient String lastAccessed;
@@ -1293,16 +1294,18 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
return true;
}
/** Called right before this building is picked up. */
public void pickedUp(){
}
/** Called right after this building is picked up. */
public void afterPickedUp(){
if(power != null){
if(power.graph != null){
power.graph.removeList(self());
power.graph = new PowerGraph();
}
power.graph = new PowerGraph();
power.links.clear();
power.status = 0f;
}
}
public void removeFromProximity(){
@@ -93,6 +93,7 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{
void pickup(Building tile){
tile.pickedUp();
tile.tile.remove();
tile.afterPickedUp();
addPayload(new BuildPayload(tile));
Fx.unitPickup.at(tile);
Events.fire(new PickupEvent(self(), tile));
@@ -0,0 +1,68 @@
package mindustry.entities.comp;
import arc.graphics.*;
import arc.graphics.g2d.*;
import arc.scene.ui.layout.*;
import arc.util.*;
import arc.util.pooling.*;
import mindustry.annotations.Annotations.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.ui.*;
/** Component/entity for labels in world space. Useful for servers. Does not save in files - create only on world load. */
@EntityDef(value = {WorldLabelc.class}, serialize = false)
@Component(base = true)
public abstract class WorldLabelComp implements Posc, Drawc, Syncc{
@Import int id;
@Import float x, y;
public static final byte flagBackground = 1, flagOutline = 2;
public String text = "sample text";
public float fontSize = 1f, z = Layer.playerName + 1;
/** Flags are packed into a byte for sync efficiency; see the flag static values. */
public byte flags = flagBackground | flagOutline;
@Replace
public float clipSize(){
return text.length() * 10f * fontSize;
}
@Override
public void draw(){
Draw.z(z);
float z = Drawf.text();
Font font = (flags & flagOutline) != 0 ? Fonts.outline : Fonts.def;
GlyphLayout layout = Pools.obtain(GlyphLayout.class, GlyphLayout::new);
boolean ints = font.usesIntegerPositions();
font.setUseIntegerPositions(false);
font.getData().setScale(0.25f / Scl.scl(1f) * fontSize);
layout.setText(font, text);
if((flags & flagBackground) != 0){
Draw.color(0f, 0f, 0f, 0.3f);
Fill.rect(x, y - layout.height / 2, layout.width + 2, layout.height + 3);
Draw.color();
}
font.setColor(Color.white);
font.draw(text, x, y, 0, Align.center, false);
Draw.reset();
Pools.free(layout);
font.getData().setScale(1f);
font.setColor(Color.white);
font.setUseIntegerPositions(ints);
Draw.z(z);
}
/** This MUST be called instead of remove()! */
public void hide(){
remove();
Call.removeWorldLabel(id);
}
}