79 lines
1.5 KiB
Java
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;
|
|
}
|
|
}
|