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

View File

@@ -1,10 +1,14 @@
package mindustry.entities.units;
import arc.math.*;
import arc.util.*;
import mindustry.gen.*;
public class AIController implements UnitController{
protected Unitc unit;
float rot = Mathf.random(360f);
@Override
public void unit(Unitc unit){
this.unit = unit;
@@ -15,5 +19,13 @@ public class AIController implements UnitController{
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 update(){
}
}