Framerate-independent building speed
This commit is contained in:
@@ -33,6 +33,7 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
|
||||
@SyncLocal Queue<BuildPlan> plans = new Queue<>(1);
|
||||
@SyncLocal boolean updateBuilding = true;
|
||||
|
||||
private transient float buildCounter;
|
||||
private transient BuildPlan lastActive;
|
||||
private transient int lastSize;
|
||||
transient float buildAlpha = 0f;
|
||||
@@ -61,6 +62,11 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
|
||||
float finalPlaceDst = state.rules.infiniteResources ? Float.MAX_VALUE : type.buildRange;
|
||||
boolean infinite = state.rules.infiniteResources || team().rules().infiniteResources;
|
||||
|
||||
buildCounter += Time.delta;
|
||||
|
||||
while(buildCounter >= 1){
|
||||
buildCounter -= 1f;
|
||||
|
||||
Iterator<BuildPlan> it = plans.iterator();
|
||||
while(it.hasNext()){
|
||||
BuildPlan req = it.next();
|
||||
@@ -73,7 +79,7 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
|
||||
var core = core();
|
||||
|
||||
//nothing to build.
|
||||
if(buildPlan() == null) return;
|
||||
if(buildPlan() == null) continue;
|
||||
|
||||
//find the next build request
|
||||
if(plans.size > 1){
|
||||
@@ -93,7 +99,7 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
|
||||
buildAlpha = 1f;
|
||||
if(current.breaking) lastSize = tile.block().size;
|
||||
|
||||
if(!within(tile, finalPlaceDst)) return;
|
||||
if(!within(tile, finalPlaceDst)) continue;
|
||||
|
||||
if(!headless){
|
||||
Vars.control.sound.loop(Sounds.build, tile, 0.51f);
|
||||
@@ -112,11 +118,11 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
|
||||
Call.beginBreak(self(), team, current.x, current.y);
|
||||
}else{
|
||||
plans.removeFirst();
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
}else if((tile.team() != team && tile.team() != Team.derelict) || (!current.breaking && (cb.current != current.block || cb.tile != current.tile()))){
|
||||
plans.removeFirst();
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
if(tile.build instanceof ConstructBuild && !current.initialized){
|
||||
@@ -126,7 +132,7 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
|
||||
|
||||
//if there is no core to build with or no build entity, stop building!
|
||||
if((core == null && !infinite) || !(tile.build instanceof ConstructBuild entity)){
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
float bs = 1f / entity.buildCost * Time.delta * type.buildSpeed * buildSpeedMultiplier * state.rules.buildSpeed(team);
|
||||
@@ -141,6 +147,7 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
|
||||
current.stuck = Mathf.equal(current.progress, entity.progress);
|
||||
current.progress = entity.progress;
|
||||
}
|
||||
}
|
||||
|
||||
/** Draw all current build plans. Does not draw the beam effect, only the positions. */
|
||||
void drawBuildPlans(){
|
||||
|
||||
Reference in New Issue
Block a user