39 lines
1.2 KiB
Java
39 lines
1.2 KiB
Java
package mindustry.entities.comp;
|
|
|
|
import arc.math.*;
|
|
import arc.math.geom.*;
|
|
import mindustry.annotations.Annotations.*;
|
|
import mindustry.gen.*;
|
|
|
|
import static mindustry.Vars.*;
|
|
|
|
@Component
|
|
abstract class BoundedComp implements Velc, Posc, Healthc, Flyingc{
|
|
static final float warpDst = 180f;
|
|
|
|
@Import float x, y;
|
|
@Import Vec2 vel;
|
|
|
|
@Override
|
|
public void update(){
|
|
if(!net.client() || isLocal()){
|
|
//repel unit out of bounds
|
|
if(x < 0) vel.x += (-x/warpDst);
|
|
if(y < 0) vel.y += (-y/warpDst);
|
|
if(x > world.unitWidth()) vel.x -= (x - world.unitWidth())/warpDst;
|
|
if(y > world.unitHeight()) vel.y -= (y - world.unitHeight())/warpDst;
|
|
}
|
|
|
|
//clamp position if not flying
|
|
if(isGrounded()){
|
|
x = Mathf.clamp(x, 0, world.width() * tilesize - tilesize);
|
|
y = Mathf.clamp(y, 0, world.height() * tilesize - tilesize);
|
|
}
|
|
|
|
//kill when out of bounds
|
|
if(x < -finalWorldBounds || y < -finalWorldBounds || x >= world.width() * tilesize + finalWorldBounds || y >= world.height() * tilesize + finalWorldBounds){
|
|
kill();
|
|
}
|
|
}
|
|
}
|