Minor cleanup / Tick reset fix

This commit is contained in:
Anuken
2022-02-13 14:44:10 -05:00
parent ca72541e4e
commit 50cb6b91e3
9 changed files with 71 additions and 18 deletions

View File

@@ -107,6 +107,8 @@ public class Logic implements ApplicationListener{
weather.cooldown = sum + Mathf.random(weather.maxFrequency);
sum += weather.cooldown;
}
//tick resets on new save play
state.tick = 0f;
});
Events.on(WorldLoadEvent.class, e -> {

View File

@@ -1369,7 +1369,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
public void displayConsumption(Table table){
table.left();
for(Consume cons : block.consumes.all()){
for(Consume cons : block.consumes.all){
if(cons.isOptional() && cons.isBoost()) continue;
cons.build(self(), table);
}
@@ -1708,11 +1708,13 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
public void update(){
if(state.isEditor()) return;
//TODO refactor to timestamp-based system
timeScaleDuration -= Time.delta;
if(timeScaleDuration <= 0f || !block.canOverdrive){
timeScale = 1f;
}
//TODO unacceptable overhead?
if(!enabled && block.autoResetEnabled){
noSleep();
enabledControlTime -= Time.delta;
@@ -1722,10 +1724,12 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
}
}
//TODO this check should not be here, just remove unsupported buildings instead
if(team == Team.derelict || !block.supportsEnv(state.rules.environment)){
enabled = false;
}
//TODO separate system for sound?
if(!headless){
if(sound != null){
sound.update(x, y, shouldActiveSound());
@@ -1736,6 +1740,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
}
}
//TODO consume module is not necessary for every building, e.g. conveyors should not have it - perhaps it should be nullable?
if(cons != null){
cons.update();
}
@@ -1744,6 +1749,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
updateTile();
}
//TODO unnecessary updates?
if(items != null){
items.update(updateFlow);
}
@@ -1752,6 +1758,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
liquids.update(updateFlow);
}
//TODO power graph should be separate entity
if(power != null){
power.graph.update();
}

View File

@@ -7,6 +7,7 @@ import arc.struct.*;
import arc.util.*;
import mindustry.*;
import mindustry.ai.types.*;
import mindustry.annotations.Annotations.*;
import mindustry.content.*;
import mindustry.core.*;
import mindustry.ctype.*;
@@ -1326,5 +1327,43 @@ public class LExecutor{
}
}
public static class ExplosionI implements LInstruction{
public int team, x, y, radius, damage, air, ground, pierce;
public ExplosionI(int team, int x, int y, int radius, int damage, int air, int ground, int pierce){
this.team = team;
this.x = x;
this.y = y;
this.radius = radius;
this.damage = damage;
this.air = air;
this.ground = ground;
this.pierce = pierce;
}
public ExplosionI(){
}
@Override
public void run(LExecutor exec){
if(net.client()) return;
Team t = exec.obj(team) instanceof Team te ? te : null;
//note that there is a radius cap
Call.logicExplosion(t, World.unconv(exec.numf(x)), World.unconv(exec.numf(y)), World.unconv(Math.min(exec.numf(radius), 100)), exec.numf(damage), exec.bool(air), exec.bool(ground), exec.bool(pierce));
}
}
@Remote(called = Loc.server, unreliable = true)
public static void logicExplosion(Team team, float x, float y, float radius, float damage, boolean air, boolean ground, boolean pierce){
Damage.damage(team, x, y, radius, damage, pierce, air, ground);
if(pierce){
Fx.spawnShockwave.at(x, y, World.conv(radius));
}else{
Fx.dynamicExplosion.at(x, y, World.conv(radius) / 8f);
}
}
//endregion
}

View File

@@ -348,7 +348,7 @@ public class PowerGraph{
}
private boolean otherConsumersAreValid(Building build, Consume consumePower){
for(Consume cons : build.block.consumes.all()){
for(Consume cons : build.block.consumes.all){
if(cons != consumePower && !cons.isOptional() && !cons.valid(build)){
return false;
}

View File

@@ -4,5 +4,7 @@ public enum ConsumeType{
item,
power,
liquid,
payload
payload;
public static final ConsumeType[] all = values();
}

View File

@@ -10,8 +10,9 @@ import mindustry.world.blocks.power.*;
import mindustry.world.meta.*;
public class Consumers{
private Consume[] map = new Consume[ConsumeType.values().length];
private Consume[] results, optionalResults;
private Consume[] map = new Consume[ConsumeType.all.length];
public Consume[] all = {}, optionals = {};
public final Bits itemFilters = new Bits(Vars.content.items().size);
public final Bits liquidfilters = new Bits(Vars.content.liquids().size);
@@ -25,7 +26,7 @@ public class Consumers{
}
public boolean any(){
return results != null && results.length > 0;
return all.length > 0;
}
public void each(Cons<Consume> c){
@@ -37,10 +38,10 @@ public class Consumers{
}
public void init(){
results = Structs.filter(Consume.class, map, m -> m != null);
optionalResults = Structs.filter(Consume.class, map, m -> m != null && m.isOptional());
all = Structs.filter(Consume.class, map, m -> m != null);
optionals = Structs.filter(Consume.class, map, m -> m != null && m.isOptional());
for(Consume cons : results){
for(Consume cons : all){
cons.applyItemFilter(itemFilters);
cons.applyLiquidFilter(liquidfilters);
}
@@ -126,18 +127,20 @@ public class Consumers{
return (T)map[type.ordinal()];
}
@Nullable
public <T extends Consume> T getOrNull(ConsumeType type){
public @Nullable <T extends Consume>T getOrNull(ConsumeType type){
return (T)map[type.ordinal()];
}
@Nullable
/** @deprecated unnecessary getter */
@Deprecated
public Consume[] all(){
return results;
return all;
}
/** @deprecated unnecessary getter */
@Deprecated
public Consume[] optionals(){
return optionalResults;
return optionals;
}
public void display(Stats stats){

View File

@@ -41,7 +41,7 @@ public class ConsumeModule extends BlockModule{
optionalValid = true;
boolean docons = entity.shouldConsume() && entity.productionValid();
for(Consume cons : entity.block.consumes.all()){
for(Consume cons : entity.block.consumes.all){
if(cons.isOptional()) continue;
if(docons && cons.isUpdate() && prevValid && cons.valid(entity)){
@@ -51,7 +51,7 @@ public class ConsumeModule extends BlockModule{
valid &= cons.valid(entity);
}
for(Consume cons : entity.block.consumes.optionals()){
for(Consume cons : entity.block.consumes.optionals){
if(docons && cons.isUpdate() && prevValid && cons.valid(entity)){
cons.update(entity);
}
@@ -61,7 +61,7 @@ public class ConsumeModule extends BlockModule{
}
public void trigger(){
for(Consume cons : entity.block.consumes.all()){
for(Consume cons : entity.block.consumes.all){
cons.trigger(entity);
}
}