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

View File

@@ -18,7 +18,7 @@ import mindustry.world.blocks.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
@Component @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{ DrawLayerGroundc, DrawLayerFlyingc, DrawLayerGroundShadowsc, DrawLayerFlyingShadowsc{
transient float x, y, rotation; transient float x, y, rotation;
@@ -125,6 +125,8 @@ abstract class UnitComp implements Healthc, Velc, Statusc, Teamc, Itemsc, Hitbox
damageContinuous(floor.damageTaken); damageContinuous(floor.damageTaken);
} }
} }
controller.update();
} }
@Override @Override

View File

@@ -1,10 +1,14 @@
package mindustry.entities.units; package mindustry.entities.units;
import arc.math.*;
import arc.util.*;
import mindustry.gen.*; import mindustry.gen.*;
public class AIController implements UnitController{ public class AIController implements UnitController{
protected Unitc unit; protected Unitc unit;
float rot = Mathf.random(360f);
@Override @Override
public void unit(Unitc unit){ public void unit(Unitc unit){
this.unit = unit; this.unit = unit;
@@ -15,5 +19,13 @@ public class AIController implements UnitController{
return unit; return unit;
} }
@Override
public void update(){
rot += Mathf.range(3f) * Time.delta();
unit.moveAt(Tmp.v1.trns(rot, unit.type().speed));
if(!unit.vel().isZero()){
unit.lookAt(unit.vel().angle());
}
}
} }

View File

@@ -10,4 +10,8 @@ public interface UnitController{
default void command(UnitCommand command){ default void command(UnitCommand command){
} }
default void update(){
}
} }