56 lines
1.6 KiB
Java
56 lines
1.6 KiB
Java
package net.minecraft.world.phys.shapes;
|
|
|
|
import it.unimi.dsi.fastutil.doubles.AbstractDoubleList;
|
|
import it.unimi.dsi.fastutil.doubles.DoubleList;
|
|
|
|
public class NonOverlappingMerger extends AbstractDoubleList implements IndexMerger {
|
|
private final DoubleList lower;
|
|
private final DoubleList upper;
|
|
private final boolean swap;
|
|
|
|
protected NonOverlappingMerger(DoubleList p_83012_, DoubleList p_83013_, boolean p_83014_) {
|
|
this.lower = p_83012_;
|
|
this.upper = p_83013_;
|
|
this.swap = p_83014_;
|
|
}
|
|
|
|
@Override
|
|
public int size() {
|
|
return this.lower.size() + this.upper.size();
|
|
}
|
|
|
|
@Override
|
|
public boolean forMergedIndexes(IndexMerger.IndexConsumer p_83017_) {
|
|
return this.swap ? this.forNonSwappedIndexes((p_83020_, p_83021_, p_83022_) -> p_83017_.merge(p_83021_, p_83020_, p_83022_)) : this.forNonSwappedIndexes(p_83017_);
|
|
}
|
|
|
|
private boolean forNonSwappedIndexes(IndexMerger.IndexConsumer p_83024_) {
|
|
int i = this.lower.size();
|
|
|
|
for (int j = 0; j < i; j++) {
|
|
if (!p_83024_.merge(j, -1, j)) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
int l = this.upper.size() - 1;
|
|
|
|
for (int k = 0; k < l; k++) {
|
|
if (!p_83024_.merge(i - 1, k, i + k)) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public double getDouble(int p_83026_) {
|
|
return p_83026_ < this.lower.size() ? this.lower.getDouble(p_83026_) : this.upper.getDouble(p_83026_ - this.lower.size());
|
|
}
|
|
|
|
@Override
|
|
public DoubleList getList() {
|
|
return this;
|
|
}
|
|
} |