Optimizations

This commit is contained in:
Anuken
2020-02-10 11:07:10 -05:00
parent 6c6861a97a
commit 81990cf16c
4 changed files with 29 additions and 7 deletions

View File

@@ -36,7 +36,8 @@ abstract class StatusComp implements Posc, Flyingc{
if(statuses.size > 0){
//check for opposite effects
for(StatusEntry entry : statuses){
for(int i = 0; i < statuses.size; i ++){
StatusEntry entry = statuses.get(i);
//extend effect
if(entry.effect == effect){
entry.time = Math.max(entry.time, duration);
@@ -98,13 +99,18 @@ abstract class StatusComp implements Posc, Flyingc{
if(statuses.isEmpty()) return;
statuses.eachFilter(entry -> {
int index = 0;
while(index < statuses.size){
StatusEntry entry = statuses.get(index++);
entry.time = Math.max(entry.time - Time.delta(), 0);
applied.set(entry.effect.id);
if(entry.time <= 0){
Pools.free(entry);
return true;
index --;
statuses.remove(index);
}else{
speedMultiplier *= entry.effect.speedMultiplier;
armorMultiplier *= entry.effect.armorMultiplier;
@@ -112,9 +118,7 @@ abstract class StatusComp implements Posc, Flyingc{
//TODO ugly casting
entry.effect.update((Unitc)this, entry.time);
}
return false;
});
}
}
boolean hasEffect(StatusEffect effect){

View File

@@ -18,7 +18,7 @@ import mindustry.world.blocks.*;
import static mindustry.Vars.*;
@Component
abstract class UnitComp implements Healthc, Velc, Statusc, Teamc, Itemsc, Hitboxc, Rotc, Massc, Unitc, Weaponsc, Drawc,
abstract class UnitComp implements Healthc, Velc, Statusc, Teamc, Itemsc, Hitboxc, Rotc, Massc, Unitc, Weaponsc, Drawc, Boundedc,
DrawLayerGroundc, DrawLayerFlyingc, DrawLayerGroundShadowsc, DrawLayerFlyingShadowsc{
transient float x, y, rotation;
@@ -125,6 +125,8 @@ abstract class UnitComp implements Healthc, Velc, Statusc, Teamc, Itemsc, Hitbox
damageContinuous(floor.damageTaken);
}
}
controller.update();
}
@Override