Files
Mindustry/core/src/mindustry/entities/comp/PosComp.java
2021-12-07 16:58:11 -05:00

79 lines
1.5 KiB
Java

package mindustry.entities.comp;
import arc.math.geom.*;
import arc.util.*;
import mindustry.annotations.Annotations.*;
import mindustry.content.*;
import mindustry.core.*;
import mindustry.gen.*;
import mindustry.world.*;
import mindustry.world.blocks.environment.*;
import static mindustry.Vars.*;
@Component
abstract class PosComp implements Position{
@SyncField(true) @SyncLocal float x, y;
void set(float x, float y){
this.x = x;
this.y = y;
}
void set(Position pos){
set(pos.getX(), pos.getY());
}
void trns(float x, float y){
set(this.x + x, this.y + y);
}
void trns(Position pos){
trns(pos.getX(), pos.getY());
}
int tileX(){
return World.toTile(x);
}
int tileY(){
return World.toTile(y);
}
/** Returns air if this unit is on a non-air top block. */
Floor floorOn(){
Tile tile = tileOn();
return tile == null || tile.block() != Blocks.air ? (Floor)Blocks.air : tile.floor();
}
Block blockOn(){
Tile tile = tileOn();
return tile == null ? Blocks.air : tile.block();
}
@Nullable
Building buildOn(){
return world.buildWorld(x, y);
}
@Nullable
Tile tileOn(){
return world.tileWorld(x, y);
}
boolean onSolid(){
Tile tile = tileOn();
return tile == null || tile.solid();
}
@Override
public float getX(){
return x;
}
@Override
public float getY(){
return y;
}
}