Files
Mindustry/core/src/mindustry/world/ItemBuffer.java
2021-08-09 09:37:45 -04:00

76 lines
1.6 KiB
Java

package mindustry.world;
import arc.util.*;
import arc.util.io.*;
import mindustry.annotations.Annotations.*;
import mindustry.gen.*;
import mindustry.type.*;
import static mindustry.Vars.*;
public class ItemBuffer{
private long[] buffer;
private int index;
public ItemBuffer(int capacity){
this.buffer = new long[capacity];
}
public boolean accepts(){
return index < buffer.length;
}
public void accept(Item item, short data){
//if(!accepts()) return;
buffer[index++] = TimeItem.get(data, item.id, Time.time);
}
public void accept(Item item){
accept(item, (short)-1);
}
public Item poll(float speed){
if(index > 0){
long l = buffer[0];
float time = TimeItem.time(l);
if(Time.time >= time + speed || Time.time < time){
return content.item(TimeItem.item(l));
}
}
return null;
}
public void remove(){
System.arraycopy(buffer, 1, buffer, 0, index - 1);
index--;
}
public void write(Writes write){
write.b((byte)index);
write.b((byte)buffer.length);
for(long l : buffer){
write.l(l);
}
}
public void read(Reads read){
index = read.b();
byte length = read.b();
for(int i = 0; i < length; i++){
long l = read.l();
if(i < buffer.length){
buffer[i] = l;
}
}
index = Math.min(index, length - 1);
}
@Struct
class TimeItemStruct{
short data;
short item;
float time;
}
}