Entity IO fixes
This commit is contained in:
@@ -58,7 +58,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
|
||||
remove();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Replace
|
||||
public float clipSize(){
|
||||
return type.drawSize;
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ abstract class DecalComp implements Drawc, Timedc, Rotc, Posc{
|
||||
Draw.color();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Replace
|
||||
public float clipSize(){
|
||||
return region.getWidth()*2;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,9 @@ import mindustry.gen.*;
|
||||
@Component
|
||||
abstract class DrawComp implements Posc{
|
||||
|
||||
abstract float clipSize();
|
||||
float clipSize(){
|
||||
return Float.MAX_VALUE;
|
||||
}
|
||||
|
||||
void draw(){
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ abstract class EffectComp implements Posc, Drawc, Timedc, Rotc, Childc{
|
||||
effect.render(id(), color, time(), rotation(), x(), y(), data);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Replace
|
||||
public float clipSize(){
|
||||
return effect.size;
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Replace
|
||||
public float clipSize(){
|
||||
return 20;
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Replace
|
||||
public float clipSize(){
|
||||
return 20;
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ import static mindustry.Vars.content;
|
||||
@Component
|
||||
abstract class StatusComp implements Posc, Flyingc{
|
||||
private Array<StatusEntry> statuses = new Array<>();
|
||||
private Bits applied = new Bits(content.getBy(ContentType.status).size);
|
||||
private transient Bits applied = new Bits(content.getBy(ContentType.status).size);
|
||||
|
||||
@ReadOnly transient float speedMultiplier, damageMultiplier, armorMultiplier;
|
||||
|
||||
@@ -145,31 +145,4 @@ abstract class StatusComp implements Posc, Flyingc{
|
||||
boolean hasEffect(StatusEffect effect){
|
||||
return applied.get(effect.id);
|
||||
}
|
||||
|
||||
//TODO autogen io code
|
||||
|
||||
void writeSave(DataOutput stream) throws IOException{
|
||||
stream.writeByte(statuses.size);
|
||||
for(StatusEntry entry : statuses){
|
||||
stream.writeByte(entry.effect.id);
|
||||
stream.writeFloat(entry.time);
|
||||
}
|
||||
}
|
||||
|
||||
void readSave(DataInput stream, byte version) throws IOException{
|
||||
for(StatusEntry effect : statuses){
|
||||
Pools.free(effect);
|
||||
}
|
||||
|
||||
statuses.clear();
|
||||
|
||||
byte amount = stream.readByte();
|
||||
for(int i = 0; i < amount; i++){
|
||||
byte id = stream.readByte();
|
||||
float time = stream.readFloat();
|
||||
StatusEntry entry = Pools.obtain(StatusEntry.class, StatusEntry::new);
|
||||
entry.set(content.getByID(ContentType.status, id), time);
|
||||
statuses.add(entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import mindustry.net.*;
|
||||
abstract class SyncComp implements Posc{
|
||||
@Import float x, y;
|
||||
|
||||
Interpolator interpolator = new Interpolator();
|
||||
transient Interpolator interpolator = new Interpolator();
|
||||
|
||||
void setNet(float x, float y){
|
||||
set(x, y);
|
||||
|
||||
@@ -22,7 +22,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
||||
|
||||
@Import float x, y, rotation, elevation, maxHealth;
|
||||
|
||||
private UnitController controller;
|
||||
private transient UnitController controller;
|
||||
private UnitType type;
|
||||
|
||||
public void moveAt(Vec2 vector){
|
||||
@@ -43,7 +43,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
||||
return type.hasWeapons();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Replace
|
||||
public float clipSize(){
|
||||
return type.region.getWidth() * 2f;
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ abstract class WeaponsComp implements Teamc, Posc, Rotc{
|
||||
static int sequenceNum = 0;
|
||||
|
||||
/** weapon mount array, never null */
|
||||
@ReadOnly WeaponMount[] mounts = {};
|
||||
@ReadOnly transient WeaponMount[] mounts = {};
|
||||
@ReadOnly transient float range, aimX, aimY;
|
||||
@ReadOnly transient boolean isRotate, isShooting;
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@ import arc.struct.*;
|
||||
import mindustry.annotations.Annotations.*;
|
||||
import mindustry.type.*;
|
||||
|
||||
import static mindustry.Vars.content;
|
||||
|
||||
@Serialize
|
||||
public class Stats{
|
||||
/** Items delivered to global resoure counter. Zones only. */
|
||||
@@ -22,6 +24,9 @@ public class Stats{
|
||||
/** Friendly buildings destroyed. */
|
||||
public int buildingsDestroyed;
|
||||
|
||||
/** Item production means. */
|
||||
private transient WindowedMean[] itemProduction = new WindowedMean[content.items().size];
|
||||
|
||||
public RankResult calculateRank(Sector zone, boolean launched){
|
||||
float score = 0;
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import arc.graphics.*;
|
||||
import arc.math.geom.*;
|
||||
import arc.struct.*;
|
||||
import arc.util.io.*;
|
||||
import arc.util.pooling.*;
|
||||
import mindustry.annotations.Annotations.*;
|
||||
import mindustry.ctype.*;
|
||||
import mindustry.entities.bullet.*;
|
||||
@@ -118,22 +119,51 @@ public class TypeIO{
|
||||
return content.block(read.s());
|
||||
}
|
||||
|
||||
public static void writeRequest(Writes write, BuildRequest request){
|
||||
write.b(request.breaking ? (byte)1 : 0);
|
||||
write.i(Point2.pack(request.x, request.y));
|
||||
if(!request.breaking){
|
||||
write.s(request.block.id);
|
||||
write.b((byte)request.rotation);
|
||||
write.b(request.hasConfig ? (byte)1 : 0);
|
||||
writeObject(write, request.config);
|
||||
}
|
||||
}
|
||||
|
||||
public static BuildRequest readRequest(Reads read){
|
||||
BuildRequest currentRequest;
|
||||
|
||||
byte type = read.b();
|
||||
int position = read.i();
|
||||
|
||||
if(world.tile(position) == null){
|
||||
return null;
|
||||
}
|
||||
|
||||
if(type == 1){ //remove
|
||||
currentRequest = new BuildRequest(Point2.x(position), Point2.y(position));
|
||||
}else{ //place
|
||||
short block = read.s();
|
||||
byte rotation = read.b();
|
||||
boolean hasConfig = read.b() == 1;
|
||||
Object config = readObject(read);
|
||||
currentRequest = new BuildRequest(Point2.x(position), Point2.y(position), rotation, content.block(block));
|
||||
if(hasConfig){
|
||||
currentRequest.configure(config);
|
||||
}
|
||||
}
|
||||
|
||||
return currentRequest;
|
||||
}
|
||||
|
||||
public static void writeRequests(Writes write, BuildRequest[] requests){
|
||||
if(requests == null){
|
||||
write.s(-1);
|
||||
return;
|
||||
}
|
||||
|
||||
write.s((short)requests.length);
|
||||
for(BuildRequest request : requests){
|
||||
write.b(request.breaking ? (byte)1 : 0);
|
||||
write.i(Point2.pack(request.x, request.y));
|
||||
if(!request.breaking){
|
||||
write.s(request.block.id);
|
||||
write.b((byte)request.rotation);
|
||||
write.b(request.hasConfig ? (byte)1 : 0);
|
||||
writeObject(write, request.config);
|
||||
}
|
||||
writeRequest(write, request);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,28 +175,10 @@ public class TypeIO{
|
||||
|
||||
BuildRequest[] reqs = new BuildRequest[reqamount];
|
||||
for(int i = 0; i < reqamount; i++){
|
||||
byte type = read.b();
|
||||
int position = read.i();
|
||||
BuildRequest currentRequest;
|
||||
|
||||
if(world.tile(position) == null){
|
||||
continue;
|
||||
BuildRequest request = readRequest(read);
|
||||
if(request != null){
|
||||
reqs[i] = request;
|
||||
}
|
||||
|
||||
if(type == 1){ //remove
|
||||
currentRequest = new BuildRequest(Point2.x(position), Point2.y(position));
|
||||
}else{ //place
|
||||
short block = read.s();
|
||||
byte rotation = read.b();
|
||||
boolean hasConfig = read.b() == 1;
|
||||
Object config = readObject(read);
|
||||
currentRequest = new BuildRequest(Point2.x(position), Point2.y(position), rotation, content.block(block));
|
||||
if(hasConfig){
|
||||
currentRequest.configure(config);
|
||||
}
|
||||
}
|
||||
|
||||
reqs[i] = (currentRequest);
|
||||
}
|
||||
|
||||
return reqs;
|
||||
@@ -193,6 +205,38 @@ public class TypeIO{
|
||||
return JsonIO.read(Rules.class, string);
|
||||
}
|
||||
|
||||
public static void writeVec2(Writes write, Vec2 v){
|
||||
if(v == null){
|
||||
write.f(0);
|
||||
write.f(0);
|
||||
}else{
|
||||
write.f(v.x);
|
||||
write.f(v.y);
|
||||
}
|
||||
}
|
||||
|
||||
public static Vec2 readVec2(Reads read){
|
||||
return new Vec2(read.f(), read.f());
|
||||
}
|
||||
|
||||
public static void writeStatuse(Writes write, StatusEntry entry){
|
||||
write.s(entry.effect.id);
|
||||
write.f(entry.time);
|
||||
}
|
||||
|
||||
public static StatusEntry readStatuse(Reads read){
|
||||
return Pools.obtain(StatusEntry.class, StatusEntry::new).set(content.getByID(ContentType.status, read.s()), read.f());
|
||||
}
|
||||
|
||||
public static void writeItems(Writes write, ItemStack stack){
|
||||
writeItem(write, stack.item);
|
||||
write.i(stack.amount);
|
||||
}
|
||||
|
||||
public static ItemStack readItems(Reads read){
|
||||
return new ItemStack(readItem(read), read.i());
|
||||
}
|
||||
|
||||
public static void writeTeam(Writes write, Team reason){
|
||||
write.b(reason.id);
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ import mindustry.world.blocks.environment.*;
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
public class UnitType extends UnlockableContent{
|
||||
static final float shadowTX = -12, shadowTY = -13, shadowColor = Color.toFloatBits(0, 0, 0, 0.22f);
|
||||
public static final float shadowTX = -12, shadowTY = -13, shadowColor = Color.toFloatBits(0, 0, 0, 0.22f);
|
||||
|
||||
public boolean flying;
|
||||
public @NonNull Prov<? extends Unitc> constructor;
|
||||
|
||||
@@ -150,10 +150,5 @@ public abstract class Weather extends MappableContent{
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public float clipSize(){
|
||||
return Float.MAX_VALUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,25 @@
|
||||
package mindustry.world.blocks.storage;
|
||||
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.struct.*;
|
||||
import arc.util.*;
|
||||
import mindustry.annotations.Annotations.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.graphics.*;
|
||||
import mindustry.type.*;
|
||||
import mindustry.world.*;
|
||||
import mindustry.world.meta.*;
|
||||
|
||||
public class LaunchPad extends StorageBlock{
|
||||
public class LaunchPad extends Block{
|
||||
public final int timerLaunch = timers++;
|
||||
/** Time inbetween launches. */
|
||||
public float launchTime;
|
||||
|
||||
public LaunchPad(String name){
|
||||
super(name);
|
||||
update = true;
|
||||
hasItems = true;
|
||||
solid = true;
|
||||
update = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -23,7 +29,7 @@ public class LaunchPad extends StorageBlock{
|
||||
stats.add(BlockStat.launchTime, launchTime / 60f, StatUnit.seconds);
|
||||
}
|
||||
|
||||
public class LaunchPadEntity extends StorageBlockEntity{
|
||||
public class LaunchPadEntity extends TileEntity{
|
||||
@Override
|
||||
public void draw(){
|
||||
super.draw();
|
||||
@@ -54,12 +60,16 @@ public class LaunchPad extends StorageBlock{
|
||||
|
||||
@Override
|
||||
public boolean acceptItem(Tilec source, Item item){
|
||||
return item.type == ItemType.material && super.acceptItem(source, item);
|
||||
return items.total() < itemCapacity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTile(){
|
||||
//TODO
|
||||
|
||||
//launch when full
|
||||
if(items.total() >= itemCapacity){
|
||||
|
||||
}
|
||||
/*
|
||||
|
||||
if(state.isCampaign() && consValid() && items.total() >= itemCapacity && timer(timerLaunch, launchTime / timeScale())){
|
||||
@@ -74,4 +84,36 @@ public class LaunchPad extends StorageBlock{
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
@EntityDef(LaunchPayloadc.class)
|
||||
@Component
|
||||
static abstract class LaunchPayloadComp implements Drawc{
|
||||
static final float speed = 1f;
|
||||
|
||||
@Import float x,y;
|
||||
|
||||
float height;
|
||||
transient TextureRegion region;
|
||||
|
||||
Array<ItemStack> stacks = new Array<>();
|
||||
|
||||
@Override
|
||||
public void draw(){
|
||||
Draw.z(Layer.weather - 1);
|
||||
Draw.rect(region, x, y);
|
||||
|
||||
Tmp.v1.trns(225f, height);
|
||||
|
||||
Draw.z(Layer.flyingUnit + 1);
|
||||
Draw.color(UnitType.shadowColor);
|
||||
Draw.rect(region, x + Tmp.v1.x, y + Tmp.v1.y);
|
||||
|
||||
Draw.reset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(){
|
||||
height += Time.delta() * speed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user