Optimizations
This commit is contained in:
@@ -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){
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,4 +10,8 @@ public interface UnitController{
|
|||||||
default void command(UnitCommand command){
|
default void command(UnitCommand command){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default void update(){
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user