Bugfixes, balancing

This commit is contained in:
Anuken
2020-07-24 12:42:59 -04:00
parent a48efd971c
commit 0372ec7c9f
10 changed files with 86 additions and 75 deletions

View File

@@ -14,12 +14,13 @@ import static mindustry.Vars.content;
public class ItemModule extends BlockModule{
public static final ItemModule empty = new ItemModule();
private static final int windowSize = 60 * 4;
private static final int windowSize = 6;
private static WindowedMean[] cacheFlow;
private static float[] cacheSums;
private static float[] displayFlow;
private static Bits cacheBits = new Bits();
private static Interval flowTimer = new Interval(1);
private static final Bits cacheBits = new Bits();
private static final Interval flowTimer = new Interval(2);
private static final float pollScl = 20f;
protected int[] items = new int[content.items().size];
protected int total;
@@ -41,38 +42,42 @@ public class ItemModule extends BlockModule{
public void update(boolean showFlow){
if(showFlow){
if(flow == null){
if(cacheFlow == null || cacheFlow.length != items.length){
cacheFlow = new WindowedMean[items.length];
for(int i = 0; i < items.length; i++){
cacheFlow[i] = new WindowedMean(windowSize);
//update the flow at 30fps at most
if(flowTimer.get(1, pollScl)){
if(flow == null){
if(cacheFlow == null || cacheFlow.length != items.length){
cacheFlow = new WindowedMean[items.length];
for(int i = 0; i < items.length; i++){
cacheFlow[i] = new WindowedMean(windowSize);
}
cacheSums = new float[items.length];
displayFlow = new float[items.length];
}else{
for(int i = 0; i < items.length; i++){
cacheFlow[i].reset();
}
Arrays.fill(cacheSums, 0);
cacheBits.clear();
}
cacheSums = new float[items.length];
displayFlow = new float[items.length];
}else{
for(int i = 0; i < items.length; i++){
cacheFlow[i].reset();
}
Arrays.fill(cacheSums, 0);
cacheBits.clear();
Arrays.fill(displayFlow, -1);
flow = cacheFlow;
}
Arrays.fill(displayFlow, -1);
boolean updateFlow = flowTimer.get(30);
flow = cacheFlow;
}
for(int i = 0; i < items.length; i++){
flow[i].add(cacheSums[i]);
if(cacheSums[i] > 0){
cacheBits.set(i);
}
cacheSums[i] = 0;
boolean updateFlow = flowTimer.get(30);
for(int i = 0; i < items.length; i++){
flow[i].add(cacheSums[i]);
if(cacheSums[i] > 0){
cacheBits.set(i);
}
cacheSums[i] = 0;
if(updateFlow){
displayFlow[i] = flow[i].hasEnoughData() ? flow[i].mean() / Time.delta : -1;
if(updateFlow){
displayFlow[i] = flow[i].hasEnoughData() ? flow[i].mean() / pollScl : -1;
}
}
}
}else{

View File

@@ -11,8 +11,9 @@ import java.util.*;
import static mindustry.Vars.content;
public class LiquidModule extends BlockModule{
private static final int windowSize = 60, updateInterval = 60;
private static Interval flowTimer = new Interval(1);
private static final int windowSize = 3, updateInterval = 60;
private static final Interval flowTimer = new Interval(2);
private static final float pollScl = 20f;
private float[] liquids = new float[content.liquids().size];
private float total;
@@ -25,11 +26,14 @@ public class LiquidModule extends BlockModule{
public void update(boolean showFlow){
smoothLiquid = Mathf.lerpDelta(smoothLiquid, currentAmount(), 0.1f);
if(showFlow){
if(flow == null) flow = new WindowedMean(windowSize);
flow.add(lastAdded);
lastAdded = 0;
if(currentFlowRate < 0 || flowTimer.get(updateInterval)){
currentFlowRate = flow.hasEnoughData() ? flow.mean() / Time.delta : -1f;
if(flowTimer.get(1, pollScl)){
if(flow == null) flow = new WindowedMean(windowSize);
flow.add(lastAdded);
lastAdded = 0;
if(currentFlowRate < 0 || flowTimer.get(updateInterval)){
currentFlowRate = flow.hasEnoughData() ? flow.mean() / pollScl : -1f;
}
}
}else{
currentFlowRate = -1f;