This commit is contained in:
Anuken
2020-06-26 14:27:26 -04:00
parent eabc5c15c7
commit fdf7c88083
228 changed files with 1219 additions and 1163 deletions

View File

@@ -195,7 +195,8 @@ public class Vars implements Loadable{
public static NetServer netServer;
public static NetClient netClient;
public static Playerc player;
public static
Player player;
@Override
public void loadAsync(){

View File

@@ -45,7 +45,7 @@ public class BaseAI{
//create AI core unit
if(!Groups.unit.contains(u -> u.team() == data.team && u.type() == block.unitType)){
Unitc unit = block.unitType.create(data.team);
Unit unit = block.unitType.create(data.team);
unit.set(data.core());
unit.add();
Fx.spawn.at(unit);

View File

@@ -51,7 +51,7 @@ public class BlockIndexer{
private Seq<Tile> returnArray = new Seq<>();
public BlockIndexer(){
Events.on(TileChangeEvent.class, event -> {
Events.on(BuildinghangeEvent.class, event -> {
if(typeMap.get(event.tile.pos()) != null){
TileIndex index = typeMap.get(event.tile.pos());
for(BlockFlag flag : index.flags){
@@ -164,11 +164,11 @@ public class BlockIndexer{
return flagMap[team.id][type.ordinal()];
}
public boolean eachBlock(Teamc team, float range, Boolf<Tilec> pred, Cons<Tilec> cons){
public boolean eachBlock(Teamc team, float range, Boolf<Building> pred, Cons<Building> cons){
return eachBlock(team.team(), team.getX(), team.getY(), range, pred, cons);
}
public boolean eachBlock(Team team, float wx, float wy, float range, Boolf<Tilec> pred, Cons<Tilec> cons){
public boolean eachBlock(Team team, float wx, float wy, float range, Boolf<Building> pred, Cons<Building> cons){
intSet.clear();
int tx = world.toTile(wx);
@@ -181,7 +181,7 @@ public class BlockIndexer{
for(int y = -tileRange + ty; y <= tileRange + ty; y++){
if(!Mathf.within(x * tilesize, y * tilesize, wx, wy, range)) continue;
Tilec other = world.ent(x, y);
Building other = world.ent(x, y);
if(other == null) continue;
@@ -211,7 +211,7 @@ public class BlockIndexer{
return returnArray;
}
public void notifyTileDamaged(Tilec entity){
public void notifyTileDamaged(Building entity){
if(damagedTiles[(int)entity.team().id] == null){
damagedTiles[(int)entity.team().id] = new TileArray();
}
@@ -220,11 +220,11 @@ public class BlockIndexer{
set.add(entity.tile());
}
public Tilec findEnemyTile(Team team, float x, float y, float range, Boolf<Tilec> pred){
public Building findEnemyTile(Team team, float x, float y, float range, Boolf<Building> pred){
for(Team enemy : activeTeams){
if(!team.isEnemy(enemy)) continue;
Tilec entity = indexer.findTile(enemy, x, y, range, pred, true);
Building entity = indexer.findTile(enemy, x, y, range, pred, true);
if(entity != null){
return entity;
}
@@ -233,12 +233,12 @@ public class BlockIndexer{
return null;
}
public Tilec findTile(Team team, float x, float y, float range, Boolf<Tilec> pred){
public Building findTile(Team team, float x, float y, float range, Boolf<Building> pred){
return findTile(team, x, y, range, pred, false);
}
public Tilec findTile(Team team, float x, float y, float range, Boolf<Tilec> pred, boolean usePriority){
Tilec closest = null;
public Building findTile(Team team, float x, float y, float range, Boolf<Building> pred, boolean usePriority){
Building closest = null;
float dst = 0;
float range2 = range * range;
@@ -249,7 +249,7 @@ public class BlockIndexer{
for(int tx = rx * quadrantSize; tx < (rx + 1) * quadrantSize && tx < world.width(); tx++){
for(int ty = ry * quadrantSize; ty < (ry + 1) * quadrantSize && ty < world.height(); ty++){
Tilec e = world.ent(tx, ty);
Building e = world.ent(tx, ty);
if(e == null) continue;
@@ -390,7 +390,7 @@ public class BlockIndexer{
outer:
for(int x = quadrantX * quadrantSize; x < world.width() && x < (quadrantX + 1) * quadrantSize; x++){
for(int y = quadrantY * quadrantSize; y < world.height() && y < (quadrantY + 1) * quadrantSize; y++){
Tilec result = world.ent(x, y);
Building result = world.ent(x, y);
//when a targetable block is found, mark this quadrant as occupied and stop searching
if(result != null && result.team() == team){
bits.set(quadrantX, quadrantY);

View File

@@ -63,7 +63,7 @@ public class Pathfinder implements Runnable{
Events.on(ResetEvent.class, event -> stop());
Events.on(TileChangeEvent.class, event -> updateTile(event.tile));
Events.on(BuildinghangeEvent.class, event -> updateTile(event.tile));
}
/** Packs a tile into its internal representation. */

View File

@@ -48,7 +48,7 @@ public class WaveSpawner{
eachFlyerSpawn((spawnX, spawnY) -> {
for(int i = 0; i < spawned; i++){
Unitc unit = group.createUnit(state.rules.waveTeam, state.wave - 1);
Unit unit = group.createUnit(state.rules.waveTeam, state.wave - 1);
unit.set(spawnX + Mathf.range(spread), spawnY + Mathf.range(spread));
unit.add();
}
@@ -61,7 +61,7 @@ public class WaveSpawner{
for(int i = 0; i < spawned; i++){
Tmp.v1.rnd(spread);
Unitc unit = group.createUnit(state.rules.waveTeam, state.wave - 1);
Unit unit = group.createUnit(state.rules.waveTeam, state.wave - 1);
unit.set(spawnX + Tmp.v1.x, spawnY + Tmp.v1.y);
Time.run(Math.min(i * 5, 60 * 2), () -> spawnEffect(unit));
}
@@ -85,8 +85,8 @@ public class WaveSpawner{
}
if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam) && !state.teams.playerCores().isEmpty()){
Tilec firstCore = state.teams.playerCores().first();
for(Tilec core : state.rules.waveTeam.cores()){
Building firstCore = state.teams.playerCores().first();
for(Building core : state.rules.waveTeam.cores()){
Tmp.v1.set(firstCore).sub(core).limit(coreMargin + core.block().size * tilesize);
cons.accept(core.x() + Tmp.v1.x, core.y() + Tmp.v1.y, false);
}
@@ -104,7 +104,7 @@ public class WaveSpawner{
}
if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam)){
for(Tilec core : state.teams.get(state.rules.waveTeam).cores){
for(Building core : state.teams.get(state.rules.waveTeam).cores){
cons.get(core.x(), core.y());
}
}
@@ -124,7 +124,7 @@ public class WaveSpawner{
}
}
private void spawnEffect(Unitc unit){
private void spawnEffect(Unit unit){
Fx.unitSpawn.at(unit.x(), unit.y(), 0f, unit);
Time.run(30f, () -> {
unit.add();

View File

@@ -8,58 +8,58 @@ import mindustry.entities.units.*;
import mindustry.gen.*;
public class FormationAI extends AIController implements FormationMember{
public Unitc leader;
public Unit leader;
private Vec3 target = new Vec3();
private @Nullable Formation formation;
public FormationAI(Unitc leader, Formation formation){
public FormationAI(Unit leader, Formation formation){
this.leader = leader;
this.formation = formation;
}
@Override
public void init(){
target.set(unit.x(), unit.y(), 0);
target.set(unit.x, unit.y, 0);
}
@Override
public void updateUnit(){
if(leader.dead()){
if(leader.dead){
unit.resetController();
return;
}
unit.controlWeapons(leader.isRotate(), leader.isShooting());
unit.controlWeapons(leader.isRotate(), leader.isShooting);
// unit.moveAt(Tmp.v1.set(deltaX, deltaY).limit(unit.type().speed));
if(leader.isShooting()){
if(leader.isShooting){
unit.aimLook(leader.aimX(), leader.aimY());
}else{
if(!unit.moving()){
unit.lookAt(unit.vel().angle());
unit.lookAt(unit.vel.angle());
}else{
unit.lookAt(leader.rotation());
unit.lookAt(leader.rotation);
}
}
Vec2 realtarget = vec.set(target);
if(unit.isGrounded() && Vars.world.raycast(unit.tileX(), unit.tileY(), leader.tileX(), leader.tileY(), Vars.world::solid)){
realtarget.set(Vars.pathfinder.getTargetTile(unit.tileOn(), unit.team(), leader));
realtarget.set(Vars.pathfinder.getTargetTile(unit.tileOn(), unit.team, leader));
}
unit.moveAt(realtarget.sub(unit).limit(unit.type().speed));
}
@Override
public void removed(Unitc unit){
public void removed(Unit unit){
if(formation != null){
formation.removeMember(this);
}
}
@Override
public boolean isBeingControlled(Unitc player){
public boolean isBeingControlled(Unit player){
return leader == player;
}

View File

@@ -22,7 +22,7 @@ public class GroundAI extends AIController{
targetClosest();
}
Tilec core = unit.closestEnemyCore();
Building core = unit.closestEnemyCore();
if(core != null){
if(unit.within(core,unit.range() / 1.1f)){
@@ -81,7 +81,7 @@ public class GroundAI extends AIController{
Tile tile = unit.tileOn();
if(tile == null) return;
Tile targetTile = pathfinder.getTargetTile(tile, enemy, FlagTarget.enemyCores);
Tilec core = unit.closestCore();
Building core = unit.closestCore();
if(tile == targetTile || core == null || unit.within(core, 120f)) return;

View File

@@ -20,14 +20,14 @@ public class SuicideAI extends GroundAI{
targetClosest();
}
Tilec core = unit.closestEnemyCore();
Building core = unit.closestEnemyCore();
boolean rotate = false, shoot = false;
if(!Units.invalidateTarget(target, unit, unit.range())){
rotate = true;
shoot = unit.within(target, unit.type().weapons.first().bullet.range() +
(target instanceof Tilec ? ((Tilec)target).block().size * Vars.tilesize / 2f : ((Hitboxc)target).hitSize() / 2f));
(target instanceof Building ? ((Building)target).block().size * Vars.tilesize / 2f : ((Hitboxc)target).hitSize() / 2f));
if(unit.type().hasWeapons()){
unit.aimLook(Predict.intercept(unit, target, unit.type().weapons.first().bullet.speed));

View File

@@ -9,10 +9,10 @@ import java.util.*;
/** Creates quadtrees per unit team. */
public class TeamIndexProcess implements AsyncProcess{
private QuadTree<Unitc>[] trees = new QuadTree[Team.all.length];
private QuadTree<Unit>[] trees = new QuadTree[Team.all.length];
private int[] counts = new int[Team.all.length];
public QuadTree<Unitc> tree(Team team){
public QuadTree<Unit> tree(Team team){
if(trees[team.uid] == null) trees[team.uid] = new QuadTree<>(Vars.world.getQuadBounds(new Rect()));
return trees[team.uid];
@@ -43,9 +43,9 @@ public class TeamIndexProcess implements AsyncProcess{
Arrays.fill(counts, 0);
for(Unitc unit : Groups.unit){
tree(unit.team()).insert(unit);
counts[unit.team().id] ++;
for(Unit unit : Groups.unit){
tree(unit.team).insert(unit);
counts[unit.team.id] ++;
}
}

View File

@@ -1518,14 +1518,14 @@ public class Blocks implements ContentList{
}
@Override
public void init(Bulletc b){
public void init(Bullet b){
for(int i = 0; i < rays; i++){
Damage.collideLine(b, b.team(), hitEffect, b.x(), b.y(), b.rotation(), rayLength - Math.abs(i - (rays / 2)) * 20f);
}
}
@Override
public void draw(Bulletc b){
public void draw(Bullet b){
super.draw(b);
Draw.color(Color.white, Pal.lancerLaser, b.fin());
//Draw.alpha(b.fout());

View File

@@ -390,19 +390,19 @@ public class Bullets implements ContentList{
}
@Override
public void init(Bulletc b){
public void init(Bullet b){
b.vel().setLength(0.6f + Mathf.random(2f));
}
@Override
public void draw(Bulletc b){
public void draw(Bullet b){
Draw.color(Pal.lightFlame, Pal.darkFlame, Color.gray, b.fin());
Fill.circle(b.x(), b.y(), 3f * b.fout());
Draw.reset();
}
@Override
public void update(Bulletc b){
public void update(Bullet b){
if(Mathf.chance(0.04 * Time.delta())){
Tile tile = world.tileWorld(b.x(), b.y());
if(tile != null){
@@ -442,7 +442,7 @@ public class Bullets implements ContentList{
}
@Override
public void draw(Bulletc b){
public void draw(Bullet b){
}
};
@@ -462,7 +462,7 @@ public class Bullets implements ContentList{
}
@Override
public void draw(Bulletc b){
public void draw(Bullet b){
}
};
@@ -549,7 +549,7 @@ public class Bullets implements ContentList{
}
@Override
public void hit(Bulletc b, float x, float y){
public void hit(Bullet b, float x, float y){
super.hit(b, x, y);
for(int i = 0; i < 3; i++){

View File

@@ -26,31 +26,31 @@ public class Fx{
none = new Effect(0, 0f, e -> {}),
unitSpawn = new Effect(30f, e -> {
if(!(e.data instanceof Unitc)) return;
if(!(e.data instanceof Unit)) return;
alpha(e.fin());
float scl = 1f + e.fout() * 2f;
Unitc unit = (Unitc)e.data;
Unit unit = e.data();
rect(unit.type().region, e.x, e.y,
unit.type().region.getWidth() * Draw.scl * scl, unit.type().region.getHeight() * Draw.scl * scl, 180f);
}),
unitControl = new Effect(30f, e -> {
if(!(e.data instanceof Unitc)) return;
if(!(e.data instanceof Unit)) return;
Unitc select = (Unitc)e.data;
Unit select = e.data();
mixcol(Pal.accent, 1f);
alpha(e.fout());
rect(select.type().icon(Cicon.full), select.x(), select.y(), select.rotation() - 90f);
rect(select.type().icon(Cicon.full), select.x, select.y, select.rotation - 90f);
alpha(1f);
Lines.stroke(e.fslope() * 1f);
Lines.square(select.x(), select.y(), e.fout() * select.hitSize() * 2f, 45);
Lines.square(select.x, select.y, e.fout() * select.hitSize * 2f, 45);
Lines.stroke(e.fslope() * 2f);
Lines.square(select.x(), select.y(), e.fout() * select.hitSize() * 3f, 45f);
Lines.square(select.x, select.y, e.fout() * select.hitSize * 3f, 45f);
reset();
}),
@@ -1256,7 +1256,7 @@ public class Fx{
unitShieldBreak = new Effect(35, e -> {
if(!(e.data instanceof Unitc)) return;
Unitc unit = e.data();
Unit unit = e.data();
float radius = unit.hitSize() * 1.3f;

View File

@@ -127,7 +127,7 @@ public class UnitTypes implements ContentList{
@Override
public void update(Unitc player){
if(player.timer().get(Playerc.timerAbility, healReload)){
if(player.timer().get(Player.timerAbility, healReload)){
wasHealed = false;
Units.nearby(player.team(), player.x, player.y, healRange, unit -> {
@@ -707,8 +707,8 @@ public class UnitTypes implements ContentList{
}
@Override
public void update(Playerc player){
if(player.timer.get(Playerc.timerAbility, healReload)){
public void update(Player player){
if(player.timer.get(Player.timerAbility, healReload)){
if(indexer.eachBlock(player, healRange, other -> other.entity.damaged(), other -> {
other.entity.heal(other.entity.maxHealth() * healPercent / 100f);
Fx.healBlockFull.at(other.drawx(), other.drawy(), other.block().size, Pal.heal);
@@ -782,9 +782,9 @@ public class UnitTypes implements ContentList{
}
@Override
public void update(Playerc player){
public void update(Player player){
if(player.timer.get(Playerc.timerAbility, healReload)){
if(player.timer.get(Player.timerAbility, healReload)){
wasHealed = false;
Units.nearby(player.team(), player.x, player.y, healRange, unit -> {
@@ -834,12 +834,12 @@ public class UnitTypes implements ContentList{
}
@Override
public float getRotationAlpha(Playerc player){
public float getRotationAlpha(Player player){
return 0.6f - player.shootHeat * 0.3f;
}
@Override
public float spreadX(Playerc player){
public float spreadX(Player player){
return player.shootHeat * 2f;
}
@@ -850,18 +850,18 @@ public class UnitTypes implements ContentList{
}
@Override
public void update(Playerc player){
public void update(Player player){
float scl = 1f - player.shootHeat / 2f*Time.delta();
player.vel().scl(scl);
}
@Override
public float getExtraArmor(Playerc player){
public float getExtraArmor(Player player){
return player.shootHeat * 30f;
}
@Override
public void draw(Playerc player){
public void draw(Player player){
if(player.shootHeat <= 0.01f) return;
Shaders.build.progress = player.shootHeat;
@@ -901,10 +901,10 @@ public class UnitTypes implements ContentList{
}
@Override
public void update(Playerc player){
public void update(Player player){
super.update(player);
if(player.timer.get(Playerc.timerAbility, effectReload)){
if(player.timer.get(Player.timerAbility, effectReload)){
Units.nearby(player.team(), player.x, player.y, effectRange, unit -> {
//unit.applyEffect(StatusEffects.overdrive, effectDuration);
@@ -955,12 +955,12 @@ public class UnitTypes implements ContentList{
}
@Override
public float getRotationAlpha(Playerc player){
public float getRotationAlpha(Player player){
return 0.5f;
}
@Override
public void update(Playerc player){
public void update(Player player){
float scl = scld(player);
if(Mathf.chanceDelta((0.15 * scl))){
Fx.hitLancer.at(Pal.lancerLaser, player.x, player.y);
@@ -970,7 +970,7 @@ public class UnitTypes implements ContentList{
}
@Override
public void draw(Playerc player){
public void draw(Player player){
float scl = scld(player);
if(scl < 0.01f) return;
Draw.color(Pal.lancerLaser);
@@ -980,7 +980,7 @@ public class UnitTypes implements ContentList{
Draw.blend();
}
float scld(Playerc player){
float scld(Player player){
return Mathf.clamp((player.vel().len() - minV) / (maxV - minV));
}
};

View File

@@ -33,7 +33,7 @@ public class Weathers implements ContentList{
}
@Override
public void drawOver(Weatherc state){
public void drawOver(WeatherState state){
rand.setSeed(0);
Tmp.r1.setCentered(Core.camera.position.x, Core.camera.position.y, Core.graphics.getWidth() / renderer.minScale(), Core.graphics.getHeight() / renderer.minScale());
Tmp.r1.grow(padding);
@@ -78,7 +78,7 @@ public class Weathers implements ContentList{
}
@Override
public void drawOver(Weatherc state){
public void drawOver(WeatherState state){
Tmp.r1.setCentered(Core.camera.position.x, Core.camera.position.y, Core.graphics.getWidth() / renderer.minScale(), Core.graphics.getHeight() / renderer.minScale());
Tmp.r1.grow(padding);
Core.camera.bounds(Tmp.r2);
@@ -110,7 +110,7 @@ public class Weathers implements ContentList{
}
@Override
public void drawUnder(Weatherc state){
public void drawUnder(WeatherState state){
Tmp.r1.setCentered(Core.camera.position.x, Core.camera.position.y, Core.graphics.getWidth() / renderer.minScale(), Core.graphics.getHeight() / renderer.minScale());
Tmp.r1.grow(padding);
Core.camera.bounds(Tmp.r2);
@@ -170,15 +170,15 @@ public class Weathers implements ContentList{
}
@Override
public void update(Weatherc state){
public void update(WeatherState state){
for(Unitc unit : Groups.unit){
for(Unit unit : Groups.unit){
unit.impulse(force.x * state.intensity(), force.y * state.intensity());
}
}
@Override
public void drawOver(Weatherc state){
public void drawOver(WeatherState state){
rand.setSeed(0);
Tmp.r1.setCentered(Core.camera.position.x, Core.camera.position.y, Core.graphics.getWidth() / renderer.minScale(), Core.graphics.getHeight() / renderer.minScale());
Tmp.r1.grow(padding);

View File

@@ -74,7 +74,7 @@ public class Control implements ApplicationListener, Loadable{
Events.on(WorldLoadEvent.class, event -> {
if(Mathf.zero(player.x()) && Mathf.zero(player.y())){
Tilec core = state.teams.closestCore(0, 0, player.team());
Building core = state.teams.closestCore(0, 0, player.team());
if(core != null){
player.set(core);
camera.position.set(core);
@@ -158,7 +158,7 @@ public class Control implements ApplicationListener, Loadable{
});
Events.on(Trigger.newGame, () -> {
Tilec core = player.closestCore();
Building core = player.closestCore();
if(core == null) return;
@@ -198,9 +198,9 @@ public class Control implements ApplicationListener, Loadable{
}
void createPlayer(){
player = PlayerEntity.create();
player.name(Core.settings.getString("name"));
player.color().set(Core.settings.getInt("color-0"));
player = Player.create();
player.name = Core.settings.getString("name");
player.color.set(Core.settings.getInt("color-0"));
if(mobile){
input = new MobileInput();
@@ -243,7 +243,7 @@ public class Control implements ApplicationListener, Loadable{
//TODO move
public void handleLaunch(CoreEntity tile){
LaunchCorec ent = LaunchCoreEntity.create();
LaunchCorec ent = LaunchCore.create();
ent.set(tile);
ent.block(Blocks.coreShard);
ent.lifetime(Vars.launchDuration);
@@ -268,7 +268,7 @@ public class Control implements ApplicationListener, Loadable{
if(state.rules.defaultTeam.cores().isEmpty()){
//kill all friendly units, since they should be dead anwyay
for(Unitc unit : Groups.unit){
for(Unit unit : Groups.unit){
if(unit.team() == state.rules.defaultTeam){
unit.remove();
}
@@ -347,12 +347,12 @@ public class Control implements ApplicationListener, Loadable{
zone.rules.get(state.rules);
//TODO assign zone!!
//state.rules.zone = zone;
for(Tilec core : state.teams.playerCores()){
for(Building core : state.teams.playerCores()){
for(ItemStack stack : zone.getStartingItems()){
core.items().add(stack.item, stack.amount);
}
}
Tilec core = state.teams.playerCores().first();
Building core = state.teams.playerCores().first();
core.items().clear();
logic.play();

View File

@@ -33,8 +33,8 @@ public class GameState{
private State state = State.menu;
//TODO optimize
public Unitc boss(){
return Groups.unit.find(u -> u.isBoss() && u.team() == rules.waveTeam);
public Unit boss(){
return Groups.unit.find(u -> u.isBoss() && u.team == rules.waveTeam);
}
public void set(State astate){

View File

@@ -117,7 +117,7 @@ public class Logic implements ApplicationListener{
if(!state.isCampaign()){
for(TeamData team : state.teams.getActive()){
if(team.hasCore()){
TileEntity entity = team.core();
Building entity = team.core();
entity.items.clear();
for(ItemStack stack : state.rules.loadout){
entity.items.add(stack.item, stack.amount);
@@ -221,7 +221,7 @@ public class Logic implements ApplicationListener{
}
//TODO core launch effect
for(Tilec tile : state.teams.playerCores()){
for(Building tile : state.teams.playerCores()){
Fx.launch.at(tile);
}
@@ -234,11 +234,11 @@ public class Logic implements ApplicationListener{
//TODO containers must be launched too
Time.runTask(30f, () -> {
for(Tilec entity : state.teams.playerCores()){
for(Building entity : state.teams.playerCores()){
for(Item item : content.items()){
//TODO where do the items go?
//data.addItem(item, entity.items().get(item));
//Events.fire(new LaunchItemEvent(new ItemStack(item, entity.items().get(item))));
//data.addItem(item, entity.items.get(item));
//Events.fire(new LaunchItemEvent(new ItemStack(item, entity.items.get(item))));
}
entity.tile().remove();
}

View File

@@ -153,7 +153,7 @@ public class NetClient implements ApplicationListener{
//called on all clients
@Remote(targets = Loc.server, variants = Variant.both)
public static void sendMessage(String message, String sender, Playerc playersender){
public static void sendMessage(String message, String sender, Player playersender){
if(Vars.ui != null){
Vars.ui.chatfrag.addMessage(message, sender);
}
@@ -174,7 +174,7 @@ public class NetClient implements ApplicationListener{
//called when a server recieves a chat message from a player
@Remote(called = Loc.server, targets = Loc.client)
public static void sendChatMessage(Playerc player, String message){
public static void sendChatMessage(Player player, String message){
if(message.length() > maxTextLength){
throw new ValidateException(player, "Player has sent a message above the text limit.");
}
@@ -224,7 +224,7 @@ public class NetClient implements ApplicationListener{
}
public static String colorizeName(int id, String name){
Playerc player = Groups.player.getByID(id);
Player player = Groups.player.getByID(id);
if(name == null || player == null) return null;
return "[#" + player.color().toString().toUpperCase() + "]" + name;
}
@@ -238,7 +238,7 @@ public class NetClient implements ApplicationListener{
}
@Remote(targets = Loc.client)
public static void onPing(Playerc player, long time){
public static void onPing(Player player, long time){
Call.onPingResponse(player.con(), time);
}
@@ -248,7 +248,7 @@ public class NetClient implements ApplicationListener{
}
@Remote(variants = Variant.one)
public static void onTraceInfo(Playerc player, TraceInfo info){
public static void onTraceInfo(Player player, TraceInfo info){
if(player != null){
ui.traces.show(player, info);
}
@@ -458,7 +458,7 @@ public class NetClient implements ApplicationListener{
Tile tile = world.tile(pos);
if(tile != null && tile.entity != null){
tile.entity.items().read(Reads.get(input));
tile.entity.items.read(Reads.get(input));
}else{
new ItemModule().read(Reads.get(input));
}
@@ -563,14 +563,14 @@ public class NetClient implements ApplicationListener{
}
}
Unitc unit = player.dead() ? Nulls.unit : player.unit();
Unit unit = player.dead() ? Nulls.unit : player.unit();
Call.onClientShapshot(lastSent++,
unit.x(), unit.y(),
unit.x, unit.y,
player.unit().aimX(), player.unit().aimY(),
unit.rotation(),
unit.rotation,
unit instanceof Mechc ? ((Mechc)unit).baseRotation() : 0,
unit.vel().x, unit.vel().y,
unit.vel.x, unit.vel.y,
player.miner().mineTile(),
control.input.isBoosting, control.input.isShooting, ui.chatfrag.shown(),
requests,

View File

@@ -51,7 +51,7 @@ public class NetServer implements ApplicationListener{
if((state.rules.waveTeam == data.team && state.rules.waves) || !data.team.active()) return Integer.MAX_VALUE;
int count = 0;
for(Playerc other : players){
for(Player other : players){
if(other.team() == data.team && other != player){
count++;
}
@@ -75,7 +75,7 @@ public class NetServer implements ApplicationListener{
/** Data stream for writing player sync data to. */
private DataOutputStream dataStream = new DataOutputStream(syncStream);
/** Packet handlers for custom types of messages. */
private ObjectMap<String, Seq<Cons2<Playerc, String>>> customPacketHandlers = new ObjectMap<>();
private ObjectMap<String, Seq<Cons2<Player, String>>> customPacketHandlers = new ObjectMap<>();
public NetServer(){
@@ -207,7 +207,7 @@ public class NetServer implements ApplicationListener{
con.modclient = true;
}
Playerc player = PlayerEntity.create();
Player player = Player.create();
player.admin(admins.isAdmin(uuid, packet.usid));
player.con(con);
player.con().usid = packet.usid;
@@ -267,7 +267,7 @@ public class NetServer implements ApplicationListener{
}
private void registerCommands(){
clientCommands.<Playerc>register("help", "[page]", "Lists all commands.", (args, player) -> {
clientCommands.<Player>register("help", "[page]", "Lists all commands.", (args, player) -> {
if(args.length > 0 && !Strings.canParseInt(args[0])){
player.sendMessage("[scarlet]'page' must be a number.");
return;
@@ -293,7 +293,7 @@ public class NetServer implements ApplicationListener{
player.sendMessage(result.toString());
});
clientCommands.<Playerc>register("t", "<message...>", "Send a message only to your teammates.", (args, player) -> {
clientCommands.<Player>register("t", "<message...>", "Send a message only to your teammates.", (args, player) -> {
String message = admins.filterMessage(player, args[0]);
if(message != null){
Groups.player.each(p -> p.team() == player.team(), o -> o.sendMessage(message, player, "[#" + player.team().color.toString() + "]<T>" + NetClient.colorizeName(player.id(), player.name())));
@@ -308,13 +308,13 @@ public class NetServer implements ApplicationListener{
int voteCooldown = 60 * 5;
class VoteSession{
Playerc target;
Player target;
ObjectSet<String> voted = new ObjectSet<>();
VoteSession[] map;
Timer.Task task;
int votes;
public VoteSession(VoteSession[] map, Playerc target){
public VoteSession(VoteSession[] map, Player target){
this.target = target;
this.map = map;
this.task = Timer.schedule(() -> {
@@ -326,7 +326,7 @@ public class NetServer implements ApplicationListener{
}, voteDuration);
}
void vote(Playerc player, int d){
void vote(Player player, int d){
votes += d;
voted.addAll(player.uuid(), admins.getInfo(player.uuid()).lastIP);
@@ -352,7 +352,7 @@ public class NetServer implements ApplicationListener{
//current kick sessions
VoteSession[] currentlyKicking = {null};
clientCommands.<Playerc>register("votekick", "[player...]", "Vote to kick a player.", (args, player) -> {
clientCommands.<Player>register("votekick", "[player...]", "Vote to kick a player.", (args, player) -> {
if(!Config.enableVotekick.bool()){
player.sendMessage("[scarlet]Vote-kick is disabled on this server.");
return;
@@ -377,7 +377,7 @@ public class NetServer implements ApplicationListener{
});
player.sendMessage(builder.toString());
}else{
Playerc found;
Player found;
if(args[0].length() > 1 && args[0].startsWith("#") && Strings.canParseInt(args[0].substring(1))){
int id = Strings.parseInt(args[0].substring(1));
found = Groups.player.find(p -> p.id() == id);
@@ -411,7 +411,7 @@ public class NetServer implements ApplicationListener{
}
});
clientCommands.<Playerc>register("vote", "<y/n>", "Vote to kick the current player.", (arg, player) -> {
clientCommands.<Player>register("vote", "<y/n>", "Vote to kick the current player.", (arg, player) -> {
if(currentlyKicking[0] == null){
player.sendMessage("[scarlet]Nobody is being voted on.");
}else{
@@ -441,7 +441,7 @@ public class NetServer implements ApplicationListener{
}
});
clientCommands.<Playerc>register("sync", "Re-synchronize world state.", (args, player) -> {
clientCommands.<Player>register("sync", "Re-synchronize world state.", (args, player) -> {
if(player.isLocal()){
player.sendMessage("[scarlet]Re-synchronizing as the host is pointless.");
}else{
@@ -461,15 +461,15 @@ public class NetServer implements ApplicationListener{
return 2 + (Groups.player.size() > 4 ? 1 : 0);
}
public Team assignTeam(Playerc current){
public Team assignTeam(Player current){
return assigner.assign(current, Groups.player);
}
public Team assignTeam(Playerc current, Iterable<Playerc> players){
public Team assignTeam(Player current, Iterable<Player> players){
return assigner.assign(current, players);
}
public void sendWorldData(Playerc player){
public void sendWorldData(Player player){
ByteArrayOutputStream stream = new ByteArrayOutputStream();
DeflaterOutputStream def = new FastDeflaterOutputStream(stream);
NetworkIO.writeWorld(player, def);
@@ -480,15 +480,15 @@ public class NetServer implements ApplicationListener{
Log.debug("Packed @ compressed bytes of world data.", stream.size());
}
public void addPacketHandler(String type, Cons2<Playerc, String> handler){
public void addPacketHandler(String type, Cons2<Player, String> handler){
customPacketHandlers.get(type, Seq::new).add(handler);
}
public Seq<Cons2<Playerc, String>> getPacketHandlers(String type){
public Seq<Cons2<Player, String>> getPacketHandlers(String type){
return customPacketHandlers.get(type, Seq::new);
}
public static void onDisconnect(Playerc player, String reason){
public static void onDisconnect(Player player, String reason){
//singleplayer multiplayer wierdness
if(player.con() == null){
player.remove();
@@ -510,22 +510,22 @@ public class NetServer implements ApplicationListener{
}
@Remote(targets = Loc.client)
public static void serverPacketReliable(Playerc player, String type, String contents){
public static void serverPacketReliable(Player player, String type, String contents){
if(netServer.customPacketHandlers.containsKey(type)){
for(Cons2<Playerc, String> c : netServer.customPacketHandlers.get(type)){
for(Cons2<Player, String> c : netServer.customPacketHandlers.get(type)){
c.get(player, contents);
}
}
}
@Remote(targets = Loc.client, unreliable = true)
public static void serverPacketUnreliable(Playerc player, String type, String contents){
public static void serverPacketUnreliable(Player player, String type, String contents){
serverPacketReliable(player, type, contents);
}
@Remote(targets = Loc.client, unreliable = true)
public static void onClientShapshot(
Playerc player,
Player player,
int snapshotID,
float x, float y,
float pointerX, float pointerY,
@@ -599,7 +599,7 @@ public class NetServer implements ApplicationListener{
connection.rejectedRequests.clear();
if(!player.dead()){
Unitc unit = player.unit();
Unit unit = player.unit();
unit.vel().set(xVelocity, yVelocity).limit(unit.type().speed);
long elapsed = Time.timeSinceMillis(connection.lastRecievedClientTime);
@@ -664,7 +664,7 @@ public class NetServer implements ApplicationListener{
}
@Remote(targets = Loc.client, called = Loc.server)
public static void onAdminRequest(Playerc player, Playerc other, AdminAction action){
public static void onAdminRequest(Player player, Player other, AdminAction action){
if(!player.admin()){
Log.warn("ACCESS DENIED: Player @ / @ attempted to perform admin action without proper security access.",
@@ -700,7 +700,7 @@ public class NetServer implements ApplicationListener{
}
@Remote(targets = Loc.client)
public static void connectConfirm(Playerc player){
public static void connectConfirm(Player player){
if(player.con() == null || player.con().hasConnected) return;
player.add();
@@ -773,7 +773,7 @@ public class NetServer implements ApplicationListener{
syncStream.reset();
short sent = 0;
for(Tilec entity : Groups.tile){
for(Building entity : Groups.tile){
if(!entity.block().sync) continue;
sent ++;
@@ -796,7 +796,7 @@ public class NetServer implements ApplicationListener{
}
}
public void writeEntitySnapshot(Playerc player) throws IOException{
public void writeEntitySnapshot(Player player) throws IOException{
syncStream.reset();
Seq<CoreEntity> cores = state.teams.cores(player.team());
@@ -804,7 +804,7 @@ public class NetServer implements ApplicationListener{
for(CoreEntity entity : cores){
dataStream.writeInt(entity.tile().pos());
entity.items().write(Writes.get(dataStream));
entity.items.write(Writes.get(dataStream));
}
dataStream.close();
@@ -925,6 +925,6 @@ public class NetServer implements ApplicationListener{
}
public interface TeamAssigner{
Team assign(Playerc player, Iterable<Playerc> players);
Team assign(Player player, Iterable<Player> players);
}
}

View File

@@ -259,7 +259,7 @@ public class Renderer implements ApplicationListener{
private void drawLanding(){
if(landTime > 0 && player.closestCore() != null){
float fract = landTime / Fx.coreLand.lifetime;
Tilec entity = player.closestCore();
Building entity = player.closestCore();
TextureRegion reg = entity.block().icon(Cicon.full);
float scl = Scl.scl(4f) / camerascale;

View File

@@ -102,7 +102,7 @@ public class World{
}
@Nullable
public Tile tilec(int x, int y){
public Tile Building(int x, int y){
Tile tile = tiles.get(x, y);
if(tile == null) return null;
if(tile.entity != null) return tile.entity.tile();
@@ -110,14 +110,14 @@ public class World{
}
@Nullable
public Tilec ent(int x, int y){
public Building ent(int x, int y){
Tile tile = tile(x, y);
if(tile == null) return null;
return tile.entity;
}
@Nullable
public Tilec ent(int pos){
public Building ent(int pos){
Tile tile = tile(pos);
if(tile == null) return null;
return tile.entity;
@@ -134,7 +134,7 @@ public class World{
}
@Nullable
public Tilec entWorld(float x, float y){
public Building entWorld(float x, float y){
return ent(Math.round(x / tilesize), Math.round(y / tilesize));
}
@@ -166,7 +166,7 @@ public class World{
/**
* Call to signify the beginning of map loading.
* TileChangeEvents will not be fired until endMapLoad().
* BuildinghangeEvents will not be fired until endMapLoad().
*/
public void beginMapLoad(){
generating = true;
@@ -317,7 +317,7 @@ public class World{
public void notifyChanged(Tile tile){
if(!generating){
Core.app.post(() -> Events.fire(new TileChangeEvent(tile)));
Core.app.post(() -> Events.fire(new BuildinghangeEvent(tile)));
}
}

View File

@@ -109,7 +109,7 @@ public class EditorTile extends Tile{
}
@Override
protected void changeEntity(Team team, Prov<Tilec> entityprov){
protected void changeEntity(Team team, Prov<Building> entityprov){
if(state.isGame()){
super.changeEntity(team, entityprov);
return;

View File

@@ -51,7 +51,7 @@ public class MapGenerateDialog extends BaseDialog{
private CachedTile ctile = new CachedTile(){
//nothing.
@Override
protected void changeEntity(Team team, Prov<Tilec> entityprov){
protected void changeEntity(Team team, Prov<Building> entityprov){
}
};

View File

@@ -72,7 +72,7 @@ public class Damage{
}
}
public static void collideLine(Bulletc hitter, Team team, Effect effect, float x, float y, float angle, float length){
public static void collideLine(Bullet hitter, Team team, Effect effect, float x, float y, float angle, float length){
collideLine(hitter, team, effect, x, y, angle, length, false);
}
@@ -80,11 +80,11 @@ public class Damage{
* Damages entities in a line.
* Only enemies of the specified team are damaged.
*/
public static void collideLine(Bulletc hitter, Team team, Effect effect, float x, float y, float angle, float length, boolean large){
public static void collideLine(Bullet hitter, Team team, Effect effect, float x, float y, float angle, float length, boolean large){
collidedBlocks.clear();
tr.trns(angle, length);
Intc2 collider = (cx, cy) -> {
Tilec tile = world.ent(cx, cy);
Building tile = world.ent(cx, cy);
if(tile != null && !collidedBlocks.contains(tile.pos()) && tile.team() != team && tile.collide(hitter)){
tile.collision(hitter);
collidedBlocks.add(tile.pos());
@@ -122,7 +122,7 @@ public class Damage{
rect.width += expand * 2;
rect.height += expand * 2;
Cons<Unitc> cons = e -> {
Cons<Unit> cons = e -> {
e.hitbox(hitrect);
Rect other = hitrect;
other.y -= expand;
@@ -143,8 +143,8 @@ public class Damage{
}
/** Damages all entities and blocks in a radius that are enemies of the team. */
public static void damageUnits(Team team, float x, float y, float size, float damage, Boolf<Unitc> predicate, Cons<Unitc> acceptor){
Cons<Unitc> cons = entity -> {
public static void damageUnits(Team team, float x, float y, float size, float damage, Boolf<Unit> predicate, Cons<Unit> acceptor){
Cons<Unit> cons = entity -> {
if(!predicate.get(entity)) return;
entity.hitbox(hitrect);
@@ -180,8 +180,8 @@ public class Damage{
/** Applies a status effect to all enemy units in a range. */
public static void status(Team team, float x, float y, float radius, StatusEffect effect, float duration, boolean air, boolean ground){
Cons<Unitc> cons = entity -> {
if(entity.team() == team || !entity.within(x, y, radius) || (entity.isFlying() && !air) || (entity.isGrounded() && !ground)){
Cons<Unit> cons = entity -> {
if(entity.team == team || !entity.within(x, y, radius) || (entity.isFlying() && !air) || (entity.isGrounded() && !ground)){
return;
}
@@ -203,15 +203,15 @@ public class Damage{
/** Damages all entities and blocks in a radius that are enemies of the team. */
public static void damage(Team team, float x, float y, float radius, float damage, boolean complete, boolean air, boolean ground){
Cons<Unitc> cons = entity -> {
if(entity.team() == team || !entity.within(x, y, radius) || (entity.isFlying() && !air) || (entity.isGrounded() && !ground)){
Cons<Unit> cons = entity -> {
if(entity.team == team || !entity.within(x, y, radius) || (entity.isFlying() && !air) || (entity.isGrounded() && !ground)){
return;
}
float amount = calculateDamage(x, y, entity.getX(), entity.getY(), radius, damage);
entity.damage(amount);
//TODO better velocity displacement
float dst = tr.set(entity.getX() - x, entity.getY() - y).len();
entity.vel().add(tr.setLength((1f - dst / radius) * 2f / entity.mass()));
entity.vel.add(tr.setLength((1f - dst / radius) * 2f / entity.mass()));
if(complete && damage >= 9999999f && entity.isPlayer()){
Events.fire(Trigger.exclusionDeath);

View File

@@ -42,7 +42,7 @@ public class Effects{
Rect pos = Tmp.r2.setSize(effect.size).setCenter(x, y);
if(view.overlaps(pos)){
Effectc entity = EffectEntity.create();
EffectState entity = EffectState.create();
entity.effect(effect);
entity.rotation(rotation);
entity.data(data);
@@ -58,7 +58,7 @@ public class Effects{
public static void decal(TextureRegion region, float x, float y, float rotation, float lifetime, Color color){
if(headless || region == null || !Core.atlas.isFound(region)) return;
Decalc decal = DecalEntity.create();
Decal decal = Decal.create();
decal.set(x, y);
decal.rotation(rotation);
decal.lifetime(lifetime);

View File

@@ -13,16 +13,16 @@ import static mindustry.Vars.*;
public class Fires{
private static final float baseLifetime = 1000f;
private static final IntMap<Firec> map = new IntMap<>();
private static final IntMap<Fire> map = new IntMap<>();
/** Start a fire on the tile. If there already is a file there, refreshes its lifetime. */
public static void create(Tile tile){
if(net.client() || tile == null) return; //not clientside.
Firec fire = map.get(tile.pos());
Fire fire = map.get(tile.pos());
if(fire == null){
fire = FireEntity.create();
fire = Fire.create();
fire.tile(tile);
fire.lifetime(baseLifetime);
fire.set(tile.worldx(), tile.worldy());
@@ -34,7 +34,7 @@ public class Fires{
}
}
public static Firec get(int x, int y){
public static Fire get(int x, int y){
return map.get(Point2.pack(x, y));
}
@@ -42,7 +42,7 @@ public class Fires{
if(!Structs.inBounds(x, y, world.width(), world.height()) || !map.containsKey(Point2.pack(x, y))){
return false;
}
Firec fire = map.get(Point2.pack(x, y));
Fire fire = map.get(Point2.pack(x, y));
return fire.isAdded() && fire.fin() < 1f && fire.tile() != null && fire.tile().x == x && fire.tile().y == y;
}
@@ -51,7 +51,7 @@ public class Fires{
*/
public static void extinguish(Tile tile, float intensity){
if(tile != null && map.containsKey(tile.pos())){
Firec fire = map.get(tile.pos());
Fire fire = map.get(tile.pos());
fire.time(fire.time() + intensity * Time.delta());
Fx.steam.at(fire);
if(fire.time() >= fire.lifetime()){
@@ -64,7 +64,7 @@ public class Fires{
map.remove(tile.pos());
}
public static void register(Firec fire){
map.put(fire.tile().pos(), fire);
public static void register(Fire fire){
map.put(fire.tile.pos(), fire);
}
}

View File

@@ -11,5 +11,5 @@ class GroupDefs<G>{
@GroupDef(value = Buildingc.class) G tile;
@GroupDef(value = Syncc.class, mapping = true) G sync;
@GroupDef(value = Drawc.class) G draw;
@GroupDef(value = Weatherc.class) G weather;
@GroupDef(value = WeatherStatec.class) G weather;
}

View File

@@ -10,22 +10,22 @@ import mindustry.type.*;
import mindustry.world.*;
public class Puddles{
private static final IntMap<Puddlec> map = new IntMap<>();
private static final IntMap<Puddle> map = new IntMap<>();
public static final float maxLiquid = 70f;
/** Deposists a Puddlec between tile and source. */
/** Deposists a Puddle between tile and source. */
public static void deposit(Tile tile, Tile source, Liquid liquid, float amount){
deposit(tile, source, liquid, amount, 0);
}
/** Deposists a Puddlec at a tile. */
/** Deposists a Puddle at a tile. */
public static void deposit(Tile tile, Liquid liquid, float amount){
deposit(tile, tile, liquid, amount, 0);
}
/** Returns the Puddlec on the specified tile. May return null. */
public static Puddlec get(Tile tile){
/** Returns the Puddle on the specified tile. May return null. */
public static Puddle get(Tile tile){
return map.get(tile.pos());
}
@@ -36,7 +36,7 @@ public class Puddles{
reactPuddle(tile.floor().liquidDrop, liquid, amount, tile,
(tile.worldx() + source.worldx()) / 2f, (tile.worldy() + source.worldy()) / 2f);
Puddlec p = map.get(tile.pos());
Puddle p = map.get(tile.pos());
if(generation == 0 && p != null && p.lastRipple() <= Time.time() - 40f){
Fx.ripple.at((tile.worldx() + source.worldx()) / 2f, (tile.worldy() + source.worldy()) / 2f, 1f, tile.floor().liquidDrop.color);
@@ -45,9 +45,9 @@ public class Puddles{
return;
}
Puddlec p = map.get(tile.pos());
Puddle p = map.get(tile.pos());
if(p == null){
Puddlec puddle = PuddleEntity.create();
Puddle puddle = Puddle.create();
puddle.tile(tile);
puddle.liquid(liquid);
puddle.amount(amount);
@@ -73,7 +73,7 @@ public class Puddles{
map.remove(tile.pos());
}
public static void register(Puddlec puddle){
public static void register(Puddle puddle){
map.put(puddle.tile().pos(), puddle);
}
@@ -85,12 +85,12 @@ public class Puddles{
if(Mathf.chance(0.006 * amount)){
Call.createBullet(Bullets.fireball, Team.derelict, x, y, Mathf.random(360f), -1f, 1f, 1f);
}
}else if(dest.temperature > 0.7f && liquid.temperature < 0.55f){ //cold liquid poured onto hot Puddlec
}else if(dest.temperature > 0.7f && liquid.temperature < 0.55f){ //cold liquid poured onto hot Puddle
if(Mathf.chance(0.5f * amount)){
Fx.steam.at(x, y);
}
return -0.1f * amount;
}else if(liquid.temperature > 0.7f && dest.temperature < 0.55f){ //hot liquid poured onto cold Puddlec
}else if(liquid.temperature > 0.7f && dest.temperature < 0.55f){ //hot liquid poured onto cold Puddle
if(Mathf.chance(0.8f * amount)){
Fx.steam.at(x, y);
}

View File

@@ -12,12 +12,12 @@ import static mindustry.Vars.*;
/** Utility class for unit and team interactions.*/
public class Units{
private static Rect hitrect = new Rect();
private static Unitc result;
private static Unit result;
private static float cdist;
private static boolean boolResult;
@Remote(called = Loc.server)
public static void onUnitDeath(Unitc unit){
public static void onUnitDeath(Unit unit){
unit.killed();
}
@@ -31,7 +31,7 @@ public class Units{
}
/** @return whether this player can interact with a specific tile. if either of these are null, returns true.*/
public static boolean canInteract(Playerc player, Tilec tile){
public static boolean canInteract(Player player, Building tile){
return player == null || tile == null || tile.interactable(player.team());
}
@@ -54,7 +54,7 @@ public class Units{
}
/** See {@link #invalidateTarget(Posc, Team, float, float, float)} */
public static boolean invalidateTarget(Teamc target, Unitc targeter, float range){
public static boolean invalidateTarget(Teamc target, Unit targeter, float range){
return invalidateTarget(target, targeter.team(), targeter.x(), targeter.y(), range);
}
@@ -91,18 +91,18 @@ public class Units{
}
/** Returns the neareset damaged tile. */
public static Tilec findDamagedTile(Team team, float x, float y){
public static Building findDamagedTile(Team team, float x, float y){
Tile tile = Geometry.findClosest(x, y, indexer.getDamaged(team));
return tile == null ? null : tile.entity;
}
/** Returns the neareset ally tile in a range. */
public static Tilec findAllyTile(Team team, float x, float y, float range, Boolf<Tilec> pred){
public static Building findAllyTile(Team team, float x, float y, float range, Boolf<Building> pred){
return indexer.findTile(team, x, y, range, pred);
}
/** Returns the neareset enemy tile in a range. */
public static Tilec findEnemyTile(Team team, float x, float y, float range, Boolf<Tilec> pred){
public static Building findEnemyTile(Team team, float x, float y, float range, Boolf<Building> pred){
if(team == Team.derelict) return null;
return indexer.findEnemyTile(team, x, y, range, pred);
@@ -110,19 +110,19 @@ public class Units{
/** Returns the closest target enemy. First, units are checked, then tile entities. */
public static Teamc closestTarget(Team team, float x, float y, float range){
return closestTarget(team, x, y, range, Unitc::isValid);
return closestTarget(team, x, y, range, Unit::isValid);
}
/** Returns the closest target enemy. First, units are checked, then tile entities. */
public static Teamc closestTarget(Team team, float x, float y, float range, Boolf<Unitc> unitPred){
public static Teamc closestTarget(Team team, float x, float y, float range, Boolf<Unit> unitPred){
return closestTarget(team, x, y, range, unitPred, t -> true);
}
/** Returns the closest target enemy. First, units are checked, then tile entities. */
public static Teamc closestTarget(Team team, float x, float y, float range, Boolf<Unitc> unitPred, Boolf<Tilec> tilePred){
public static Teamc closestTarget(Team team, float x, float y, float range, Boolf<Unit> unitPred, Boolf<Building> tilePred){
if(team == Team.derelict) return null;
Unitc unit = closestEnemy(team, x, y, range, unitPred);
Unit unit = closestEnemy(team, x, y, range, unitPred);
if(unit != null){
return unit;
}else{
@@ -131,7 +131,7 @@ public class Units{
}
/** Returns the closest enemy of this team. Filter by predicate. */
public static Unitc closestEnemy(Team team, float x, float y, float range, Boolf<Unitc> predicate){
public static Unit closestEnemy(Team team, float x, float y, float range, Boolf<Unit> predicate){
if(team == Team.derelict) return null;
result = null;
@@ -151,11 +151,11 @@ public class Units{
}
/** Returns the closest ally of this team. Filter by predicate. No range. */
public static Unitc closest(Team team, float x, float y, Boolf<Unitc> predicate){
public static Unit closest(Team team, float x, float y, Boolf<Unit> predicate){
result = null;
cdist = 0f;
for(Unitc e : Groups.unit){
for(Unit e : Groups.unit){
if(!predicate.get(e) || e.team() != team) continue;
float dist = e.dst2(x, y);
@@ -169,7 +169,7 @@ public class Units{
}
/** Returns the closest ally of this team. Filter by predicate. */
public static Unitc closest(Team team, float x, float y, float range, Boolf<Unitc> predicate){
public static Unit closest(Team team, float x, float y, float range, Boolf<Unit> predicate){
result = null;
cdist = 0f;
@@ -188,7 +188,7 @@ public class Units{
/** Returns the closest ally of this team. Filter by predicate.
* Unlike the closest() function, this only guarantees that unit hitboxes overlap the range. */
public static Unitc closestOverlap(Team team, float x, float y, float range, Boolf<Unitc> predicate){
public static Unit closestOverlap(Team team, float x, float y, float range, Boolf<Unit> predicate){
result = null;
cdist = 0f;
@@ -206,12 +206,12 @@ public class Units{
}
/** Iterates over all units in a rectangle. */
public static void nearby(Team team, float x, float y, float width, float height, Cons<Unitc> cons){
public static void nearby(Team team, float x, float y, float width, float height, Cons<Unit> cons){
teamIndex.tree(team).intersect(x, y, width, height, cons);
}
/** Iterates over all units in a circle around this position. */
public static void nearby(Team team, float x, float y, float radius, Cons<Unitc> cons){
public static void nearby(Team team, float x, float y, float radius, Cons<Unit> cons){
nearby(team, x - radius, y - radius, radius*2f, radius*2f, unit -> {
if(unit.within(x, y, radius)){
cons.get(unit);
@@ -220,24 +220,24 @@ public class Units{
}
/** Iterates over all units in a rectangle. */
public static void nearby(float x, float y, float width, float height, Cons<Unitc> cons){
public static void nearby(float x, float y, float width, float height, Cons<Unit> cons){
Groups.unit.intersect(x, y, width, height, cons);
}
/** Iterates over all units in a rectangle. */
public static void nearby(Rect rect, Cons<Unitc> cons){
public static void nearby(Rect rect, Cons<Unit> cons){
nearby(rect.x, rect.y, rect.width, rect.height, cons);
}
/** Iterates over all units that are enemies of this team. */
public static void nearbyEnemies(Team team, float x, float y, float width, float height, Cons<Unitc> cons){
public static void nearbyEnemies(Team team, float x, float y, float width, float height, Cons<Unit> cons){
for(Team enemy : state.teams.enemiesOf(team)){
nearby(enemy, x, y, width, height, cons);
}
}
/** Iterates over all units that are enemies of this team. */
public static void nearbyEnemies(Team team, Rect rect, Cons<Unitc> cons){
public static void nearbyEnemies(Team team, Rect rect, Cons<Unit> cons){
nearbyEnemies(team, rect.x, rect.y, rect.width, rect.height, cons);
}

View File

@@ -24,7 +24,7 @@ public class ArtilleryBulletType extends BasicBulletType{
}
@Override
public void update(Bulletc b){
public void update(Bullet b){
super.update(b);
if(b.timer(0, 3 + b.fslope() * 2f)){
@@ -33,7 +33,7 @@ public class ArtilleryBulletType extends BasicBulletType{
}
@Override
public void draw(Bulletc b){
public void draw(Bullet b){
float baseScale = 0.7f;
float scale = (baseScale + b.fslope() * (1f - baseScale));

View File

@@ -39,7 +39,7 @@ public class BasicBulletType extends BulletType{
}
@Override
public void draw(Bulletc b){
public void draw(Bullet b){
float height = this.height * ((1f - shrinkY) + shrinkY * b.fout());
float width = this.width * ((1f - shrinkX) + shrinkX * b.fout());

View File

@@ -110,19 +110,19 @@ public abstract class BulletType extends Content{
return speed * lifetime * (1f - drag);
}
public boolean collides(Bulletc bullet, Tilec tile){
public boolean collides(Bullet bullet, Building tile){
return true;
}
public void hitTile(Bulletc b, Tilec tile){
public void hitTile(Bullet b, Building tile){
hit(b);
}
public void hit(Bulletc b){
public void hit(Bullet b){
hit(b, b.getX(), b.getY());
}
public void hit(Bulletc b, float x, float y){
public void hit(Bullet b, float x, float y){
hitEffect.at(x, y, b.rotation(), hitColor);
hitSound.at(b);
@@ -153,7 +153,7 @@ public abstract class BulletType extends Content{
}
}
public void despawned(Bulletc b){
public void despawned(Bullet b){
despawnEffect.at(b.getX(), b.getY(), b.rotation());
hitSound.at(b);
@@ -162,14 +162,14 @@ public abstract class BulletType extends Content{
}
}
public void draw(Bulletc b){
public void draw(Bullet b){
}
public void drawLight(Bulletc b){
public void drawLight(Bullet b){
Drawf.light(b.team(), b, lightRadius, lightColor, lightOpacity);
}
public void init(Bulletc b){
public void init(Bullet b){
if(killShooter && b.owner() instanceof Healthc){
((Healthc)b.owner()).kill();
}
@@ -179,7 +179,7 @@ public abstract class BulletType extends Content{
}
}
public void update(Bulletc b){
public void update(Bullet b){
if(homingPower > 0.0001f){
Teamc target = Units.closestTarget(b.team(), b.getX(), b.getY(), homingRange, e -> (e.isGrounded() && collidesGround) || (e.isFlying() && collidesAir), t -> collidesGround);
if(target != null){
@@ -197,32 +197,32 @@ public abstract class BulletType extends Content{
return ContentType.bullet;
}
public Bulletc create(Teamc owner, float x, float y, float angle){
public Bullet create(Teamc owner, float x, float y, float angle){
return create(owner, owner.team(), x, y, angle);
}
public Bulletc create(Entityc owner, Team team, float x, float y, float angle){
public Bullet create(Entityc owner, Team team, float x, float y, float angle){
return create(owner, team, x, y, angle, 1f);
}
public Bulletc create(Entityc owner, Team team, float x, float y, float angle, float velocityScl){
public Bullet create(Entityc owner, Team team, float x, float y, float angle, float velocityScl){
return create(owner, team, x, y, angle, -1, velocityScl, 1f, null);
}
public Bulletc create(Entityc owner, Team team, float x, float y, float angle, float velocityScl, float lifetimeScl){
public Bullet create(Entityc owner, Team team, float x, float y, float angle, float velocityScl, float lifetimeScl){
return create(owner, team, x, y, angle, -1, velocityScl, lifetimeScl, null);
}
public Bulletc create(Bulletc parent, float x, float y, float angle){
public Bullet create(Bullet parent, float x, float y, float angle){
return create(parent.owner(), parent.team(), x, y, angle);
}
public Bulletc create(Bulletc parent, float x, float y, float angle, float velocityScl){
public Bullet create(Bullet parent, float x, float y, float angle, float velocityScl){
return create(parent.owner(), parent.team(), x, y, angle, velocityScl);
}
public Bulletc create(@Nullable Entityc owner, Team team, float x, float y, float angle, float damage, float velocityScl, float lifetimeScl, Object data){
Bulletc bullet = BulletEntity.create();
public Bullet create(@Nullable Entityc owner, Team team, float x, float y, float angle, float damage, float velocityScl, float lifetimeScl, Object data){
Bullet bullet = Bullet.create();
bullet.type(this);
bullet.owner(owner);
bullet.team(team);

View File

@@ -43,7 +43,7 @@ public class ContinuousLaserBulletType extends BulletType{
}
@Override
public void update(Bulletc b){
public void update(Bullet b){
//TODO possible laser absorption from blocks
//damage every 5 ticks
@@ -57,7 +57,7 @@ public class ContinuousLaserBulletType extends BulletType{
}
@Override
public void draw(Bulletc b){
public void draw(Bullet b){
float baseLen = length * b.fout();
Lines.lineAngle(b.x(), b.y(), b.rotation(), baseLen);
@@ -77,7 +77,7 @@ public class ContinuousLaserBulletType extends BulletType{
}
@Override
public void drawLight(Bulletc b){
public void drawLight(Bullet b){
//no light drawn here
}

View File

@@ -23,7 +23,7 @@ public class FlakBulletType extends BasicBulletType{
}
@Override
public void update(Bulletc b){
public void update(Bullet b){
super.update(b);
if(b.data() instanceof Integer) return;

View File

@@ -28,12 +28,12 @@ public class HealBulletType extends BulletType{
}
@Override
public boolean collides(Bulletc b, Tilec tile){
public boolean collides(Bullet b, Building tile){
return tile.team() != b.team() || tile.healthf() < 1f;
}
@Override
public void draw(Bulletc b){
public void draw(Bullet b){
Draw.color(backColor);
Lines.stroke(bulletWidth);
Lines.lineAngleCenter(b.x(), b.y(), b.rotation(), bulletHeight);
@@ -43,7 +43,7 @@ public class HealBulletType extends BulletType{
}
@Override
public void hitTile(Bulletc b, Tilec tile){
public void hitTile(Bullet b, Building tile){
super.hit(b);
if(tile.team() == b.team() && !(tile.block() instanceof BuildBlock)){

View File

@@ -48,7 +48,7 @@ public class LaserBulletType extends BulletType{
}
@Override
public void init(Bulletc b){
public void init(Bullet b){
Tmp.v1.trns(b.rotation(), length);
furthest = null;
@@ -65,7 +65,7 @@ public class LaserBulletType extends BulletType{
}
@Override
public void draw(Bulletc b){
public void draw(Bullet b){
float realLength = b.data() == null ? length : (Float)b.data();
float f = Mathf.curve(b.fin(), 0f, 0.2f);
@@ -97,7 +97,7 @@ public class LaserBulletType extends BulletType{
}
@Override
public void drawLight(Bulletc b){
public void drawLight(Bullet b){
//no light drawn here
}
}

View File

@@ -26,11 +26,11 @@ public class LightningBulletType extends BulletType{
}
@Override
public void draw(Bulletc b){
public void draw(Bullet b){
}
@Override
public void init(Bulletc b){
public void init(Bullet b){
Lightning.create(b.team(), lightningColor, damage, b.x(), b.y(), b.rotation(), lightningLength);
}
}

View File

@@ -44,7 +44,7 @@ public class LiquidBulletType extends BulletType{
}
@Override
public void update(Bulletc b){
public void update(Bullet b){
super.update(b);
if(liquid.canExtinguish()){
@@ -58,21 +58,21 @@ public class LiquidBulletType extends BulletType{
}
@Override
public void draw(Bulletc b){
public void draw(Bullet b){
Draw.color(liquid.color, Color.white, b.fout() / 100f);
Fill.circle(b.x(), b.y(), 3f);
}
@Override
public void despawned(Bulletc b){
public void despawned(Bullet b){
super.despawned(b);
hit(b, b.x(), b.y());
}
@Override
public void hit(Bulletc b, float hitx, float hity){
public void hit(Bullet b, float hitx, float hity){
hitEffect.at(hitx, hity, liquid.color);
Puddles.deposit(world.tileWorld(hitx, hity), liquid, puddleSize);

View File

@@ -22,7 +22,7 @@ public class MassDriverBolt extends BulletType{
}
@Override
public void draw(Bulletc b){
public void draw(Bullet b){
float w = 11f, h = 13f;
Draw.color(Pal.bulletYellowBack);
@@ -35,7 +35,7 @@ public class MassDriverBolt extends BulletType{
}
@Override
public void update(Bulletc b){
public void update(Bullet b){
//data MUST be an instance of DriverBulletData
if(!(b.data() instanceof DriverBulletData)){
hit(b);
@@ -81,7 +81,7 @@ public class MassDriverBolt extends BulletType{
}
@Override
public void despawned(Bulletc b){
public void despawned(Bullet b){
super.despawned(b);
if(!(b.data() instanceof DriverBulletData)) return;
@@ -98,7 +98,7 @@ public class MassDriverBolt extends BulletType{
}
@Override
public void hit(Bulletc b, float hitx, float hity){
public void hit(Bullet b, float hitx, float hity){
super.hit(b, hitx, hity);
despawned(b);
}

View File

@@ -22,7 +22,7 @@ public class MissileBulletType extends BasicBulletType{
}
@Override
public void update(Bulletc b){
public void update(Bullet b){
super.update(b);
if(Mathf.chanceDelta(0.2)){

View File

@@ -10,9 +10,9 @@ import static mindustry.Vars.tilesize;
abstract class BlockUnitComp implements Unitc{
@Import Team team;
@ReadOnly transient Tilec tile;
@ReadOnly transient Building tile;
public void tile(Tilec tile){
public void tile(Building tile){
this.tile = tile;
//sets up block stats

View File

@@ -54,7 +54,7 @@ abstract class BuilderComp implements Unitc{
}
}
Tilec core = core();
Building core = core();
//nothing to build.
if(buildPlan() == null) return;
@@ -114,9 +114,9 @@ abstract class BuilderComp implements Unitc{
BuildEntity entity = tile.ent();
if(current.breaking){
entity.deconstruct(this, core, 1f / entity.buildCost * Time.delta() * type().buildSpeed * state.rules.buildSpeedMultiplier);
entity.deconstruct(base(), core, 1f / entity.buildCost * Time.delta() * type().buildSpeed * state.rules.buildSpeedMultiplier);
}else{
if(entity.construct(this, core, 1f / entity.buildCost * Time.delta() * type().buildSpeed * state.rules.buildSpeedMultiplier, current.hasConfig)){
if(entity.construct(base(), core, 1f / entity.buildCost * Time.delta() * type().buildSpeed * state.rules.buildSpeedMultiplier, current.hasConfig)){
if(current.hasConfig){
Call.onTileConfig(null, tile.entity, current.config);
}
@@ -147,7 +147,7 @@ abstract class BuilderComp implements Unitc{
}
/** @return whether this request should be skipped, in favor of the next one. */
boolean shouldSkip(BuildPlan request, @Nullable Tilec core){
boolean shouldSkip(BuildPlan request, @Nullable Building core){
//requests that you have at least *started* are considered
if(state.rules.infiniteResources || team().rules().infiniteResources || request.breaking || core == null) return false;
//TODO these are bad criteria

View File

@@ -37,11 +37,11 @@ import static mindustry.Vars.*;
@EntityDef(value = {Buildingc.class}, isFinal = false, genio = false, serialize = false)
@Component(base = true)
abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, QuadTreeObject, Displayable{
abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, QuadTreeObject, Displayable{
//region vars and initialization
static final float timeToSleep = 60f * 1;
static final ObjectSet<Tilec> tmpTiles = new ObjectSet<>();
static final Seq<Tilec> tempTileEnts = new Seq<>();
static final ObjectSet<Building> tmpTiles = new ObjectSet<>();
static final Seq<Building> tempTileEnts = new Seq<>();
static final Seq<Tile> tempTiles = new Seq<>();
static int sleepingEntities = 0;
@@ -50,7 +50,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
transient Tile tile;
transient Block block;
transient Seq<Tilec> proximity = new Seq<>(8);
transient Seq<Building> proximity = new Seq<>(8);
transient boolean updateFlow;
transient byte dump;
@@ -68,7 +68,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
private transient boolean initialized;
/** Sets this tile entity data to this and adds it if necessary. */
public Tilec init(Tile tile, Team team, boolean shouldAdd){
public Building init(Tile tile, Team team, boolean shouldAdd){
if(!initialized){
create(tile.block(), team);
}
@@ -82,11 +82,11 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
created();
return this;
return base();
}
/** Sets up all the necessary variables, but does not add this entity anywhere. */
public Tilec create(Block block, Team team){
public Building create(Block block, Team team){
this.tile = emptyTile;
this.block = block;
this.team = team;
@@ -99,17 +99,17 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
maxHealth(block.health);
timer(new Interval(block.timers));
cons = new ConsumeModule(this);
cons = new ConsumeModule(base());
if(block.hasItems) items = new ItemModule();
if(block.hasLiquids) liquids = new LiquidModule();
if(block.hasPower){
power = new PowerModule();
power.graph.add(this);
power.graph.add(base());
}
initialized = true;
return this;
return base();
}
@Override
@@ -174,17 +174,17 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
public void configure(Object value){
//save last used config
block.lastConfig = value;
Call.onTileConfig(player, this, value);
Call.onTileConfig(player, base(), value);
}
/** Configure from a server. */
public void configureAny(Object value){
Call.onTileConfig(null, this, value);
Call.onTileConfig(null, base(), value);
}
/** Deselect this tile from configuration. */
public void deselect(){
if(!headless && control.input.frag.config.getSelectedTile() == this){
if(!headless && control.input.frag.config.getSelectedTile() == base()){
control.input.frag.config.hideConfig();
}
}
@@ -200,11 +200,11 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
timeScaleDuration = Math.max(timeScaleDuration, duration);
}
public Tilec nearby(int dx, int dy){
public Building nearby(int dx, int dy){
return world.ent(tile.x + dx, tile.y + dy);
}
public Tilec nearby(int rotation){
public Building nearby(int rotation){
if(rotation == 0) return world.ent(tile.x + 1, tile.y);
if(rotation == 1) return world.ent(tile.x, tile.y + 1);
if(rotation == 2) return world.ent(tile.x - 1, tile.y);
@@ -216,7 +216,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
return relativeTo(tile.x, tile.y);
}
public byte relativeTo(Tilec tile){
public byte relativeTo(Building tile){
return relativeTo(tile.tile());
}
@@ -229,25 +229,25 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
}
/** Multiblock front. */
public @Nullable Tilec front(){
public @Nullable Building front(){
int trns = block.size/2 + 1;
return nearby(Geometry.d4(rotation()).x * trns, Geometry.d4(rotation()).y * trns);
}
/** Multiblock back. */
public @Nullable Tilec back(){
public @Nullable Building back(){
int trns = block.size/2 + 1;
return nearby(Geometry.d4(rotation() + 2).x * trns, Geometry.d4(rotation() + 2).y * trns);
}
/** Multiblock left. */
public @Nullable Tilec left(){
public @Nullable Building left(){
int trns = block.size/2 + 1;
return nearby(Geometry.d4(rotation() + 1).x * trns, Geometry.d4(rotation() + 1).y * trns);
}
/** Multiblock right. */
public @Nullable Tilec right(){
public @Nullable Building right(){
int trns = block.size/2 + 1;
return nearby(Geometry.d4(rotation() + 3).x * trns, Geometry.d4(rotation() + 3).y * trns);
}
@@ -323,7 +323,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
}
}
/** Returns the version of this TileEntity IO code.*/
/** Returns the version of this Building IO code.*/
public byte version(){
return 0;
}
@@ -347,7 +347,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
/** Returns the amount of items this block can accept. */
public int acceptStack(Item item, int amount, Teamc source){
if(acceptItem(this, item) && block.hasItems && (source == null || source.team() == team())){
if(acceptItem(base(), item) && block.hasItems && (source == null || source.team() == team)){
return Math.min(getMaximumAccepted(item) - items.get(item), amount);
}else{
return 0;
@@ -382,11 +382,11 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
noSleep();
}
public boolean acceptPayload(Tilec source, Payload payload){
public boolean acceptPayload(Building source, Payload payload){
return false;
}
public void handlePayload(Tilec source, Payload payload){
public void handlePayload(Building source, Payload payload){
}
@@ -400,8 +400,8 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
int trns = block.size/2 + 1;
Tile next = tile.getNearby(Geometry.d4(rotation()).x * trns, Geometry.d4(rotation()).y * trns);
if(next != null && next.entity != null && next.entity.team() == team() && next.entity.acceptPayload(this, todump)){
next.entity.handlePayload(this, todump);
if(next != null && next.entity != null && next.entity.team() == team && next.entity.acceptPayload(base(), todump)){
next.entity.handlePayload(base(), todump);
return true;
}
@@ -419,10 +419,10 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
int dump = this.dump;
for(int i = 0; i < proximity.size; i++){
Tilec other = proximity.get((i + dump) % proximity.size);
Building other = proximity.get((i + dump) % proximity.size);
if(other.team() == team() && other.acceptPayload(this, todump)){
other.handlePayload(this, todump);
if(other.team() == team && other.acceptPayload(base(), todump)){
other.handlePayload(base(), todump);
incrementDump(proximity.size);
return true;
}
@@ -433,19 +433,19 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
return false;
}
public void handleItem(Tilec source, Item item){
public void handleItem(Building source, Item item){
items.add(item, 1);
}
public boolean acceptItem(Tilec source, Item item){
public boolean acceptItem(Building source, Item item){
return block.consumes.itemFilters.get(item.id) && items.get(item) < getMaximumAccepted(item);
}
public boolean acceptLiquid(Tilec source, Liquid liquid, float amount){
public boolean acceptLiquid(Building source, Liquid liquid, float amount){
return block.hasLiquids && liquids.get(liquid) + amount < block.liquidCapacity && block.consumes.liquidfilters.get(liquid.id);
}
public void handleLiquid(Tilec source, Liquid liquid, float amount){
public void handleLiquid(Building source, Liquid liquid, float amount){
liquids.add(liquid, amount);
}
@@ -454,11 +454,11 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
for(int i = 0; i < proximity.size; i++){
incrementDump(proximity.size);
Tilec other = proximity.get((i + dump) % proximity.size);
other = other.getLiquidDestination(this, liquid);
Building other = proximity.get((i + dump) % proximity.size);
other = other.getLiquidDestination(base(), liquid);
if(other != null && other.team() == team() && other.block().hasLiquids && canDumpLiquid(other, liquid) && other.liquids() != null){
float ofract = other.liquids().get(liquid) / other.block().liquidCapacity;
if(other != null && other.team == team && other.block.hasLiquids && canDumpLiquid(other, liquid) && other.liquids != null){
float ofract = other.liquids.get(liquid) / other.block.liquidCapacity;
float fract = liquids.get(liquid) / block.liquidCapacity;
if(ofract < fract) transferLiquid(other, (fract - ofract) * block.liquidCapacity / 2f, liquid);
@@ -467,15 +467,15 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
}
public boolean canDumpLiquid(Tilec to, Liquid liquid){
public boolean canDumpLiquid(Building to, Liquid liquid){
return true;
}
public void transferLiquid(Tilec next, float amount, Liquid liquid){
float flow = Math.min(next.block().liquidCapacity - next.liquids().get(liquid) - 0.001f, amount);
public void transferLiquid(Building next, float amount, Liquid liquid){
float flow = Math.min(next.block.liquidCapacity - next.liquids.get(liquid) - 0.001f, amount);
if(next.acceptLiquid(this, liquid, flow)){
next.handleLiquid(this, liquid, flow);
if(next.acceptLiquid(base(), liquid, flow)){
next.handleLiquid(base(), liquid, flow);
liquids.remove(liquid, flow);
}
}
@@ -489,32 +489,32 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
return moveLiquid(next.entity, liquid);
}else if(leakResistance != 100f && !next.block().solid && !next.block().hasLiquids){
float leakAmount = liquids.get(liquid) / leakResistance;
Puddles.deposit(next, tile(), liquid, leakAmount);
Puddles.deposit(next, tile, liquid, leakAmount);
liquids.remove(liquid, leakAmount);
}
return 0;
}
public float moveLiquid(Tilec next, Liquid liquid){
public float moveLiquid(Building next, Liquid liquid){
if(next == null) return 0;
next = next.getLiquidDestination(this, liquid);
next = next.getLiquidDestination(base(), liquid);
if(next.team() == team() && next.block().hasLiquids && liquids.get(liquid) > 0f){
if(next.team() == team && next.block.hasLiquids && liquids.get(liquid) > 0f){
if(next.acceptLiquid(this, liquid, 0f)){
float ofract = next.liquids().get(liquid) / next.block().liquidCapacity;
if(next.acceptLiquid(base(), liquid, 0f)){
float ofract = next.liquids().get(liquid) / next.block.liquidCapacity;
float fract = liquids.get(liquid) / block.liquidCapacity * block.liquidPressure;
float flow = Math.min(Mathf.clamp((fract - ofract) * (1f)) * (block.liquidCapacity), liquids.get(liquid));
flow = Math.min(flow, next.block().liquidCapacity - next.liquids().get(liquid) - 0.001f);
flow = Math.min(flow, next.block.liquidCapacity - next.liquids().get(liquid) - 0.001f);
if(flow > 0f && ofract <= fract && next.acceptLiquid(this, liquid, flow)){
next.handleLiquid(this, liquid, flow);
if(flow > 0f && ofract <= fract && next.acceptLiquid(base(), liquid, flow)){
next.handleLiquid(base(), liquid, flow);
liquids.remove(liquid, flow);
return flow;
}else if(ofract > 0.1f && fract > 0.1f){
//TODO these are incorrect effect positions
float fx = (x() + next.x()) / 2f, fy = (y() + next.y()) / 2f;
float fx = (x + next.x()) / 2f, fy = (y + next.y()) / 2f;
Liquid other = next.liquids().current();
if((other.flammability > 0.3f && liquid.temperature > 0.7f) || (liquid.flammability > 0.3f && other.temperature > 0.7f)){
@@ -535,8 +535,8 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
return 0;
}
public Tilec getLiquidDestination(Tilec from, Liquid liquid){
return this;
public Building getLiquidDestination(Building from, Liquid liquid){
return base();
}
/** Tries to take the payload. Returns null if no payload is present. */
@@ -553,14 +553,14 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
for(int i = 0; i < proximity.size; i++){
incrementDump(proximity.size);
Tilec other = proximity.get((i + dump) % proximity.size);
if(other.team() == team() && other.acceptItem(this, item) && canDump(other, item)){
other.handleItem(this, item);
Building other = proximity.get((i + dump) % proximity.size);
if(other.team() == team && other.acceptItem(base(), item) && canDump(other, item)){
other.handleItem(base(), item);
return;
}
}
handleItem(this, item);
handleItem(base(), item);
}
/**
@@ -571,9 +571,9 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
for(int i = 0; i < proximity.size; i++){
incrementDump(proximity.size);
Tilec other = proximity.get((i + dump) % proximity.size);
if(other.team() == team() && other.acceptItem(this, item) && canDump(other, item)){
other.handleItem(this, item);
Building other = proximity.get((i + dump) % proximity.size);
if(other.team() == team && other.acceptItem(base(), item) && canDump(other, item)){
other.handleItem(base(), item);
return true;
}
}
@@ -598,23 +598,23 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
if(proximity.size == 0) return false;
for(int i = 0; i < proximity.size; i++){
Tilec other = proximity.get((i + dump) % proximity.size);
Building other = proximity.get((i + dump) % proximity.size);
if(todump == null){
for(int ii = 0; ii < content.items().size; ii++){
Item item = content.item(ii);
if(other.team() == team() && items.has(item) && other.acceptItem(this, item) && canDump(other, item)){
other.handleItem(this, item);
if(other.team() == team && items.has(item) && other.acceptItem(base(), item) && canDump(other, item)){
other.handleItem(base(), item);
items.remove(item, 1);
incrementDump(proximity.size);
return true;
}
}
}else{
if(other.team() == team() && other.acceptItem(this, todump) && canDump(other, todump)){
other.handleItem(this, todump);
if(other.team() == team && other.acceptItem(base(), todump) && canDump(other, todump)){
other.handleItem(base(), todump);
items.remove(todump, 1);
incrementDump(proximity.size);
return true;
@@ -632,15 +632,15 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
}
/** Used for dumping items. */
public boolean canDump(Tilec to, Item item){
public boolean canDump(Building to, Item item){
return true;
}
/** Try offloading an item to a nearby container in its facing direction. Returns true if success. */
public boolean moveForward(Item item){
Tilec other = front();
if(other != null && other.team() == team() && other.acceptItem(this, item)){
other.handleItem(this, item);
Building other = front();
if(other != null && other.team() == team && other.acceptItem(base(), item)){
other.handleItem(base(), item);
return true;
}
return false;
@@ -658,9 +658,9 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
public void updatePowerGraph(){
for(Tilec other : getPowerConnections(tempTileEnts)){
for(Building other : getPowerConnections(tempTileEnts)){
if(other.power() != null){
other.power().graph.add(power.graph);
other.power().graph.addGraph(power.graph);
}
}
}
@@ -670,22 +670,22 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
return;
}
power.graph.remove(this);
power.graph.remove(base());
for(int i = 0; i < power.links.size; i++){
Tile other = world.tile(power.links.get(i));
if(other != null && other.entity != null && other.entity.power() != null){
other.entity.power().links.removeValue(pos());
if(other != null && other.entity != null && other.entity.power != null){
other.entity.power.links.removeValue(pos());
}
}
}
public Seq<Tilec> getPowerConnections(Seq<Tilec> out){
public Seq<Building> getPowerConnections(Seq<Building> out){
out.clear();
if(power == null) return out;
for(Tilec other : proximity){
for(Building other : proximity){
if(other != null && other.power() != null
&& !(block.consumesPower && other.block().consumesPower && !block.outputsPower && !other.block().outputsPower)
&& !(block.consumesPower && other.block.consumesPower && !block.outputsPower && !other.block.outputsPower)
&& !power.links.contains(other.pos())){
out.add(other);
}
@@ -693,7 +693,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
for(int i = 0; i < power.links.size; i++){
Tile link = world.tile(power.links.get(i));
if(link != null && link.entity != null && link.entity.power() != null) out.add(link.entity);
if(link != null && link.entity != null && link.entity.power != null) out.add(link.entity);
}
return out;
}
@@ -731,7 +731,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
int id = pos();
TextureRegion region = Block.cracks[block.size - 1][Mathf.clamp((int)((1f - healthf()) * Block.crackRegions), 0, Block.crackRegions-1)];
Draw.colorl(0.2f, 0.1f + (1f - healthf())* 0.6f);
Draw.rect(region, x(), y(), (id%4)*90);
Draw.rect(region, x, y, (id%4)*90);
Draw.color();
}
@@ -793,8 +793,9 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
int range = 10;
tempTiles.clear();
Geometry.circle(tileX(), tileY(), range, (x, y) -> {
Tilec other = world.ent(x, y);
if(other != null && other.block() instanceof PowerNode && ((PowerNode)other.block()).linkValid(other, this) && !PowerNode.insulated(other, this) && !other.proximity().contains(this) &&
Building other = world.ent(x, y);
if(other != null && other.block instanceof PowerNode && ((PowerNode)other.block).linkValid(other, base()) && !PowerNode.insulated(other, base())
&& !other.proximity().contains(this.<Building>base()) &&
!(block.outputsPower && proximity.contains(p -> p.power() != null && p.power().graph == other.power().graph))){
tempTiles.add(other.tile());
}
@@ -802,7 +803,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
tempTiles.sort(Structs.comparingFloat(t -> t.dst2(tile)));
if(!tempTiles.isEmpty()){
Tile toLink = tempTiles.first();
if(!toLink.entity.power().links.contains(pos())){
if(!toLink.entity.power.links.contains(pos())){
toLink.entity.configureAny(pos());
}
}
@@ -813,15 +814,15 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
}
/** Called every frame a unit is on this */
public void unitOn(Unitc unit){
public void unitOn(Unit unit){
}
/** Called when a unit that spawned at this tile is removed. */
public void unitRemoved(Unitc unit){
public void unitRemoved(Unit unit){
}
/** Called when arbitrary configuration is applied to a tile. */
public void configured(@Nullable Playerc player, @Nullable Object value){
public void configured(@Nullable Player player, @Nullable Object value){
//null is of type void.class; anonymous classes use their superclass.
Class<?> type = value == null ? void.class : value.getClass().isAnonymousClass() ? value.getClass().getSuperclass() : value.getClass();
@@ -831,7 +832,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
}
/** Called when the block is tapped.*/
public void tapped(Playerc player){
public void tapped(Player player){
}
@@ -981,13 +982,13 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
table.left();
for(Consume cons : block.consumes.all()){
if(cons.isOptional() && cons.isBoost()) continue;
cons.build(this, table);
cons.build(base(), table);
}
}
public void displayBars(Table table){
for(Func<Tilec, Bar> bar : block.bars.list()){
table.add(bar.get(this)).growX();
for(Func<Building, Bar> bar : block.bars.list()){
table.add(bar.get(base())).growX();
table.row();
}
}
@@ -999,7 +1000,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
/** Update table alignment after configuring.*/
public void updateTableAlign(Table table){
Vec2 pos = Core.input.mouseScreen(x, y - block().size * tilesize / 2f - 1);
Vec2 pos = Core.input.mouseScreen(x, y - block.size * tilesize / 2f - 1);
table.setPosition(pos.x, pos.y, Align.top);
}
@@ -1012,24 +1013,24 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
* Called when another tile is tapped while this block is selected.
* @return whether or not this block should be deselected.
*/
public boolean onConfigureTileTapped(Tilec other){
return this != other;
public boolean onConfigureTileTapped(Building other){
return base() != other;
}
/** Returns whether this config menu should show when the specified player taps it. */
public boolean shouldShowConfigure(Playerc player){
public boolean shouldShowConfigure(Player player){
return true;
}
/** Whether this configuration should be hidden now. Called every frame the config is open. */
public boolean shouldHideConfigure(Playerc player){
public boolean shouldHideConfigure(Player player){
return false;
}
public void drawConfigure(){
Draw.color(Pal.accent);
Lines.stroke(1f);
Lines.square(x, y, block().size * tilesize / 2f + 1f);
Lines.square(x, y, block.size * tilesize / 2f + 1f);
Draw.reset();
}
@@ -1042,13 +1043,13 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
return amount;
}
public boolean collide(Bulletc other){
public boolean collide(Bullet other){
return true;
}
/** Handle a bullet collision.
* @return whether the bullet should be removed. */
public boolean collision(Bulletc other){
public boolean collision(Bullet other){
damage(other.damage() * other.type().tileDamageMultiplier);
return true;
@@ -1060,15 +1061,15 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
Point2[] nearby = Edges.getEdges(block.size);
for(Point2 point : nearby){
Tilec other = world.ent(tile.x + point.x, tile.y + point.y);
Building other = world.ent(tile.x + point.x, tile.y + point.y);
//remove this tile from all nearby tile's proximities
if(other != null){
tmpTiles.add(other);
}
}
for(Tilec other : tmpTiles){
other.proximity().remove(this, true);
for(Building other : tmpTiles){
other.proximity.remove(base(), true);
other.onProximityUpdate();
}
}
@@ -1079,31 +1080,31 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
Point2[] nearby = Edges.getEdges(block.size);
for(Point2 point : nearby){
Tilec other = world.ent(tile.x + point.x, tile.y + point.y);
Building other = world.ent(tile.x + point.x, tile.y + point.y);
if(other == null || !(other.tile().interactable(team()))) continue;
if(other == null || !(other.tile.interactable(team))) continue;
//add this tile to proximity of nearby tiles
if(!other.proximity().contains(this, true)){
other.proximity().add(this);
if(!other.proximity.contains(base(), true)){
other.proximity.add(base());
}
tmpTiles.add(other);
}
//using a set to prevent duplicates
for(Tilec tile : tmpTiles){
for(Building tile : tmpTiles){
proximity.add(tile);
}
for(Tilec other : tmpTiles){
for(Building other : tmpTiles){
other.onProximityUpdate();
}
onProximityAdded();
onProximityUpdate();
for(Tilec other : tmpTiles){
for(Building other : tmpTiles){
other.onProximityUpdate();
}
}
@@ -1124,7 +1125,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
@Replace
@Override
public boolean isValid(){
return tile.entity == this && !dead();
return tile.entity == base() && !dead();
}
@Override
@@ -1156,7 +1157,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Tilec, Timerc, Quad
}
if(block.idleSound != Sounds.none && shouldIdleSound()){
loops.play(block.idleSound, this, block.idleSoundVolume);
loops.play(block.idleSound, base(), block.idleSoundVolume);
}
updateTile();

View File

@@ -34,24 +34,24 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
@Override
public void drawBullets(){
type.draw(this);
type.draw(base());
}
@Override
public void add(){
type.init(this);
type.init(base());
}
@Override
public void remove(){
type.despawned(this);
type.despawned(base());
collided.clear();
}
@Override
public float damageMultiplier(){
if(owner instanceof Unitc) return ((Unitc)owner).damageMultiplier() * state.rules.unitDamageMultiplier;
if(owner instanceof Tilec) return state.rules.blockDamageMultiplier;
if(owner instanceof Unit) return ((Unit)owner).damageMultiplier() * state.rules.unitDamageMultiplier;
if(owner instanceof Building) return state.rules.blockDamageMultiplier;
return 1f;
}
@@ -74,7 +74,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
@Replace
@Override
public boolean collides(Hitboxc other){
return type.collides && (other instanceof Teamc && ((Teamc)other).team() != team())
return type.collides && (other instanceof Teamc && ((Teamc)other).team() != team)
&& !(other instanceof Flyingc && ((((Flyingc)other).isFlying() && !type.collidesAir) || (((Flyingc)other).isGrounded() && !type.collidesGround)))
&& !(type.pierce && collided.contains(other.id())); //prevent multiple collisions
}
@@ -82,16 +82,16 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
@MethodPriority(100)
@Override
public void collision(Hitboxc other, float x, float y){
type.hit(this, x, y);
type.hit(base(), x, y);
if(other instanceof Healthc){
Healthc h = (Healthc)other;
h.damage(damage);
}
if(other instanceof Unitc){
Unitc unit = (Unitc)other;
unit.vel().add(Tmp.v3.set(other.x(), other.y()).sub(x, y).setLength(type.knockback / unit.mass()));
if(other instanceof Unit){
Unit unit = (Unit)other;
unit.vel.add(Tmp.v3.set(unit).sub(x, y).setLength(type.knockback / unit.mass()));
unit.apply(type.status, type.statusDuration);
}
@@ -105,23 +105,23 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
@Override
public void update(){
type.update(this);
type.update(base());
if(type.collidesTiles && type.collides){
world.raycastEach(world.toTile(lastX()), world.toTile(lastY()), tileX(), tileY(), (x, y) -> {
Tilec tile = world.ent(x, y);
Building tile = world.ent(x, y);
if(tile == null) return false;
if(tile.collide(this) && type.collides(this, tile) && !tile.dead() && (type.collidesTeam || tile.team() != team())){
if(tile.collide(base()) && type.collides(base(), tile) && !tile.dead() && (type.collidesTeam || tile.team() != team())){
boolean remove = false;
if(tile.team() != team()){
remove = tile.collision(this);
remove = tile.collision(base());
}
if(remove){
type.hitTile(this, tile);
type.hitTile(base(), tile);
remove();
}
return true;
@@ -136,8 +136,8 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
public void draw(){
Draw.z(Layer.bullet);
type.draw(this);
type.drawLight(this);
type.draw(base());
type.drawLight(base());
}
/** Sets the bullet's rotation in degrees. */

View File

@@ -16,7 +16,7 @@ abstract class CommanderComp implements Unitc{
@Import float x, y, rotation;
transient @Nullable Formation formation;
transient Seq<Unitc> controlling = new Seq<>();
transient Seq<Unit> controlling = new Seq<>();
@Override
public void update(){
@@ -42,12 +42,12 @@ abstract class CommanderComp implements Unitc{
clearCommand();
}
void command(Formation formation, Seq<Unitc> units){
void command(Formation formation, Seq<Unit> units){
clearCommand();
controlling.addAll(units);
for(Unitc unit : units){
unit.controller(new FormationAI(this, formation));
for(Unit unit : units){
unit.controller(new FormationAI(base(), formation));
}
this.formation = formation;
@@ -67,8 +67,8 @@ abstract class CommanderComp implements Unitc{
void clearCommand(){
//reset controlled units
for(Unitc unit : controlling){
if(unit.controller().isBeingControlled(this)){
for(Unit unit : controlling){
if(unit.controller().isBeingControlled(base())){
unit.controller(unit.type().createController());
}
}

View File

@@ -8,7 +8,7 @@ import mindustry.gen.*;
import mindustry.graphics.*;
@EntityDef(value = {Decalc.class}, pooled = true, serialize = false)
@Component
@Component(base = true)
abstract class DecalComp implements Drawc, Timedc, Rotc, Posc{
@Import float x, y, rotation;

View File

@@ -5,9 +5,9 @@ import mindustry.annotations.Annotations.*;
import mindustry.entities.*;
import mindustry.gen.*;
@EntityDef(value = {Effectc.class, Childc.class}, pooled = true, serialize = false)
@Component
abstract class EffectComp implements Posc, Drawc, Timedc, Rotc, Childc{
@EntityDef(value = {EffectStatec.class, Childc.class}, pooled = true, serialize = false)
@Component(base = true)
abstract class EffectStateComp implements Posc, Drawc, Timedc, Rotc, Childc{
Color color = new Color(Color.white);
Effect effect;
Object data;

View File

@@ -36,7 +36,11 @@ abstract class EntityComp{
return false;
}
<T> T as(Class<T> type){
<T extends Entityc> T base(){
return (T)this;
}
<T> T as(){
return (T)this;
}

View File

@@ -14,7 +14,7 @@ import mindustry.world.*;
import static mindustry.Vars.*;
@EntityDef(value = {Firec.class}, pooled = true)
@Component
@Component(base = true)
abstract class FireComp implements Timedc, Posc, Firec{
private static final float spreadChance = 0.05f, fireballChance = 0.07f;
@@ -49,7 +49,7 @@ abstract class FireComp implements Timedc, Posc, Firec{
return;
}
Tilec entity = tile.entity;
Building entity = tile.entity;
boolean damage = entity != null;
float flammability = baseFlammability + puddleFlammability;
@@ -97,6 +97,6 @@ abstract class FireComp implements Timedc, Posc, Firec{
@Override
public void afterRead(){
Fires.register(this);
Fires.register(base());
}
}

View File

@@ -7,7 +7,7 @@ import mindustry.type.*;
@Component
abstract class ItemsComp implements Posc{
@ReadOnly ItemStack stack = new ItemStack();
ItemStack stack = new ItemStack();
transient float itemTime;
abstract int itemCapacity();

View File

@@ -35,7 +35,7 @@ abstract class MinerComp implements Itemsc, Posc, Teamc, Rotc, Drawc{
@Override
public void update(){
Tilec core = closestCore();
Building core = closestCore();
if(core != null && mineTile != null && mineTile.drop() != null && !acceptsItem(mineTile.drop()) && dst(core) < mineTransferRange){
int accepted = core.acceptStack(item(), stack().amount, this);

View File

@@ -25,13 +25,13 @@ abstract class PayloadComp implements Posc, Rotc{
payloads.add(load);
}
void pickup(Unitc unit){
void pickup(Unit unit){
unit.remove();
payloads.add(new UnitPayload(unit));
Fx.unitPickup.at(unit);
}
void pickup(Tilec tile){
void pickup(Building tile){
tile.tile().remove();
payloads.add(new BlockPayload(tile));
Fx.unitPickup.at(tile);
@@ -69,10 +69,10 @@ abstract class PayloadComp implements Posc, Rotc{
boolean dropUnit(UnitPayload payload){
//TODO create an effect here and/or make them be at a lower elevation
Unitc u = payload.unit;
Unit u = payload.unit;
//can't drop ground units
if((tileOn() == null || tileOn().solid()) && u.elevation() < 0.1f){
if((tileOn() == null || tileOn().solid()) && u.elevation < 0.1f){
return false;
}
@@ -87,11 +87,11 @@ abstract class PayloadComp implements Posc, Rotc{
/** @return whether the tile has been successfully placed. */
boolean dropBlock(BlockPayload payload){
Tilec tile = payload.entity;
Building tile = payload.entity;
int tx = Vars.world.toTile(x - tile.block().offset()), ty = Vars.world.toTile(y - tile.block().offset());
Tile on = Vars.world.tile(tx, ty);
if(on != null && Build.validPlace(tile.block(), tile.team(), tx, ty, tile.rotation())){
int rot = (int)((rotation() + 45f) / 90f) % 4;
int rot = (int)((rotation + 45f) / 90f) % 4;
payload.place(on, rot);
Fx.unitDrop.at(tile);

View File

@@ -31,7 +31,9 @@ import static mindustry.Vars.*;
abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Drawc{
static final float deathDelay = 30f;
@NonNull @ReadOnly Unitc unit = Nulls.unit;
@Import float x, y;
@NonNull @ReadOnly Unit unit = Nulls.unit;
transient @Nullable NetConnection con;
@ReadOnly Team team = Team.sharded;
@@ -53,7 +55,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
}
public @Nullable CoreEntity closestCore(){
return state.teams.closestCore(x(), y(), team);
return state.teams.closestCore(x, y, team);
}
public @Nullable CoreEntity core(){
@@ -106,7 +108,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
//update some basic state to sync things
if(unit.type().canBoost){
Tile tile = unit.tileOn();
unit.elevation(Mathf.approachDelta(unit.elevation(), (tile != null && tile.solid()) || boosting ? 1f : 0f, 0.08f));
unit.elevation(Mathf.approachDelta(unit.elevation, (tile != null && tile.solid()) || boosting ? 1f : 0f, 0.08f));
}
}else if(core != null){
//have a small delay before death to prevent the camera from jumping around too quickly
@@ -114,7 +116,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
deathTimer += Time.delta();
if(deathTimer >= deathDelay){
//request spawn - this happens serverside only
core.requestSpawn((Playerc)this);
core.requestSpawn(base());
deathTimer = 0;
}
}
@@ -132,7 +134,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
unit(Nulls.unit);
}
public Unitc unit(){
public Unit unit(){
return unit;
}
@@ -144,7 +146,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
return !(unit instanceof Builderc) ? Nulls.builder : (Builderc)unit;
}
public void unit(Unitc unit){
public void unit(Unit unit){
if(unit == null) throw new IllegalArgumentException("Unit cannot be null. Use clearUnit() instead.");
if(this.unit == unit) return;
if(this.unit != Nulls.unit){
@@ -157,7 +159,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
unit.controller(this);
}
Events.fire(new UnitChangeEvent((Playerc)this, unit));
Events.fire(new UnitChangeEvent(base(), unit));
}
boolean dead(){
@@ -201,17 +203,17 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
if(!isLocal()){
Draw.color(0f, 0f, 0f, 0.3f);
Fill.rect(unit.x(), unit.y() + nameHeight - layout.height / 2, layout.width + 2, layout.height + 3);
Fill.rect(unit.x, unit.y + nameHeight - layout.height / 2, layout.width + 2, layout.height + 3);
Draw.color();
font.setColor(color);
font.draw(name, unit.x(), unit.y() + nameHeight, 0, Align.center, false);
font.draw(name, unit.x, unit.y + nameHeight, 0, Align.center, false);
if(admin){
float s = 3f;
Draw.color(color.r * 0.5f, color.g * 0.5f, color.b * 0.5f, 1f);
Draw.rect(Icon.adminSmall.getRegion(), unit.x() + layout.width / 2f + 2 + 1, unit.y() + nameHeight - 1.5f, s, s);
Draw.rect(Icon.adminSmall.getRegion(), unit.x + layout.width / 2f + 2 + 1, unit.y + nameHeight - 1.5f, s, s);
Draw.color(color);
Draw.rect(Icon.adminSmall.getRegion(), unit.x() + layout.width / 2f + 2 + 1, unit.y() + nameHeight - 1f, s, s);
Draw.rect(Icon.adminSmall.getRegion(), unit.x + layout.width / 2f + 2 + 1, unit.y + nameHeight - 1f, s, s);
}
}
@@ -224,8 +226,8 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
layout.setText(font, text, Color.white, width, Align.bottom, true);
Draw.color(0f, 0f, 0f, 0.3f * (textFadeTime <= 0 || lastText == null ? 1f : visualFadeTime));
Fill.rect(unit.x(), unit.y() + textHeight + layout.height - layout.height/2f, layout.width + 2, layout.height + 3);
font.draw(text, unit.x() - width/2f, unit.y() + textHeight + layout.height, width, Align.center, true);
Fill.rect(unit.x, unit.y + textHeight + layout.height - layout.height/2f, layout.width + 2, layout.height + 3);
font.draw(text, unit.x - width/2f, unit.y + textHeight + layout.height, width, Align.center, true);
}
Draw.reset();
@@ -247,11 +249,11 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
}
}
void sendMessage(String text, Playerc from){
void sendMessage(String text, Player from){
sendMessage(text, from, NetClient.colorizeName(from.id(), from.name()));
}
void sendMessage(String text, Playerc from, String fromName){
void sendMessage(String text, Player from, String fromName){
if(isLocal()){
if(ui != null){
ui.chatfrag.addMessage(text, fromName);

View File

@@ -18,7 +18,7 @@ import static mindustry.Vars.*;
import static mindustry.entities.Puddles.*;
@EntityDef(value = {Puddlec.class}, pooled = true)
@Component
@Component(base = true)
abstract class PuddleComp implements Posc, Puddlec, Drawc{
private static final int maxGeneration = 2;
private static final Color tmp = new Color();
@@ -128,6 +128,6 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{
@Override
public void afterRead(){
Puddles.register(this);
Puddles.register(base());
}
}

View File

@@ -13,7 +13,7 @@ import mindustry.gen.*;
import mindustry.type.*;
import mindustry.world.blocks.environment.*;
import static mindustry.Vars.content;
import static mindustry.Vars.*;
@Component
abstract class StatusComp implements Posc, Flyingc{
@@ -46,7 +46,7 @@ abstract class StatusComp implements Posc, Flyingc{
return;
}else if(entry.effect.reactsWith(effect)){ //find opposite
StatusEntry.tmp.effect = entry.effect;
entry.effect.getTransition((Unitc)this, effect, entry.time, duration, StatusEntry.tmp);
entry.effect.getTransition(base(), effect, entry.time, duration, StatusEntry.tmp);
entry.time = StatusEntry.tmp.time;
if(StatusEntry.tmp.effect != entry.effect){
@@ -128,15 +128,14 @@ abstract class StatusComp implements Posc, Flyingc{
speedMultiplier *= entry.effect.speedMultiplier;
armorMultiplier *= entry.effect.armorMultiplier;
damageMultiplier *= entry.effect.damageMultiplier;
//TODO ugly casting
entry.effect.update((Unitc)this, entry.time);
entry.effect.update(base(), entry.time);
}
}
}
public void draw(){
for(StatusEntry e : statuses){
e.effect.draw((Unitc)this);
e.effect.draw(base());
}
}

View File

@@ -17,15 +17,15 @@ abstract class TeamComp implements Posc{
return team.rules().cheat;
}
public @Nullable Tilec core(){
public @Nullable Building core(){
return team.core();
}
public @Nullable Tilec closestCore(){
public @Nullable Building closestCore(){
return state.teams.closestCore(x, y, team);
}
public @Nullable Tilec closestEnemyCore(){
public @Nullable Building closestEnemyCore(){
return state.teams.closestEnemyCore(x, y, team);
}
}

View File

@@ -11,6 +11,7 @@ import mindustry.content.*;
import mindustry.entities.*;
import mindustry.entities.units.*;
import mindustry.game.EventType.*;
import mindustry.game.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.type.*;
@@ -25,6 +26,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
@Import float x, y, rotation, elevation, maxHealth, drag, armor, hitSize, health;
@Import boolean dead;
@Import Team team;
private UnitController controller;
private UnitType type;
@@ -60,13 +62,13 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
@Override
public float bounds(){
return hitSize() * 2f;
return hitSize * 2f;
}
@Override
public void controller(UnitController next){
this.controller = next;
if(controller.unit() != this) controller.unit(this);
if(controller.unit() != base()) controller.unit(base());
}
@Override
@@ -128,7 +130,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
public void afterSync(){
//set up type info after reading
setStats(this.type);
controller.unit(this);
controller.unit(base());
}
@Override
@@ -140,13 +142,13 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
@Override
public void add(){
teamIndex.updateCount(team(), 1);
teamIndex.updateCount(team, 1);
}
@Override
public void remove(){
teamIndex.updateCount(team(), -1);
controller.removed(this);
teamIndex.updateCount(team, -1);
controller.removed(base());
}
@Override
@@ -155,17 +157,17 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
Effects.shake(type.landShake, type.landShake, this);
}
type.landed(this);
type.landed(base());
}
@Override
public void update(){
type.update(this);
type.update(base());
drag(type.drag * (isGrounded() ? (floorOn().dragMultiplier) : 1f));
//apply knockback based on spawns
if(team() != state.rules.waveTeam){
if(team != state.rules.waveTeam){
float relativeSize = state.rules.dropZoneRadius + bounds()/2f + 1f;
for(Tile spawn : spawner.getSpawns()){
if(within(spawn.worldx(), spawn.worldy(), relativeSize)){
@@ -180,7 +182,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
if(tile != null && isGrounded()){
//unit block update
if(tile.entity != null){
tile.entity.unitOn(this);
tile.entity.unitOn(base());
}
//kill when stuck in wall
@@ -208,7 +210,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
@Override
public void display(Table table){
type.display(this, table);
type.display(base(), table);
}
@Override
@@ -218,17 +220,17 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
@Override
public void draw(){
type.draw(this);
type.draw(base());
}
@Override
public boolean isPlayer(){
return controller instanceof Playerc;
return controller instanceof Player;
}
@Nullable
public Playerc getPlayer(){
return isPlayer() ? (Playerc)controller : null;
public Player getPlayer(){
return isPlayer() ? (Player)controller : null;
}
@Override
@@ -240,12 +242,12 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
float flammability = item().flammability * stack().amount;
Damage.dynamicExplosion(x, y, flammability, explosiveness, 0f, bounds() / 2f, Pal.darkFlame);
Effects.scorch(x, y, (int)(hitSize() / 5));
Effects.scorch(x, y, (int)(hitSize / 5));
Fx.explosion.at(this);
Effects.shake(2f, 2f, this);
type.deathSound.at(this);
Events.fire(new UnitDestroyEvent(this));
Events.fire(new UnitDestroyEvent(base()));
if(explosiveness > 7f && isLocal()){
Events.fire(Trigger.suicideBomb);
@@ -260,7 +262,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
if(dead || net.client()) return;
//deaths are synced; this calls killed()
Call.onUnitDeath(this);
Call.onUnitDeath(base());
}
@Override

View File

@@ -14,7 +14,7 @@ public class AIController implements UnitController{
protected static final Vec2 vec = new Vec2();
protected static final int timerTarget = 0;
protected Unitc unit;
protected Unit unit;
protected Teamc target;
protected Interval timer = new Interval(4);
@@ -23,12 +23,12 @@ public class AIController implements UnitController{
}
protected void targetClosestAllyFlag(BlockFlag flag){
Tile target = Geometry.findClosest(unit.x(), unit.y(), indexer.getAllied(unit.team(), flag));
Tile target = Geometry.findClosest(unit.x, unit.y, indexer.getAllied(unit.team, flag));
if(target != null) this.target = target.entity;
}
protected void targetClosestEnemyFlag(BlockFlag flag){
Tile target = Geometry.findClosest(unit.x(), unit.y(), indexer.getEnemy(unit.team(), flag));
Tile target = Geometry.findClosest(unit.x, unit.y, indexer.getEnemy(unit.team, flag));
if(target != null) this.target = target.entity;
}
@@ -37,7 +37,7 @@ public class AIController implements UnitController{
}
protected void targetClosest(){
Teamc newTarget = Units.closestTarget(unit.team(), unit.x(), unit.y(), Math.max(unit.range(), unit.type().range), u -> (unit.type().targetAir && u.isFlying()) || (unit.type().targetGround && !u.isFlying()));
Teamc newTarget = Units.closestTarget(unit.team, unit.x, unit.y, Math.max(unit.range(), unit.type().range), u -> (unit.type().targetAir && u.isFlying()) || (unit.type().targetGround && !u.isFlying()));
if(newTarget != null){
target = newTarget;
}
@@ -48,7 +48,7 @@ public class AIController implements UnitController{
}
@Override
public void unit(Unitc unit){
public void unit(Unit unit){
if(this.unit == unit) return;
this.unit = unit;
@@ -56,7 +56,7 @@ public class AIController implements UnitController{
}
@Override
public Unitc unit(){
public Unit unit(){
return unit;
}
}

View File

@@ -3,8 +3,8 @@ package mindustry.entities.units;
import mindustry.gen.*;
public interface UnitController{
void unit(Unitc unit);
Unitc unit();
void unit(Unit unit);
Unit unit();
default void command(UnitCommand command){
@@ -14,11 +14,11 @@ public interface UnitController{
}
default void removed(Unitc unit){
default void removed(Unit unit){
}
default boolean isBeingControlled(Unitc player){
default boolean isBeingControlled(Unit player){
return false;
}
}

View File

@@ -69,20 +69,20 @@ public class EventType{
public static class CommandIssueEvent{
public final Tilec tile;
public final Building tile;
public final UnitCommand command;
public CommandIssueEvent(Tilec tile, UnitCommand command){
public CommandIssueEvent(Building tile, UnitCommand command){
this.tile = tile;
this.command = command;
}
}
public static class PlayerChatEvent{
public final Playerc player;
public final Player player;
public final String message;
public PlayerChatEvent(Playerc player, String message){
public PlayerChatEvent(Player player, String message){
this.player = player;
this.message = message;
}
@@ -120,12 +120,12 @@ public class EventType{
/** Called when the player withdraws items from a block. */
public static class WithdrawEvent{
public final Tilec tile;
public final Playerc player;
public final Building tile;
public final Player player;
public final Item item;
public final int amount;
public WithdrawEvent(Tilec tile, Playerc player, Item item, int amount){
public WithdrawEvent(Building tile, Player player, Item item, int amount){
this.tile = tile;
this.player = player;
this.item = item;
@@ -135,12 +135,12 @@ public class EventType{
/** Called when a player deposits items to a block.*/
public static class DepositEvent{
public final Tilec tile;
public final Playerc player;
public final Building tile;
public final Player player;
public final Item item;
public final int amount;
public DepositEvent(Tilec tile, Playerc player, Item item, int amount){
public DepositEvent(Building tile, Player player, Item item, int amount){
this.tile = tile;
this.player = player;
this.item = item;
@@ -150,10 +150,10 @@ public class EventType{
/** Called when the player taps a block. */
public static class TapEvent{
public final Tilec tile;
public final Playerc player;
public final Building tile;
public final Player player;
public TapEvent(Tilec tile, Playerc player){
public TapEvent(Building tile, Player player){
this.tile = tile;
this.player = player;
}
@@ -161,11 +161,11 @@ public class EventType{
/** Called when the player sets a specific block. */
public static class TapConfigEvent{
public final Tilec tile;
public final Playerc player;
public final Building tile;
public final Player player;
public final Object value;
public TapConfigEvent(Tilec tile, Playerc player, Object value){
public TapConfigEvent(Building tile, Player player, Object value){
this.tile = tile;
this.player = player;
this.value = value;
@@ -181,10 +181,10 @@ public class EventType{
}
/** Called from the logic thread. Do not access graphics here! */
public static class TileChangeEvent{
public static class BuildinghangeEvent{
public final Tile tile;
public TileChangeEvent(Tile tile){
public BuildinghangeEvent(Tile tile){
this.tile = tile;
}
}
@@ -233,10 +233,10 @@ public class EventType{
public static class BlockBuildEndEvent{
public final Tile tile;
public final Team team;
public final @Nullable Unitc unit;
public final @Nullable Unit unit;
public final boolean breaking;
public BlockBuildEndEvent(Tile tile, @Nullable Unitc unit, Team team, boolean breaking){
public BlockBuildEndEvent(Tile tile, @Nullable Unit unit, Team team, boolean breaking){
this.tile = tile;
this.team = team;
this.unit = unit;
@@ -273,26 +273,26 @@ public class EventType{
}
public static class UnitDestroyEvent{
public final Unitc unit;
public final Unit unit;
public UnitDestroyEvent(Unitc unit){
public UnitDestroyEvent(Unit unit){
this.unit = unit;
}
}
public static class UnitCreateEvent{
public final Unitc unit;
public final Unit unit;
public UnitCreateEvent(Unitc unit){
public UnitCreateEvent(Unit unit){
this.unit = unit;
}
}
public static class UnitChangeEvent{
public final Playerc player;
public final Unitc unit;
public final Player player;
public final Unit unit;
public UnitChangeEvent(Playerc player, Unitc unit){
public UnitChangeEvent(Player player, Unit unit){
this.player = player;
this.unit = unit;
}
@@ -300,42 +300,42 @@ public class EventType{
/** Called after connecting; when a player recieves world data and is ready to play.*/
public static class PlayerJoin{
public final Playerc player;
public final Player player;
public PlayerJoin(Playerc player){
public PlayerJoin(Player player){
this.player = player;
}
}
/** Called when a player connects, but has not joined the game yet.*/
public static class PlayerConnect{
public final Playerc player;
public final Player player;
public PlayerConnect(Playerc player){
public PlayerConnect(Player player){
this.player = player;
}
}
public static class PlayerLeave{
public final Playerc player;
public final Player player;
public PlayerLeave(Playerc player){
public PlayerLeave(Player player){
this.player = player;
}
}
public static class PlayerBanEvent{
public final Playerc player;
public final Player player;
public PlayerBanEvent(Playerc player){
public PlayerBanEvent(Player player){
this.player = player;
}
}
public static class PlayerUnbanEvent{
public final Playerc player;
public final Player player;
public PlayerUnbanEvent(Playerc player){
public PlayerUnbanEvent(Player player){
this.player = player;
}
}

View File

@@ -318,7 +318,7 @@ public class Schematics implements Loadable{
boolean found = false;
for(int cx = x; cx <= x2; cx++){
for(int cy = y; cy <= y2; cy++){
Tilec linked = world.ent(cx, cy);
Building linked = world.ent(cx, cy);
if(linked != null &&linked.block().isVisible() && !(linked.block() instanceof BuildBlock)){
int top = linked.block().size/2;
@@ -346,7 +346,7 @@ public class Schematics implements Loadable{
IntSet counted = new IntSet();
for(int cx = ox; cx <= ox2; cx++){
for(int cy = oy; cy <= oy2; cy++){
Tilec tile = world.ent(cx, cy);
Building tile = world.ent(cx, cy);
if(tile != null && !counted.contains(tile.pos()) && !(tile.block() instanceof BuildBlock)
&& (tile.block().isVisible() || (tile.block() instanceof CoreBlock && Core.settings.getBool("coreselect")))){

View File

@@ -60,8 +60,8 @@ public class SpawnGroup implements Serializable{
* Creates a unit, and assigns correct values based on this group's data.
* This method does not add() the unit.
*/
public Unitc createUnit(Team team, int wave){
Unitc unit = type.create(team);
public Unit createUnit(Team team, int wave){
Unit unit = type.create(team);
if(effect != null){
unit.apply(effect, 999999f);

View File

@@ -55,10 +55,10 @@ public class Teams{
return false;
}
public void eachEnemyCore(Team team, Cons<Tilec> ret){
public void eachEnemyCore(Team team, Cons<Building> ret){
for(TeamData data : active){
if(areEnemies(team, data.team)){
for(Tilec tile : data.cores){
for(Building tile : data.cores){
ret.get(tile);
}
}

View File

@@ -239,7 +239,7 @@ public class Tutorial{
//utility
static void placeBlocks(){
Tilec core = state.teams.playerCores().first();
Building core = state.teams.playerCores().first();
for(int i = 0; i < blocksToBreak; i++){
world.tile(core.tile().x + blockOffset, core.tile().y + i).remove();
world.tile(core.tile().x + blockOffset, core.tile().y + i).setBlock(Blocks.scrapWall, state.rules.defaultTeam);
@@ -247,7 +247,7 @@ public class Tutorial{
}
static boolean blocksBroken(){
Tilec core = state.teams.playerCores().first();
Building core = state.teams.playerCores().first();
for(int i = 0; i < blocksToBreak; i++){
if(world.tile(core.tile().x + blockOffset, core.tile().y + i).block() == Blocks.scrapWall){

View File

@@ -33,7 +33,7 @@ public class BlockRenderer implements Disposable{
private float brokenFade = 0f;
private FrameBuffer shadows = new FrameBuffer();
private FrameBuffer dark = new FrameBuffer();
private Seq<Tilec> outArray2 = new Seq<>();
private Seq<Building> outArray2 = new Seq<>();
private Seq<Tile> shadowEvents = new Seq<>();
private IntSet processedEntities = new IntSet();
private boolean displayStatus = false;
@@ -82,7 +82,7 @@ public class BlockRenderer implements Disposable{
dark.end();
});
Events.on(TileChangeEvent.class, event -> {
Events.on(BuildinghangeEvent.class, event -> {
shadowEvents.add(event.tile);
int avgx = (int)(camera.position.x / tilesize);
@@ -205,8 +205,8 @@ public class BlockRenderer implements Disposable{
lightview.add(tile);
}
if(tile.entity != null && tile.entity.power() != null && tile.entity.power().links.size > 0){
for(Tilec other : tile.entity.getPowerConnections(outArray2)){
if(tile.entity != null && tile.entity.power != null && tile.entity.power.links.size > 0){
for(Building other : tile.entity.getPowerConnections(outArray2)){
if(other.block() instanceof PowerNode){ //TODO need a generic way to render connections!
tileview.add(other.tile());
}
@@ -229,7 +229,7 @@ public class BlockRenderer implements Disposable{
for(int i = 0; i < tileview.size; i++){
Tile tile = tileview.items[i];
Block block = tile.block();
Tilec entity = tile.entity;
Building entity = tile.entity;
Draw.z(Layer.block);
@@ -260,7 +260,7 @@ public class BlockRenderer implements Disposable{
//draw lights
for(int i = 0; i < lightview.size; i++){
Tile tile = lightview.items[i];
Tilec entity = tile.entity;
Building entity = tile.entity;
if(entity != null){
entity.drawLight();

View File

@@ -73,7 +73,7 @@ public class Drawf{
return team == Team.derelict || team == Vars.player.team() || state.rules.enemyLights;
}
public static void selected(Tilec tile, Color color){
public static void selected(Building tile, Color color){
selected(tile.tile(), color);
}
@@ -188,11 +188,11 @@ public class Drawf{
Draw.rect(Core.atlas.find("shape-3"), x, y - oy + length / 2f, width, length, width / 2f, oy, rotation - 90);
}
public static void construct(Tilec t, UnlockableContent content, float rotation, float progress, float speed, float time){
public static void construct(Building t, UnlockableContent content, float rotation, float progress, float speed, float time){
construct(t, content.icon(Cicon.full), rotation, progress, speed, time);
}
public static void construct(Tilec t, TextureRegion region, float rotation, float progress, float speed, float time){
public static void construct(Building t, TextureRegion region, float rotation, float progress, float speed, float time){
Shaders.build.region = region;
Shaders.build.progress = progress;
Shaders.build.color.set(Pal.accent);

View File

@@ -22,7 +22,7 @@ import static mindustry.Vars.*;
public class MinimapRenderer implements Disposable{
private static final float baseSize = 16f;
private final Seq<Unitc> units = new Seq<>();
private final Seq<Unit> units = new Seq<>();
private Pixmap pixmap;
private Texture texture;
private TextureRegion region;
@@ -36,7 +36,7 @@ public class MinimapRenderer implements Disposable{
});
//make sure to call on the graphics thread
Events.on(TileChangeEvent.class, event -> Core.app.post(() -> update(event.tile)));
Events.on(BuildinghangeEvent.class, event -> Core.app.post(() -> update(event.tile)));
}
public Pixmap getPixmap(){
@@ -87,7 +87,7 @@ public class MinimapRenderer implements Disposable{
rect.set((dx - sz) * tilesize, (dy - sz) * tilesize, sz * 2 * tilesize, sz * 2 * tilesize);
for(Unitc unit : units){
for(Unit unit : units){
float rx = !withLabels ? (unit.x() - rect.x) / rect.width * w : unit.x() / (world.width() * tilesize) * w;
float ry = !withLabels ? (unit.y() - rect.y) / rect.width * h : unit.y() / (world.height() * tilesize) * h;
@@ -97,9 +97,9 @@ public class MinimapRenderer implements Disposable{
Draw.reset();
//only disable player names in multiplayer
if(withLabels && unit instanceof Playerc && net.active()){
Playerc pl = (Playerc)unit;
drawLabel(x + rx, y + ry, pl.name(), unit.team().color);
if(withLabels && unit.isPlayer() && net.active()){
Player pl = unit.getPlayer();
drawLabel(x + rx, y + ry, pl.name, unit.team().color);
}
}

View File

@@ -19,7 +19,7 @@ public class OverlayRenderer{
private static final float spawnerMargin = tilesize*11f;
private static final Rect rect = new Rect();
private float buildFade, unitFade;
private Unitc lastSelect;
private Unit lastSelect;
public void drawBottom(){
InputHandler input = control.input;
@@ -36,7 +36,7 @@ public class OverlayRenderer{
public void drawTop(){
if(Core.settings.getBool("playerindicators")){
for(Playerc player : Groups.player){
for(Player player : Groups.player){
if(Vars.player != player && Vars.player.team() == player.team()){
if(!rect.setSize(Core.camera.width * 0.9f, Core.camera.height * 0.9f)
.setCenter(Core.camera.position.x, Core.camera.position.y).contains(player.x(), player.y())){
@@ -67,7 +67,7 @@ public class OverlayRenderer{
InputHandler input = control.input;
Unitc select = input.selectedUnit();
Unit select = input.selectedUnit();
if(!Core.input.keyDown(Binding.control)) select = null;
unitFade = Mathf.lerpDelta(unitFade, Mathf.num(select != null), 0.1f);
@@ -79,19 +79,19 @@ public class OverlayRenderer{
if(select instanceof BlockUnitc){
//special selection for block "units"
Fill.square(select.x(), select.y(), ((BlockUnitc)select).tile().block().size * tilesize/2f);
Fill.square(select.x, select.y, ((BlockUnitc)select).tile().block().size * tilesize/2f);
}else{
Draw.rect(select.type().icon(Cicon.full), select.x(), select.y(), select.rotation() - 90);
}
Lines.stroke(unitFade);
Lines.square(select.x(), select.y(), select.hitSize() * 1.5f, Time.time() * 2f);
Lines.square(select.x, select.y, select.hitSize() * 1.5f, Time.time() * 2f);
Draw.reset();
}
//draw config selected block
if(input.frag.config.isShown()){
Tilec tile = input.frag.config.getSelectedTile();
Building tile = input.frag.config.getSelectedTile();
tile.drawConfigure();
}
@@ -129,7 +129,7 @@ public class OverlayRenderer{
//draw selected block
if(input.block == null && !Core.scene.hasMouse()){
Vec2 vec = Core.input.mouseWorld(input.getMouseX(), input.getMouseY());
Tilec tile = world.entWorld(vec.x, vec.y);
Building tile = world.entWorld(vec.x, vec.y);
if(tile != null && tile.team() == player.team()){
tile.drawSelect();
@@ -152,7 +152,7 @@ public class OverlayRenderer{
Lines.circle(v.x, v.y, 6 + Mathf.absin(Time.time(), 5f, 1f));
Draw.reset();
Tilec tile = world.entWorld(v.x, v.y);
Building tile = world.entWorld(v.x, v.y);
if(tile != null && tile.interactable(player.team()) && tile.acceptStack(player.unit().item(), player.unit().stack().amount, player.unit()) > 0){
Lines.stroke(3f, Pal.gray);
Lines.square(tile.x(), tile.y(), tile.block().size * tilesize / 2f + 3 + Mathf.absin(Time.time(), 5f, 1f));

View File

@@ -30,7 +30,7 @@ public class PlanetGrid{
PlanetGrid(int size){
this.size = size;
tiles = new Ptile[tileCount(size)];
tiles = new Ptile[Buildingount(size)];
for(int i = 0; i < tiles.length; i++){
tiles[i] = new Ptile(i, i < 12 ? 5 : 6);
}
@@ -207,7 +207,7 @@ public class PlanetGrid{
return -1;
}
static int tileCount(int size){
static int Buildingount(int size){
return 10 * Mathf.pow(3, size) + 2;
}

View File

@@ -199,7 +199,7 @@ public class DesktopInput extends InputHandler{
if(!scene.hasMouse()){
if(Core.input.keyDown(Binding.control) && Core.input.keyTap(Binding.select)){
Unitc on = selectedUnit();
Unit on = selectedUnit();
if(on != null){
Call.onUnitControl(player, on);
shouldShoot = false;
@@ -546,7 +546,7 @@ public class DesktopInput extends InputHandler{
}
}
protected void updateMovement(Unitc unit){
protected void updateMovement(Unit unit){
boolean omni = !(unit instanceof WaterMovec);
boolean legs = unit.isGrounded();
@@ -588,12 +588,12 @@ public class DesktopInput extends InputHandler{
Payloadc pay = (Payloadc)unit;
if(Core.input.keyTap(Binding.pickupCargo) && pay.payloads().size < unit.type().payloadCapacity){
Unitc target = Units.closest(player.team(), pay.x(), pay.y(), 30f, u -> u.isAI() && u.isGrounded());
Unit target = Units.closest(player.team(), pay.x(), pay.y(), 30f, u -> u.isAI() && u.isGrounded());
if(target != null){
pay.pickup(target);
}else if(!pay.hasPayload()){
Tilec tile = world.entWorld(pay.x(), pay.y());
if(tile != null && tile.team() == unit.team() && tile.block().synthetic()){
Building tile = world.entWorld(pay.x(), pay.y());
if(tile != null && tile.team() == unit.team && tile.block().synthetic()){
//pick up block directly
if(tile.block().buildVisibility != BuildVisibility.hidden && tile.block().size <= 2){
pay.pickup(tile);

View File

@@ -47,7 +47,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
final static int maxLength = 100;
final static Vec2 stackTrns = new Vec2();
final static Rect r1 = new Rect(), r2 = new Rect();
final static Seq<Unitc> units = new Seq<>();
final static Seq<Unit> units = new Seq<>();
/** Distance on the back from where items originate. */
final static float backTrns = 3f;
@@ -85,11 +85,11 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
@Remote(called = Loc.server, unreliable = true)
public static void transferItemTo(Item item, int amount, float x, float y, Tile tile){
if(tile == null || tile.entity == null || tile.entity.items() == null) return;
if(tile == null || tile.entity == null || tile.entity.items == null) return;
for(int i = 0; i < Mathf.clamp(amount / 3, 1, 8); i++){
Time.run(i * 3, () -> createItemTransfer(item, amount, x, y, tile, () -> {}));
}
tile.entity.items().add(item, amount);
tile.entity.items.add(item, amount);
}
public static void createItemTransfer(Item item, int amount, float x, float y, Position to, Runnable done){
@@ -105,7 +105,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
@Remote(targets = Loc.client, called = Loc.server)
public static void dropItem(Playerc player, float angle){
public static void dropItem(Player player, float angle){
if(net.server() && player.unit().stack().amount <= 0){
throw new ValidateException(player, "Player cannot drop an item.");
}
@@ -115,7 +115,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
@Remote(targets = Loc.both, called = Loc.server, forward = true, unreliable = true)
public static void rotateBlock(Playerc player, Tilec tile, boolean direction){
public static void rotateBlock(Player player, Building tile, boolean direction){
if(net.server() && (!Units.canInteract(player, tile) ||
!netServer.admins.allowAction(player, ActionType.rotate, tile.tile(), action -> action.rotation = Mathf.mod(tile.rotation() + Mathf.sign(direction), 4)))){
throw new ValidateException(player, "Player cannot rotate a block.");
@@ -127,7 +127,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
@Remote(targets = Loc.both, forward = true, called = Loc.server)
public static void transferInventory(Playerc player, Tilec tile){
public static void transferInventory(Player player, Building tile){
if(player == null || tile == null) return;
if(net.server() && (player.unit().stack().amount <= 0 || !Units.canInteract(player, tile) ||
!netServer.admins.allowAction(player, ActionType.depositItem, tile.tile(), action -> {
@@ -149,14 +149,14 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
createItemTransfer(
item,
amount,
player.x() + Angles.trnsx(player.unit().rotation() + 180f, backTrns), player.y() + Angles.trnsy(player.unit().rotation() + 180f, backTrns),
player.x() + Angles.trnsx(player.unit().rotation + 180f, backTrns), player.y() + Angles.trnsy(player.unit().rotation + 180f, backTrns),
new Vec2(tile.x() + stackTrns.x, tile.y() + stackTrns.y),
() -> tile.handleStack(item, accepted, player.unit())
);
}
@Remote(targets = Loc.both, called = Loc.server, forward = true)
public static void onTileTapped(Playerc player, Tilec tile){
public static void onTileTapped(Player player, Building tile){
if(tile == null || player == null) return;
if(net.server() && (!Units.canInteract(player, tile) ||
!netServer.admins.allowAction(player, ActionType.tapTile, tile.tile(), action -> {}))) throw new ValidateException(player, "Player cannot tap a tile.");
@@ -165,7 +165,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
@Remote(targets = Loc.both, called = Loc.both, forward = true)
public static void onTileConfig(Playerc player, Tilec tile, @Nullable Object value){
public static void onTileConfig(Player player, Building tile, @Nullable Object value){
if(tile == null) return;
if(net.server() && (!Units.canInteract(player, tile) ||
!netServer.admins.allowAction(player, ActionType.configure, tile.tile(), action -> action.config = value))) throw new ValidateException(player, "Player cannot configure a tile.");
@@ -174,7 +174,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
@Remote(targets = Loc.both, called = Loc.server, forward = true)
public static void onUnitControl(Playerc player, @Nullable Unitc unit){
public static void onUnitControl(Player player, @Nullable Unit unit){
//clear player unit when they possess a core
if((unit instanceof BlockUnitc && ((BlockUnitc)unit).tile() instanceof CoreEntity)){
Fx.spawn.at(player);
@@ -183,9 +183,9 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}else if(unit == null){ //just clear the unit (is this used?)
player.clearUnit();
//make sure it's AI controlled, so players can't overwrite each other
}else if(unit.isAI() && unit.team() == player.team()){
}else if(unit.isAI() && unit.team == player.team()){
player.unit(unit);
Time.run(Fx.unitSpirit.lifetime, () -> Fx.unitControl.at(unit.x(), unit.y(), 0f, unit));
Time.run(Fx.unitSpirit.lifetime, () -> Fx.unitControl.at(unit.x, unit.y, 0f, unit));
if(!player.dead()){
Fx.unitSpirit.at(player.x(), player.y(), 0f, unit);
}
@@ -193,9 +193,9 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
@Remote(targets = Loc.both, called = Loc.server, forward = true)
public static void onUnitClear(Playerc player){
public static void onUnitClear(Player player){
//no free core teleports?
if(!player.dead() && player.unit().spawnedByCore()) return;
if(!player.dead() && player.unit().spawnedByCore) return;
Fx.spawn.at(player);
player.clearUnit();
@@ -203,7 +203,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
@Remote(targets = Loc.both, called = Loc.server, forward = true)
public static void onUnitCommand(Playerc player){
public static void onUnitCommand(Player player){
if(player.dead() || !(player.unit() instanceof Commanderc)) return;
Commanderc commander = (Commanderc)player.unit();
@@ -212,7 +212,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
commander.clearCommand();
}else{
FormationPattern pattern = new SquareFormation();
Formation formation = new Formation(new Vec3(player.x(), player.y(), player.unit().rotation()), pattern);
Formation formation = new Formation(new Vec3(player.x(), player.y(), player.unit().rotation), pattern);
formation.slotAssignmentStrategy = new DistanceAssignmentStrategy(pattern);
units.clear();
@@ -260,7 +260,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
if(controlledType != null && player.dead()){
Unitc unit = Units.closest(player.team(), player.x(), player.y(), u -> !u.isPlayer() && u.type() == controlledType);
Unit unit = Units.closest(player.team(), player.x(), player.y(), u -> !u.isPlayer() && u.type() == controlledType);
if(unit != null){
Call.onUnitControl(player, unit);
@@ -270,7 +270,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
public void checkUnit(){
if(controlledType != null){
Unitc unit = Units.closest(player.team(), player.x(), player.y(), u -> !u.isPlayer() && u.type() == controlledType);
Unit unit = Units.closest(player.team(), player.x(), player.y(), u -> !u.isPlayer() && u.type() == controlledType);
if(unit == null && controlledType == UnitTypes.block){
unit = world.entWorld(player.x(), player.y()) instanceof ControlBlock ? ((ControlBlock)world.entWorld(player.x(), player.y())).unit() : null;
}
@@ -481,7 +481,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
for(int x = dresult.x; x <= dresult.x2; x++){
for(int y = dresult.y; y <= dresult.y2; y++){
Tile tile = world.tilec(x, y);
Tile tile = world.Building(x, y);
if(tile == null || !validBreak(tile.x, tile.y)) continue;
drawBreaking(tile.x, tile.y);
@@ -597,7 +597,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
int wx = x1 + x * Mathf.sign(x2 - x1);
int wy = y1 + y * Mathf.sign(y2 - y1);
Tile tile = world.tilec(wx, wy);
Tile tile = world.Building(wx, wy);
if(tile == null) continue;
@@ -663,7 +663,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
/** Handles tile tap events that are not platform specific. */
boolean tileTapped(@Nullable Tilec tile){
boolean tileTapped(@Nullable Building tile){
if(tile == null){
frag.inv.hide();
frag.config.hideConfig();
@@ -702,7 +702,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
if(tile.interactable(player.team()) && tile.block().consumesTap){
consumed = true;
}else if(tile.interactable(player.team()) && tile.block().synthetic() && !consumed){
if(tile.block().hasItems && tile.items().total() > 0){
if(tile.block().hasItems && tile.items.total() > 0){
frag.inv.showFor(tile);
consumed = true;
showedInventory = true;
@@ -747,7 +747,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
&& tile.block() == Blocks.air && player.dst(tile.worldx(), tile.worldy()) <= miningRange;
}
Tilec entAt(float x, float y){
Building entAt(float x, float y){
return world.ent(tileX(x), tileY(y));
}
@@ -796,8 +796,8 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
return Core.input.mouseWorld(getMouseX(), getMouseY()).sub(x, y).angle();
}
public @Nullable Unitc selectedUnit(){
Unitc unit = Units.closest(player.team(), Core.input.mouseWorld().x, Core.input.mouseWorld().y, 40f, Unitc::isAI);
public @Nullable Unit selectedUnit(){
Unit unit = Units.closest(player.team(), Core.input.mouseWorld().x, Core.input.mouseWorld().y, 40f, Unit::isAI);
if(unit != null){
unit.hitbox(Tmp.r1);
Tmp.r1.grow(6f);
@@ -806,7 +806,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
}
Tilec tile = world.entWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y);
Building tile = world.entWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y);
if(tile instanceof ControlBlock && tile.team() == player.team()){
return ((ControlBlock)tile).unit();
}
@@ -865,7 +865,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
return droppingItem;
}
public void tryDropItems(@Nullable Tilec tile, float x, float y){
public void tryDropItems(@Nullable Building tile, float x, float y){
if(!droppingItem || player.unit().stack().amount <= 0 || canTapPlayer(x, y) || state.isPaused() ){
droppingItem = false;
return;
@@ -1106,7 +1106,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
protected void updateTouch(){
if(Units.invalidateTarget(target, this) &&
!(target instanceof Tilec && ((Tilec)target).damaged() && target.isValid() && target.team() == team && mech.canHeal && dst(target) < mech.range && !(((Tilec)target).block instanceof BuildBlock))){
!(target instanceof Building && ((Building)target).damaged() && target.isValid() && target.team() == team && mech.canHeal && dst(target) < mech.range && !(((Building)target).block instanceof BuildBlock))){
target = null;
}
@@ -1121,7 +1121,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
if(moveTarget != null && !moveTarget.dead()){
targetX = moveTarget.getX();
targetY = moveTarget.getY();
boolean tapping = moveTarget instanceof Tilec && moveTarget.team() == team;
boolean tapping = moveTarget instanceof Building && moveTarget.team() == team;
attractDst = 0f;
if(tapping){
@@ -1130,7 +1130,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
if(dst(moveTarget) <= 2f * Time.delta()){
if(tapping && !dead()){
Tile tile = ((Tilec)moveTarget).tile;
Tile tile = ((Building)moveTarget).tile;
tile.tapped(this);
}
@@ -1197,7 +1197,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
mineTile(null);
}
}
}else if(target.isValid() || (target instanceof Tilec && ((Tilec)target).damaged() && target.team() == team && mech.canHeal && dst(target) < mech.range)){
}else if(target.isValid() || (target instanceof Building && ((Building)target).damaged() && target.team() == team && mech.canHeal && dst(target) < mech.range)){
//rotate toward and shoot the target
if(mech.faceTarget){
rotation = Mathf.slerpDelta(rotation, angleTo(target), 0.2f);

View File

@@ -68,13 +68,13 @@ public class MobileInput extends InputHandler implements GestureListener{
/** Check and assign targets for a specific position. */
void checkTargets(float x, float y){
Unitc unit = Units.closestEnemy(player.team(), x, y, 20f, u -> !u.dead());
Unit unit = Units.closestEnemy(player.team(), x, y, 20f, u -> !u.dead);
if(unit != null){
player.miner().mineTile(null);
target = unit;
}else{
Tilec tile = world.entWorld(x, y);
Building tile = world.entWorld(x, y);
if(tile != null && player.team().isEnemy(tile.team())){
player.miner().mineTile(null);

View File

@@ -140,26 +140,26 @@ public class TypeIO{
return noMounts;
}
public static void writeUnit(Writes write, Unitc unit){
public static void writeUnit(Writes write, Unit unit){
write.b(unit.isNull() ? 0 : unit instanceof BlockUnitc ? 1 : 2);
//block units are special
if(unit instanceof BlockUnitc){
write.i(((BlockUnitc)unit).tile().pos());
}else{
write.i(unit.id());
write.i(unit.id);
}
}
public static Unitc readUnit(Reads read){
public static Unit readUnit(Reads read){
byte type = read.b();
int id = read.i();
//nothing
if(type == 0) return Nulls.unit;
if(type == 2){ //standard unit
Unitc unit = Groups.unit.getByID(id);
Unit unit = Groups.unit.getByID(id);
return unit == null ? Nulls.unit : unit;
}else if(type == 1){ //block
Tilec tile = world.ent(id);
Building tile = world.ent(id);
return tile instanceof ControlBlock ? ((ControlBlock)tile).unit() : Nulls.unit;
}
return Nulls.unit;
@@ -173,11 +173,11 @@ public class TypeIO{
return (T)Groups.all.getByID(read.i());
}
public static void writeTilec(Writes write, Tilec tile){
public static void writeBuilding(Writes write, Building tile){
write.i(tile == null ? -1 : tile.pos());
}
public static Tilec readTilec(Reads read){
public static Building readBuilding(Reads read){
return world.ent(read.i());
}
@@ -264,9 +264,9 @@ public class TypeIO{
public static void writeController(Writes write, UnitController control){
//no real unit controller state is written, only the type
if(control instanceof Playerc){
if(control instanceof Player){
write.b(0);
write.i(((Playerc)control).id());
write.i(((Player)control).id());
}else if(control instanceof FormationAI){
write.b(1);
write.i(((FormationAI)control).leader.id());
@@ -279,7 +279,7 @@ public class TypeIO{
byte type = read.b();
if(type == 0){ //is player
int id = read.i();
Playerc player = Groups.player.getByID(id);
Player player = Groups.player.getByID(id);
//make sure player exists
if(player == null) return prev;
return player;

View File

@@ -65,7 +65,7 @@ public abstract class LegacySaveVersion extends SaveVersion{
try{
readChunk(stream, true, in -> {
byte version = in.readByte();
//legacy impl of TileEntity#read()
//legacy impl of Building#read()
tile.entity.health(stream.readUnsignedShort());
byte packedrot = stream.readByte();
byte team = Pack.leftByte(packedrot) == 8 ? stream.readByte() : Pack.leftByte(packedrot);
@@ -74,9 +74,9 @@ public abstract class LegacySaveVersion extends SaveVersion{
tile.setTeam(Team.get(team));
tile.rotation(rotation);
if(tile.entity.items() != null) tile.entity.items().read(Reads.get(stream));
if(tile.entity.power() != null) tile.entity.power().read(Reads.get(stream));
if(tile.entity.liquids() != null) tile.entity.liquids().read(Reads.get(stream));
if(tile.entity.items != null) tile.entity.items.read(Reads.get(stream));
if(tile.entity.power != null) tile.entity.power.read(Reads.get(stream));
if(tile.entity.liquids != null) tile.entity.liquids.read(Reads.get(stream));
if(tile.entity.cons() != null) tile.entity.cons().read(Reads.get(stream));
//read only from subclasses!

View File

@@ -73,7 +73,7 @@ public class LegacyTypeTable{
13 = Revenant
private static final Prov[] build81Table = {
Playerc::new,
Player::new,
Fire::new,
Puddle::new,
MinerDrone::new,
@@ -90,7 +90,7 @@ public class LegacyTypeTable{
};
private static final Prov[] build80Table = {
Playerc::new,
Player::new,
Fire::new,
Puddle::new,
Bullet::new,
@@ -109,7 +109,7 @@ public class LegacyTypeTable{
};
private static final Prov[] build79Table = {
Playerc::new,
Player::new,
Fire::new,
Puddle::new,
Bullet::new,

View File

@@ -19,7 +19,7 @@ public class LogicExecutor{
if(counter >= instructions.length) counter = 0;
}
Tilec device(short id){
Building device(short id){
return null; //TODO
}
@@ -68,8 +68,8 @@ public class LogicExecutor{
}
enum ReadOp{
item((tile, id) -> tile.items() == null ? 0 : tile.items().get(id)),
itemTotal((tile, param) -> tile.items() == null ? 0 : tile.items().total());
item((tile, id) -> tile.items == null ? 0 : tile.items.get(id)),
itemTotal((tile, param) -> tile.items == null ? 0 : tile.items.total());
final ReadOpLambda function;
final String symbol;
@@ -80,7 +80,7 @@ public class LogicExecutor{
}
interface ReadOpLambda{
int get(Tilec tile, int parameter);
int get(Building tile, int parameter);
}
}

View File

@@ -21,7 +21,7 @@ public class RandomItemFilter extends GenerateFilter{
if(tile.block() instanceof StorageBlock && !(tile.block() instanceof CoreBlock)){
for(ItemStack stack : drops){
if(Mathf.chance(chance)){
tile.entity.items().add(stack.item, Math.min(Mathf.random(stack.amount), tile.block().itemCapacity));
tile.entity.items.add(stack.item, Math.min(Mathf.random(stack.amount), tile.block().itemCapacity));
}
}
}

View File

@@ -63,9 +63,9 @@ public class BaseGenerator{
Schematics.placeLoadout(coreschem.schematic, tile.x, tile.y, team, coreschem.required instanceof Item ? ores.get((Item)coreschem.required) : Blocks.oreCopper);
//fill core with every type of item (even non-material)
Tilec entity = tile.entity;
Building entity = tile.entity;
for(Item item : content.items()){
entity.items().add(item, entity.block().itemCapacity);
entity.items.add(item, entity.block().itemCapacity);
}
}

View File

@@ -34,7 +34,7 @@ public class FileMapGenerator implements WorldGenerator{
if(tile.block() instanceof StorageBlock && !(tile.block() instanceof CoreBlock) && state.hasSector()){
for(Content content : state.getSector().data.resources){
if(content instanceof Item && Mathf.chance(0.3)){
tile.entity.items().add((Item)content, Math.min(Mathf.random(500), tile.block().itemCapacity));
tile.entity.items.add((Item)content, Math.min(Mathf.random(500), tile.block().itemCapacity));
}
}
}

View File

@@ -123,7 +123,7 @@ public class Administration{
}
/** Filters out a chat message. */
public @Nullable String filterMessage(Playerc player, String message){
public @Nullable String filterMessage(Player player, String message){
String current = message;
for(ChatFilter f : chatFilters){
current = f.filter(player, current);
@@ -138,7 +138,7 @@ public class Administration{
}
/** @return whether this action is allowed by the action filters. */
public boolean allowAction(Playerc player, ActionType type, Tile tile, Cons<PlayerAction> setter){
public boolean allowAction(Player player, ActionType type, Tile tile, Cons<PlayerAction> setter){
PlayerAction act = Pools.obtain(PlayerAction.class, PlayerAction::new);
setter.get(act.set(player, type, tile));
for(ActionFilter filter : actionFilters){
@@ -655,7 +655,7 @@ public class Administration{
/** Handles chat messages from players and changes their contents. */
public interface ChatFilter{
/** @return the filtered message; a null string signals that the message should not be sent. */
@Nullable String filter(Playerc player, String message);
@Nullable String filter(Player player, String message);
}
/** Allows or disallows player actions. */
@@ -679,7 +679,7 @@ public class Administration{
/** Defines a (potentially dangerous) action that a player has done in the world.
* These objects are pooled; do not cache them! */
public static class PlayerAction implements Poolable{
public @NonNull Playerc player;
public @NonNull Player player;
public @NonNull ActionType type;
public @NonNull Tile tile;
@@ -694,7 +694,7 @@ public class Administration{
public @Nullable Item item;
public int itemAmount;
public PlayerAction set(Playerc player, ActionType type, Tile tile){
public PlayerAction set(Player player, ActionType type, Tile tile){
this.player = player;
this.type = type;
this.tile = tile;

View File

@@ -18,7 +18,7 @@ public abstract class NetConnection{
public final String address;
public String uuid = "AAAAAAAA", usid = uuid;
public boolean mobile, modclient;
public @Nullable Playerc player;
public @Nullable Player player;
public @Nullable Unitc lastUnit;
public Vec2 lastPosition = new Vec2();

View File

@@ -18,7 +18,7 @@ import static mindustry.Vars.*;
public class NetworkIO{
public static void writeWorld(Playerc player, OutputStream os){
public static void writeWorld(Player player, OutputStream os){
try(DataOutputStream stream = new DataOutputStream(os)){
stream.writeUTF(JsonIO.write(state.rules));

View File

@@ -6,9 +6,9 @@ import mindustry.gen.*;
* Thrown when a client sends invalid information.
*/
public class ValidateException extends RuntimeException{
public final Playerc player;
public final Player player;
public ValidateException(Playerc player, String s){
public ValidateException(Player player, String s){
super(s);
this.player = player;
}

View File

@@ -44,7 +44,7 @@ public class StatusEffect extends MappableContent{
}
/** Runs every tick on the affected unit while time is greater than 0. */
public void update(Unitc unit, float time){
public void update(Unit unit, float time){
if(damage > 0){
unit.damageContinuousPierce(damage);
}else if(damage < 0){ //heal unit
@@ -73,7 +73,7 @@ public class StatusEffect extends MappableContent{
}
}
public void draw(Unitc unit){
public void draw(Unit unit){
}
@@ -87,7 +87,7 @@ public class StatusEffect extends MappableContent{
* @param time The current status effect time
* @param newTime The time that the new status effect will last
*/
public StatusEntry getTransition(Unitc unit, StatusEffect to, float time, float newTime, StatusEntry result){
public StatusEntry getTransition(Unit unit, StatusEffect to, float time, float newTime, StatusEntry result){
if(transitions.containsKey(to)){
transitions.get(to).handle(unit, time, newTime, result);
return result;
@@ -102,6 +102,6 @@ public class StatusEffect extends MappableContent{
}
public interface TransitionHandler{
void handle(Unitc unit, float time, float newTime, StatusEntry result);
void handle(Unit unit, float time, float newTime, StatusEntry result);
}
}

View File

@@ -32,7 +32,7 @@ public class UnitType extends UnlockableContent{
private static final Vec2 legOffset = new Vec2();
public boolean flying;
public @NonNull Prov<? extends Unitc> constructor;
public @NonNull Prov<? extends Unit> constructor;
public @NonNull Prov<? extends UnitController> defaultController = () -> !flying ? new GroundAI() : new FlyingAI();
public float speed = 1.1f, boostMultiplier = 1f, rotateSpeed = 5f, baseRotateSpeed = 5f;
public float drag = 0.3f, accel = 0.5f, landShake = 0f, rippleScale = 1f;
@@ -84,8 +84,8 @@ public class UnitType extends UnlockableContent{
return defaultController.get();
}
public Unitc create(Team team){
Unitc unit = constructor.get();
public Unit create(Team team){
Unit unit = constructor.get();
unit.team(team);
unit.type(this);
unit.ammo(ammoCapacity); //fill up on ammo upon creation
@@ -97,11 +97,11 @@ public class UnitType extends UnlockableContent{
return weapons.size > 0;
}
public void update(Unitc unit){}
public void update(Unit unit){}
public void landed(Unitc unit){}
public void landed(Unit unit){}
public void display(Unitc unit, Table table){
public void display(Unit unit, Table table){
table.table(t -> {
t.left();
t.add(new Image(icon(Cicon.medium))).size(8 * 4);
@@ -116,7 +116,7 @@ public class UnitType extends UnlockableContent{
bars.row();
if(state.rules.unitAmmo){
bars.add(new Bar("blocks.ammo", Pal.ammo, () -> (float)unit.ammo() / ammoCapacity));
bars.add(new Bar("blocks.ammo", Pal.ammo, () -> (float)unit.ammo / ammoCapacity));
bars.row();
}
}).growX();
@@ -169,9 +169,9 @@ public class UnitType extends UnlockableContent{
//region drawing
public void draw(Unitc unit){
public void draw(Unit unit){
Mechc legs = unit instanceof Mechc ? (Mechc)unit : null;
float z = unit.elevation() > 0.5f ? (lowAltitude ? Layer.flyingUnitLow : Layer.flyingUnit) : Layer.groundUnit;
float z = unit.elevation > 0.5f ? (lowAltitude ? Layer.flyingUnitLow : Layer.flyingUnit) : Layer.groundUnit;
if(unit.controller().isBeingControlled(player.unit())){
drawControl(unit);
@@ -185,21 +185,21 @@ public class UnitType extends UnlockableContent{
Draw.z(z - 0.02f);
if(legs != null){
drawMech(legs);
drawMech((Unit & Mechc)legs);
float ft = Mathf.sin(legs.walkTime(), 3f, 3f);
legOffset.trns(legs.baseRotation(), 0f, Mathf.lerp(ft * 0.18f * sway, 0f, unit.elevation()));
legOffset.trns(legs.baseRotation(), 0f, Mathf.lerp(ft * 0.18f * sway, 0f, unit.elevation));
unit.trns(legOffset.x, legOffset.y);
}
if(unit instanceof Legsc){
drawLegs((Legsc)unit);
drawLegs((Unit & Legsc)unit);
}
Draw.z(Math.min(z - 0.01f, Layer.bullet - 1f));
if(unit instanceof Payloadc){
drawPayload((Payloadc)unit);
drawPayload((Unit & Payloadc)unit);
}
drawOcclusion(unit);
@@ -212,7 +212,7 @@ public class UnitType extends UnlockableContent{
if(drawItems) drawItems(unit);
drawLight(unit);
if(unit.shieldAlpha() > 0){
if(unit.shieldAlpha > 0){
drawShield(unit);
}
@@ -221,36 +221,36 @@ public class UnitType extends UnlockableContent{
}
}
public void drawPayload(Payloadc unit){
public <T extends Unit & Payloadc> void drawPayload(T unit){
if(unit.hasPayload()){
Payload pay = unit.payloads().first();
pay.set(unit.x(), unit.y(), unit.rotation());
pay.set(unit.x, unit.y, unit.rotation);
pay.draw();
}
}
public void drawShield(Unitc unit){
public void drawShield(Unit unit){
float alpha = unit.shieldAlpha();
float radius = unit.hitSize() * 1.3f;
Fill.light(unit.x(), unit.y(), Lines.circleVertices(radius), radius, Tmp.c1.set(Pal.shieldIn), Tmp.c2.set(Pal.shield).lerp(Color.white, Mathf.clamp(unit.hitTime() / 2f)).a(Pal.shield.a * alpha));
Fill.light(unit.x, unit.y, Lines.circleVertices(radius), radius, Tmp.c1.set(Pal.shieldIn), Tmp.c2.set(Pal.shield).lerp(Color.white, Mathf.clamp(unit.hitTime() / 2f)).a(Pal.shield.a * alpha));
}
public void drawControl(Unitc unit){
public void drawControl(Unit unit){
Draw.z(Layer.groundUnit - 2);
Draw.color(Pal.accent, Color.white, Mathf.absin(4f, 0.3f));
Lines.poly(unit.x(), unit.y(), 4, unit.hitSize() + 1.5f);
Lines.poly(unit.x, unit.y, 4, unit.hitSize + 1.5f);
Draw.reset();
}
public void drawShadow(Unitc unit){
public void drawShadow(Unit unit){
Draw.color(shadowColor);
Draw.rect(shadowRegion, unit.x() + shadowTX * unit.elevation(), unit.y() + shadowTY * unit.elevation(), unit.rotation() - 90);
Draw.rect(shadowRegion, unit.x + shadowTX * unit.elevation, unit.y + shadowTY * unit.elevation, unit.rotation - 90);
Draw.color();
}
public void drawOcclusion(Unitc unit){
public void drawOcclusion(Unit unit){
Draw.color(0, 0, 0, 0.4f);
float rad = 1.6f;
float size = Math.max(region.getWidth(), region.getHeight()) * Draw.scl;
@@ -258,32 +258,32 @@ public class UnitType extends UnlockableContent{
Draw.color();
}
public void drawItems(Unitc unit){
public void drawItems(Unit unit){
applyColor(unit);
//draw back items
if(unit.hasItem() && unit.itemTime() > 0.01f){
float size = (itemSize + Mathf.absin(Time.time(), 5f, 1f)) * unit.itemTime();
if(unit.hasItem() && unit.itemTime > 0.01f){
float size = (itemSize + Mathf.absin(Time.time(), 5f, 1f)) * unit.itemTime;
Draw.mixcol(Pal.accent, Mathf.absin(Time.time(), 5f, 0.5f));
Draw.rect(unit.item().icon(Cicon.medium),
unit.x() + Angles.trnsx(unit.rotation() + 180f, itemOffsetY),
unit.y() + Angles.trnsy(unit.rotation() + 180f, itemOffsetY),
size, size, unit.rotation());
unit.x + Angles.trnsx(unit.rotation + 180f, itemOffsetY),
unit.y + Angles.trnsy(unit.rotation + 180f, itemOffsetY),
size, size, unit.rotation);
Draw.mixcol();
Lines.stroke(1f, Pal.accent);
Lines.circle(
unit.x() + Angles.trnsx(unit.rotation() + 180f, itemOffsetY),
unit.y() + Angles.trnsy(unit.rotation() + 180f, itemOffsetY),
(3f + Mathf.absin(Time.time(), 5f, 1f)) * unit.itemTime());
unit.x + Angles.trnsx(unit.rotation + 180f, itemOffsetY),
unit.y + Angles.trnsy(unit.rotation + 180f, itemOffsetY),
(3f + Mathf.absin(Time.time(), 5f, 1f)) * unit.itemTime);
if(unit.isLocal()){
Fonts.outline.draw(unit.stack().amount + "",
unit.x() + Angles.trnsx(unit.rotation() + 180f, itemOffsetY),
unit.y() + Angles.trnsy(unit.rotation() + 180f, itemOffsetY) - 3,
Pal.accent, 0.25f * unit.itemTime() / Scl.scl(1f), false, Align.center
unit.x + Angles.trnsx(unit.rotation + 180f, itemOffsetY),
unit.y + Angles.trnsy(unit.rotation + 180f, itemOffsetY) - 3,
Pal.accent, 0.25f * unit.itemTime / Scl.scl(1f), false, Align.center
);
}
@@ -291,33 +291,33 @@ public class UnitType extends UnlockableContent{
}
}
public void drawEngine(Unitc unit){
public void drawEngine(Unit unit){
if(!unit.isFlying()) return;
float scale = unit.elevation();
float scale = unit.elevation;
float offset = engineOffset/2f + engineOffset/2f*scale;
if(unit instanceof Trailc){
Trail trail = ((Trailc)unit).trail();
trail.draw(unit.team().color, (engineSize + Mathf.absin(Time.time(), 2f, engineSize / 4f) * scale));
trail.draw(unit.team.color, (engineSize + Mathf.absin(Time.time(), 2f, engineSize / 4f) * scale));
}
Draw.color(unit.team().color);
Draw.color(unit.team.color);
Fill.circle(
unit.x() + Angles.trnsx(unit.rotation() + 180, offset),
unit.y() + Angles.trnsy(unit.rotation() + 180, offset),
unit.x + Angles.trnsx(unit.rotation + 180, offset),
unit.y + Angles.trnsy(unit.rotation + 180, offset),
(engineSize + Mathf.absin(Time.time(), 2f, engineSize / 4f)) * scale
);
Draw.color(Color.white);
Fill.circle(
unit.x() + Angles.trnsx(unit.rotation() + 180, offset - 1f),
unit.y() + Angles.trnsy(unit.rotation() + 180, offset - 1f),
unit.x + Angles.trnsx(unit.rotation + 180, offset - 1f),
unit.y + Angles.trnsy(unit.rotation + 180, offset - 1f),
(engineSize + Mathf.absin(Time.time(), 2f, engineSize / 4f)) / 2f * scale
);
Draw.color();
}
public void drawWeapons(Unitc unit){
public void drawWeapons(Unit unit){
applyColor(unit);
for(WeaponMount mount : unit.mounts()){
@@ -326,7 +326,7 @@ public class UnitType extends UnlockableContent{
for(int i : (weapon.mirror ? Mathf.signs : Mathf.one)){
i *= Mathf.sign(weapon.flipped);
float rotation = unit.rotation() - 90;
float rotation = unit.rotation - 90;
float weaponRotation = rotation + (weapon.rotate ? mount.rotation : 0);
float width = i > 0 ? -weapon.region.getWidth() : weapon.region.getWidth();
float recoil = -(mount.reload / weapon.reload * weapon.recoil) * (weapon.alternate ? Mathf.num(i == Mathf.sign(mount.side)) : 1);
@@ -334,8 +334,8 @@ public class UnitType extends UnlockableContent{
if(weapon.mirror) rotation = weaponRotation;
Draw.rect(weapon.region,
unit.x() + Angles.trnsx(rotation, weapon.x * i, weapon.y) + Angles.trnsx(weaponRotation, 0, recoil),
unit.y() + Angles.trnsy(rotation, weapon.x * i, weapon.y) + Angles.trnsy(weaponRotation, 0, recoil),
unit.x + Angles.trnsx(rotation, weapon.x * i, weapon.y) + Angles.trnsx(weaponRotation, 0, recoil),
unit.y + Angles.trnsy(rotation, weapon.x * i, weapon.y) + Angles.trnsy(weaponRotation, 0, recoil),
width * Draw.scl * -Mathf.sign(weapon.flipSprite),
weapon.region.getHeight() * Draw.scl,
weaponRotation);
@@ -345,33 +345,33 @@ public class UnitType extends UnlockableContent{
Draw.reset();
}
public void drawBody(Unitc unit){
public void drawBody(Unit unit){
applyColor(unit);
Draw.rect(region, unit, unit.rotation() - 90);
Draw.rect(region, unit, unit.rotation - 90);
Draw.reset();
}
public void drawCell(Unitc unit){
public void drawCell(Unit unit){
applyColor(unit);
Draw.color(cellColor(unit));
Draw.rect(cellRegion, unit, unit.rotation() - 90);
Draw.rect(cellRegion, unit, unit.rotation - 90);
Draw.reset();
}
public Color cellColor(Unitc unit){
return Tmp.c1.set(Color.black).lerp(unit.team().color, unit.healthf() + Mathf.absin(Time.time(), Math.max(unit.healthf() * 5f, 1f), 1f - unit.healthf()));
public Color cellColor(Unit unit){
return Tmp.c1.set(Color.black).lerp(unit.team.color, unit.healthf() + Mathf.absin(Time.time(), Math.max(unit.healthf() * 5f, 1f), 1f - unit.healthf()));
}
public void drawLight(Unitc unit){
public void drawLight(Unit unit){
if(lightRadius > 0){
Drawf.light(unit.team(), unit, lightRadius, lightColor, lightOpacity);
Drawf.light(unit.team, unit, lightRadius, lightColor, lightOpacity);
}
}
public void drawLegs(Legsc unit){
public <T extends Unit & Legsc> void drawLegs(T unit){
//Draw.z(Layer.groundUnit - 0.02f);
Leg[] legs = unit.legs();
@@ -385,7 +385,7 @@ public class UnitType extends UnlockableContent{
//TODO should be below/above legs
if(baseRegion.found()){
Draw.rect(baseRegion, unit.x(), unit.y(), rotation);
Draw.rect(baseRegion, unit.x, unit.y, rotation);
}
//TODO figure out layering
@@ -427,14 +427,14 @@ public class UnitType extends UnlockableContent{
Draw.reset();
}
public void drawMech(Mechc unit){
public <T extends Unit & Mechc> void drawMech(T unit){
Draw.reset();
Draw.mixcol(Color.white, unit.hitTime());
Draw.mixcol(Color.white, unit.hitTime);
float e = unit.elevation();
float e = unit.elevation;
float sin = Mathf.lerp(Mathf.sin(unit.walkTime(), 3f, 1f), 0f, e);
float ft = sin*(2.5f + (unit.hitSize()-8f)/2f);
float ft = sin*(2.5f + (unit.hitSize-8f)/2f);
float boostTrns = e * 2f;
Floor floor = unit.isFlying() ? Blocks.air.asFloor() : unit.floorOn();
@@ -445,8 +445,8 @@ public class UnitType extends UnlockableContent{
for(int i : Mathf.signs){
Draw.rect(legRegion,
unit.x() + Angles.trnsx(unit.baseRotation(), ft * i - boostTrns, -boostTrns*i),
unit.y() + Angles.trnsy(unit.baseRotation(), ft * i - boostTrns, -boostTrns*i),
unit.x + Angles.trnsx(unit.baseRotation(), ft * i - boostTrns, -boostTrns*i),
unit.y + Angles.trnsy(unit.baseRotation(), ft * i - boostTrns, -boostTrns*i),
legRegion.getWidth() * i * Draw.scl,
legRegion.getHeight() * Draw.scl - Math.max(-sin * i, 0) * legRegion.getHeight() * 0.5f * Draw.scl,
unit.baseRotation() - 90 + 35f*i*e);
@@ -463,10 +463,10 @@ public class UnitType extends UnlockableContent{
Draw.mixcol();
}
public void applyColor(Unitc unit){
Draw.mixcol(Color.white, unit.hitTime());
if(unit.drownTime() > 0 && unit.floorOn().isDeep()){
Draw.mixcol(unit.floorOn().mapColor, unit.drownTime() * 0.8f);
public void applyColor(Unit unit){
Draw.mixcol(Color.white, unit.hitTime);
if(unit.drownTime > 0 && unit.floorOn().isDeep()){
Draw.mixcol(unit.floorOn().mapColor, unit.drownTime * 0.8f);
}
}

View File

@@ -17,9 +17,9 @@ public abstract class Weather extends MappableContent{
//internals
public Rand rand = new Rand();
public Prov<Weatherc> type = WeatherEntity::create;
public Prov<WeatherState> type = WeatherState::create;
public Weather(String name, Prov<Weatherc> type){
public Weather(String name, Prov<WeatherState> type){
super(name);
this.type = type;
}
@@ -28,16 +28,16 @@ public abstract class Weather extends MappableContent{
super(name);
}
public Weatherc create(){
public WeatherState create(){
return create(1f);
}
public Weatherc create(float intensity){
public WeatherState create(float intensity){
return create(intensity, duration);
}
public Weatherc create(float intensity, float duration){
Weatherc entity = type.get();
public WeatherState create(float intensity, float duration){
WeatherState entity = type.get();
entity.intensity(intensity);
entity.init(this);
entity.life(duration);
@@ -54,15 +54,15 @@ public abstract class Weather extends MappableContent{
if(e != null) e.remove();
}
public void update(Weatherc state){
public void update(WeatherState state){
}
public void drawOver(Weatherc state){
public void drawOver(WeatherState state){
}
public void drawUnder(Weatherc state){
public void drawUnder(WeatherState state){
}
@@ -107,9 +107,9 @@ public abstract class Weather extends MappableContent{
}
}
@EntityDef(value = {Weatherc.class}, pooled = true, isFinal = false)
@Component
abstract static class WeatherComp implements Drawc{
@EntityDef(value = {WeatherStatec.class}, pooled = true, isFinal = false)
@Component(base = true)
abstract static class WeatherStateComp implements Drawc{
private static final float fadeTime = 60 * 4;
Weather weather;
@@ -129,7 +129,7 @@ public abstract class Weather extends MappableContent{
life -= Time.delta();
weather.update((Weatherc)this);
weather.update(base());
if(life < 0){
remove();
@@ -142,14 +142,14 @@ public abstract class Weather extends MappableContent{
Draw.draw(Layer.weather, () -> {
weather.rand.setSeed(0);
Draw.alpha(renderer.weatherAlpha() * opacity);
weather.drawOver((Weatherc)this);
weather.drawOver(base());
Draw.reset();
});
Draw.draw(Layer.debris, () -> {
weather.rand.setSeed(0);
Draw.alpha(renderer.weatherAlpha() * opacity);
weather.drawUnder((Weatherc)this);
weather.drawUnder(base());
Draw.reset();
});
}

View File

@@ -338,7 +338,7 @@ public class SchematicsDialog extends BaseDialog{
for(ItemStack s : arr){
r.image(s.item.icon(Cicon.small)).left();
r.label(() -> {
Tilec core = player.core();
Building core = player.core();
if(core == null || state.rules.infiniteResources || core.items().has(s.item, s.amount)) return "[lightgray]" + s.amount + "";
return (core.items().has(s.item, s.amount) ? "[lightgray]" : "[scarlet]") + Math.min(core.items().get(s.item), s.amount) + "[lightgray]/" + s.amount;
}).padLeft(2).left().padRight(4);

View File

@@ -14,7 +14,7 @@ public class TraceDialog extends BaseDialog{
setFillParent(false);
}
public void show(Playerc player, TraceInfo info){
public void show(Player player, TraceInfo info){
cont.clear();
Table table = new Table(Tex.clear);

View File

@@ -13,7 +13,7 @@ import static mindustry.Vars.*;
public class BlockConfigFragment extends Fragment{
private Table table = new Table();
private Tilec configTile;
private Building configTile;
@Override
public void build(Group parent){
@@ -38,11 +38,11 @@ public class BlockConfigFragment extends Fragment{
return table.isVisible() && configTile != null;
}
public Tilec getSelectedTile(){
public Building getSelectedTile(){
return configTile;
}
public void showConfig(Tilec tile){
public void showConfig(Building tile){
if(tile.configTapped()){
configTile = tile;

View File

@@ -32,7 +32,7 @@ public class BlockInventoryFragment extends Fragment{
private final static float holdShrink = 120f;
private Table table = new Table();
private Tilec tile;
private Building tile;
private float holdTime = 0f, emptyTime;
private boolean holding;
private float[] shrinkHoldTimes = new float[content.items().size];
@@ -43,7 +43,7 @@ public class BlockInventoryFragment extends Fragment{
}
@Remote(called = Loc.server, targets = Loc.both, forward = true)
public static void requestItem(Playerc player, Tilec tile, Item item, int amount){
public static void requestItem(Player player, Building tile, Item item, int amount){
if(player == null || tile == null || !tile.interactable(player.team())) return;
amount = Mathf.clamp(amount, 0, player.unit().itemCapacity());
int fa = amount;
@@ -71,13 +71,13 @@ public class BlockInventoryFragment extends Fragment{
parent.addChild(table);
}
public void showFor(Tilec t){
public void showFor(Building t){
if(this.tile == t){
hide();
return;
}
this.tile = t;
if(tile == null || !tile.block().isAccessible() || tile.items().total() == 0)
if(tile == null || !tile.block().isAccessible() || tile.items.total() == 0)
return;
rebuild(true);
}
@@ -109,7 +109,7 @@ public class BlockInventoryFragment extends Fragment{
if(state.isMenu() || tile == null || !tile.isValid() || !tile.block().isAccessible() || emptyTime >= holdShrink){
hide();
}else{
if(tile.items().total() == 0){
if(tile.items.total() == 0){
emptyTime += Time.delta();
}else{
emptyTime = 0f;
@@ -119,7 +119,7 @@ public class BlockInventoryFragment extends Fragment{
holdTime += Time.delta();
if(holdTime >= holdWithdraw){
int amount = Math.min(tile.items().get(lastItem), player.unit().maxAccepted(lastItem));
int amount = Math.min(tile.items.get(lastItem), player.unit().maxAccepted(lastItem));
Call.requestItem(player, tile, lastItem, amount);
holding = false;
holdTime = 0f;
@@ -134,7 +134,7 @@ public class BlockInventoryFragment extends Fragment{
if(shrinkHoldTimes.length != content.items().size) shrinkHoldTimes = new float[content.items().size];
for(int i = 0; i < content.items().size; i++){
boolean has = tile.items().has(content.item(i));
boolean has = tile.items.has(content.item(i));
boolean had = container.contains(i);
if(has){
shrinkHoldTimes[i] = 0f;
@@ -159,7 +159,7 @@ public class BlockInventoryFragment extends Fragment{
for(int i = 0; i < content.items().size; i++){
Item item = content.item(i);
if(!tile.items().has(item)) continue;
if(!tile.items.has(item)) continue;
container.add(i);
@@ -172,14 +172,14 @@ public class BlockInventoryFragment extends Fragment{
if(tile == null || !tile.isValid()){
return "";
}
return round(tile.items().get(item));
return round(tile.items.get(item));
});
image.addListener(l);
image.addListener(new InputListener(){
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, KeyCode button){
if(!canPick.get() || tile == null || !tile.isValid() || tile.items() == null || !tile.items().has(item)) return false;
if(!canPick.get() || tile == null || !tile.isValid() || tile.items == null || !tile.items.has(item)) return false;
int amount = Math.min(1, player.unit().maxAccepted(item));
if(amount > 0){
Call.requestItem(player, tile, item, amount);

View File

@@ -373,7 +373,7 @@ public class HudFragment extends Fragment{
}
@Remote(targets = Loc.both, forward = true, called = Loc.both)
public static void setPlayerTeamEditor(Playerc player, Team team){
public static void setPlayerTeamEditor(Player player, Team team){
if(state.isEditor() && player != null){
player.team(team);
}

View File

@@ -90,7 +90,7 @@ public class PlacementFragment extends Fragment{
scrollPositions.put(currentCategory, blockPane.getScrollY());
if(Core.input.keyDown(Binding.pick) && player.isBuilder()){ //mouse eyedropper select
Tilec tile = world.entWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y);
Building tile = world.entWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y);
Block tryRecipe = tile == null ? null : tile.block();
Object tryConfig = tile == null ? null : tile.config();
@@ -224,7 +224,7 @@ public class PlacementFragment extends Fragment{
button.resizeImage(Cicon.medium.size);
button.update(() -> { //color unplacable things gray
Tilec core = player.core();
Building core = player.core();
Color color = (state.rules.infiniteResources || (core != null && (core.items().has(block.requirements, state.rules.buildCostMultiplier) || state.rules.infiniteResources))) && player.isBuilder() ? Color.white : Color.gray;
button.forEach(elem -> elem.setColor(color));
button.setChecked(control.input.block == block);
@@ -317,7 +317,7 @@ public class PlacementFragment extends Fragment{
line.image(stack.item.icon(Cicon.small)).size(8 * 2);
line.add(stack.item.localizedName).maxWidth(140f).fillX().color(Color.lightGray).padLeft(2).left().get().setEllipsis(true);
line.labelWrap(() -> {
Tilec core = player.core();
Building core = player.core();
if(core == null || state.rules.infiniteResources) return "*/*";
int amount = core.items().get(stack.item);
@@ -442,7 +442,7 @@ public class PlacementFragment extends Fragment{
if(Core.scene.hasMouse() || topTable.hit(v.x, v.y, false) != null) return null;
//check for a unit
Unitc unit = Units.closestOverlap(player.team(), Core.input.mouseWorldX(), Core.input.mouseWorldY(), 5f, u -> !u.isLocal());
Unit unit = Units.closestOverlap(player.team(), Core.input.mouseWorldX(), Core.input.mouseWorldY(), 5f, u -> !u.isLocal());
//if cursor has a unit, display it
if(unit != null) return unit;

View File

@@ -74,7 +74,7 @@ public class PlayerListFragment extends Fragment{
float h = 74f;
found = false;
Groups.player.sort(Structs.comparing(Playerc::team));
Groups.player.sort(Structs.comparing(Player::team));
Groups.player.each(user -> {
found = true;
NetConnection connection = user.con();

View File

@@ -172,7 +172,7 @@ public class Block extends UnlockableContent{
/** Whether this block has instant transfer.*/
public boolean instantTransfer = false;
protected Prov<Tilec> entityType = null; //initialized later
protected Prov<Building> entityType = null; //initialized later
public ObjectMap<Class<?>, Cons2> configurations = new ObjectMap<>();
protected TextureRegion[] generatedIcons;
@@ -184,7 +184,7 @@ public class Block extends UnlockableContent{
public static TextureRegion[][] cracks;
protected static final Seq<Tile> tempTiles = new Seq<>();
protected static final Seq<Tilec> tempTileEnts = new Seq<>();
protected static final Seq<Building> tempTileEnts = new Seq<>();
/** Dump timer ID.*/
protected final int timerDump = timers++;
@@ -307,15 +307,15 @@ public class Block extends UnlockableContent{
bars.add("health", entity -> new Bar("blocks.health", Pal.health, entity::healthf).blink(Color.white));
if(hasLiquids){
Func<Tilec, Liquid> current;
Func<Building, Liquid> current;
if(consumes.has(ConsumeType.liquid) && consumes.get(ConsumeType.liquid) instanceof ConsumeLiquid){
Liquid liquid = consumes.<ConsumeLiquid>get(ConsumeType.liquid).liquid;
current = entity -> liquid;
}else{
current = entity -> entity.liquids().current();
current = entity -> entity.liquids.current();
}
bars.add("liquid", entity -> new Bar(() -> entity.liquids().get(current.get(entity)) <= 0.001f ? Core.bundle.get("bar.liquid") : current.get(entity).localizedName,
() -> current.get(entity).barColor(), () -> entity.liquids().get(current.get(entity)) / liquidCapacity));
bars.add("liquid", entity -> new Bar(() -> entity.liquids.get(current.get(entity)) <= 0.001f ? Core.bundle.get("bar.liquid") : current.get(entity).localizedName,
() -> current.get(entity).barColor(), () -> entity.liquids.get(current.get(entity)) / liquidCapacity));
}
if(hasPower && consumes.hasPower()){
@@ -323,12 +323,12 @@ public class Block extends UnlockableContent{
boolean buffered = cons.buffered;
float capacity = cons.capacity;
bars.add("power", entity -> new Bar(() -> buffered ? Core.bundle.format("bar.poweramount", Float.isNaN(entity.power().status * capacity) ? "<ERROR>" : (int)(entity.power().status * capacity)) :
Core.bundle.get("bar.power"), () -> Pal.powerBar, () -> Mathf.zero(cons.requestedPower(entity)) && entity.power().graph.getPowerProduced() + entity.power().graph.getBatteryStored() > 0f ? 1f : entity.power().status));
bars.add("power", entity -> new Bar(() -> buffered ? Core.bundle.format("bar.poweramount", Float.isNaN(entity.power.status * capacity) ? "<ERROR>" : (int)(entity.power.status * capacity)) :
Core.bundle.get("bar.power"), () -> Pal.powerBar, () -> Mathf.zero(cons.requestedPower(entity)) && entity.power.graph.getPowerProduced() + entity.power.graph.getBatteryStored() > 0f ? 1f : entity.power.status));
}
if(hasItems && configurable){
bars.add("items", entity -> new Bar(() -> Core.bundle.format("bar.items", entity.items().total()), () -> Pal.items, () -> (float)entity.items().total() / itemCapacity));
bars.add("items", entity -> new Bar(() -> Core.bundle.format("bar.items", entity.items.total()), () -> Pal.items, () -> (float)entity.items.total() / itemCapacity));
}
}
@@ -383,12 +383,12 @@ public class Block extends UnlockableContent{
}
/** Configure when a null value is passed.*/
public <E extends Tilec> void configClear(Cons<E> cons){
public <E extends Building> void configClear(Cons<E> cons){
configurations.put(void.class, (tile, value) -> cons.get((E)tile));
}
/** Listen for a config by class type. */
public <T, E extends Tilec> void config(Class<T> type, Cons2<E, T> config){
public <T, E extends Building> void config(Class<T> type, Cons2<E, T> config){
configurations.put(type, config);
}
@@ -454,7 +454,7 @@ public class Block extends UnlockableContent{
return destructible || update;
}
public final Tilec newEntity(){
public final Building newEntity(){
return entityType.get();
}
@@ -536,11 +536,11 @@ public class Block extends UnlockableContent{
}
while(entityType == null && Block.class.isAssignableFrom(current)){
//first class that is subclass of Tilec
Class<?> type = Structs.find(current.getDeclaredClasses(), t -> Tilec.class.isAssignableFrom(t) && !t.isInterface());
//first class that is subclass of Building
Class<?> type = Structs.find(current.getDeclaredClasses(), t -> Building.class.isAssignableFrom(t) && !t.isInterface());
if(type != null){
//these are inner classes, so they have an implicit parameter generated
Constructor<? extends Tilec> cons = (Constructor<? extends Tilec>)type.getDeclaredConstructor(type.getDeclaringClass());
Constructor<? extends Building> cons = (Constructor<? extends Building>)type.getDeclaredConstructor(type.getDeclaringClass());
entityType = () -> {
try{
return cons.newInstance(this);
@@ -559,7 +559,7 @@ public class Block extends UnlockableContent{
if(entityType == null){
//assign default value
entityType = TileEntity::create;
entityType = Building::create;
}
}

View File

@@ -21,7 +21,7 @@ public class Build{
return;
}
Tile tile = world.tilec(x, y);
Tile tile = world.Building(x, y);
//this should never happen, but it doesn't hurt to check for links
float prevPercent = 1f;

View File

@@ -21,13 +21,13 @@ public class CachedTile extends Tile{
}
@Override
protected void changeEntity(Team team, Prov<Tilec> entityprov){
protected void changeEntity(Team team, Prov<Building> entityprov){
entity = null;
Block block = block();
if(block.hasEntity()){
Tilec n = entityprov.get();
Building n = entityprov.get();
n.cons(new ConsumeModule(entity));
n.tile(this);
n.block(block);

View File

@@ -50,7 +50,7 @@ public class Edges{
}
}
public static Tile getFacingEdge(Tilec tile, Tilec other){
public static Tile getFacingEdge(Building tile, Building other){
return getFacingEdge(tile.block(), tile.tileX(), tile.tileY(), other.tile());
}

View File

@@ -19,12 +19,12 @@ import mindustry.world.blocks.environment.*;
import static mindustry.Vars.*;
public class Tile implements Position, QuadTreeObject, Displayable{
static final ObjectSet<Tilec> tileSet = new ObjectSet<>();
static final ObjectSet<Building> tileSet = new ObjectSet<>();
/** Tile traversal cost. */
public short cost = 1;
/** Tile entity, usually null. */
public @Nullable Tilec entity;
public @Nullable Building entity;
public short x, y;
protected @NonNull Block block;
protected @NonNull Floor floor;
@@ -106,7 +106,7 @@ public class Tile implements Position, QuadTreeObject, Displayable{
}
@SuppressWarnings("unchecked")
public <T extends TileEntity> T ent(){
public <T extends Building> T ent(){
return (T)entity;
}
@@ -169,7 +169,7 @@ public class Tile implements Position, QuadTreeObject, Displayable{
setBlock(type, team, rotation, type::newEntity);
}
public void setBlock(@NonNull Block type, Team team, int rotation, Prov<Tilec> entityprov){
public void setBlock(@NonNull Block type, Team team, int rotation, Prov<Building> entityprov){
changing = true;
this.block = type;
@@ -185,7 +185,7 @@ public class Tile implements Position, QuadTreeObject, Displayable{
if(block.isMultiblock()){
int offsetx = -(block.size - 1) / 2;
int offsety = -(block.size - 1) / 2;
Tilec entity = this.entity;
Building entity = this.entity;
Block block = this.block;
//two passes: first one clears, second one sets
@@ -425,7 +425,7 @@ public class Tile implements Position, QuadTreeObject, Displayable{
return null;
}
public Tilec getNearbyEntity(int rotation){
public Building getNearbyEntity(int rotation){
if(rotation == 0) return world.ent(x + 1, y);
if(rotation == 1) return world.ent(x, y + 1);
if(rotation == 2) return world.ent(x - 1, y);
@@ -434,19 +434,19 @@ public class Tile implements Position, QuadTreeObject, Displayable{
}
// ▲ ▲ ▼ ▼ ◀ ▶ ◀ ▶ B A
public @Nullable Tilec front(){
public @Nullable Building front(){
return getNearbyEntity((rotation + 4) % 4);
}
public @Nullable Tilec right(){
public @Nullable Building right(){
return getNearbyEntity((rotation + 3) % 4);
}
public @Nullable Tilec back(){
public @Nullable Building back(){
return getNearbyEntity((rotation + 2) % 4);
}
public @Nullable Tilec left(){
public @Nullable Building left(){
return getNearbyEntity((rotation + 1) % 4);
}
@@ -505,7 +505,7 @@ public class Tile implements Position, QuadTreeObject, Displayable{
//remove this tile's dangling entities
if(entity.block().isMultiblock()){
int cx = entity.tileX(), cy = entity.tileY();
int size = entity.block().size;
int size = entity.block.size;
int offsetx = -(size - 1) / 2;
int offsety = -(size - 1) / 2;
for(int dx = 0; dx < size; dx++){
@@ -534,9 +534,9 @@ public class Tile implements Position, QuadTreeObject, Displayable{
}
}
protected void changeEntity(Team team, Prov<Tilec> entityprov){
protected void changeEntity(Team team, Prov<Building> entityprov){
if(entity != null){
int size = entity.block().size;
int size = entity.block.size;
entity.remove();
entity = null;
@@ -544,14 +544,14 @@ public class Tile implements Position, QuadTreeObject, Displayable{
tileSet.clear();
for(Point2 edge : Edges.getEdges(size)){
Tilec other = world.ent(x + edge.x, y + edge.y);
Building other = world.ent(x + edge.x, y + edge.y);
if(other != null){
tileSet.add(other);
}
}
//update proximity, since multiblock was just removed
for(Tilec t : tileSet){
for(Building t : tileSet){
t.updateProximity();
}
}
@@ -568,7 +568,7 @@ public class Tile implements Position, QuadTreeObject, Displayable{
}else{
//since the entity won't update proximity for us, update proximity for all nearby tiles manually
for(Point2 p : Geometry.d4){
Tilec tile = world.ent(x + p.x, y + p.y);
Building tile = world.ent(x + p.x, y + p.y);
if(tile != null && !tile.tile().changing){
tile.onProximityUpdate();
}
@@ -633,7 +633,7 @@ public class Tile implements Position, QuadTreeObject, Displayable{
@Remote(called = Loc.server, unreliable = true)
public static void onTileDamage(Tile tile, float health){
if(tile.entity != null){
tile.entity.health(health);
tile.entity.health = health;
if(tile.entity.damaged()){
indexer.notifyTileDamaged(tile.entity);

View File

@@ -146,7 +146,7 @@ public interface Autotiler{
}
default boolean blends(Tile tile, int rotation, int direction){
Tilec other = tile.getNearbyEntity(Mathf.mod(rotation - direction, 4));
Building other = tile.getNearbyEntity(Mathf.mod(rotation - direction, 4));
return other != null && other.team() == tile.team() && blends(tile, rotation, other.tileX(), other.tileY(), other.rotation(), other.block());
}

View File

@@ -108,7 +108,7 @@ public class BuildBlock extends Block{
return true;
}
public class BuildEntity extends TileEntity{
public class BuildEntity extends Building{
/**
* The recipe of the block that is being constructed.
* If there is no recipe for this block, as is the case with rocks, 'previous' is used.
@@ -148,7 +148,7 @@ public class BuildBlock extends Block{
}
@Override
public void tapped(Playerc player){
public void tapped(Player player){
//if the target is constructible, begin constructing
if(!headless && cblock != null){
if(control.input.buildWasAutoPaused && !control.input.isBuilding && player.isBuilder()){
@@ -190,7 +190,7 @@ public class BuildBlock extends Block{
});
}
public boolean construct(Unitc builder, @Nullable Tilec core, float amount, boolean configured){
public boolean construct(Unitc builder, @Nullable Building core, float amount, boolean configured){
if(cblock == null){
kill();
return false;
@@ -220,7 +220,7 @@ public class BuildBlock extends Block{
return false;
}
public void deconstruct(Unitc builder, @Nullable Tilec core, float amount){
public void deconstruct(Unitc builder, @Nullable Building core, float amount){
float deconstructMultiplier = state.rules.deconstructRefundMultiplier;
if(cblock != null){

Some files were not shown because too many files have changed in this diff Show More