76 lines
1.6 KiB
Java
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;
|
|
}
|
|
}
|