Many various internal changes

This commit is contained in:
Anuken
2019-12-26 17:46:01 -05:00
parent 36ec88e2e2
commit de5979f4ee
53 changed files with 435 additions and 575 deletions

View File

@@ -38,7 +38,7 @@ public class Build{
Block previous = tile.block();
Block sub = BuildBlock.get(previous.size);
world.setBlock(tile, sub, team, rotation);
tile.set(sub, team, rotation);
tile.<BuildEntity>ent().setDeconstruct(previous);
tile.entity.health = tile.entity.maxHealth() * prevPercent;
@@ -60,7 +60,7 @@ public class Build{
Block previous = tile.block();
Block sub = BuildBlock.get(result.size);
world.setBlock(tile, sub, team, rotation);
tile.set(sub, team, rotation);
tile.<BuildEntity>ent().setConstruct(previous, result);
Core.app.post(() -> Events.fire(new BlockBuildBeginEvent(tile, team, false)));
@@ -72,7 +72,7 @@ public class Build{
return false;
}
if(state.rules.bannedBlocks.contains(type) && !(state.rules.waves && team == waveTeam)){
if(state.rules.bannedBlocks.contains(type) && !(state.rules.waves && team == state.rules.waveTeam)){
return false;
}
@@ -80,13 +80,8 @@ public class Build{
return false;
}
//check for enemy cores
for(Team enemy : state.teams.enemiesOf(team)){
for(Tile core : state.teams.get(enemy).cores){
if(Mathf.dst(x * tilesize + type.offset(), y * tilesize + type.offset(), core.drawx(), core.drawy()) < state.rules.enemyCoreBuildRadius + type.size * tilesize / 2f){
return false;
}
}
if(!state.teams.eachEnemyCore(team, core -> Mathf.dst(x * tilesize + type.offset(), y * tilesize + type.offset(), core.x, core.y) < state.rules.enemyCoreBuildRadius + type.size * tilesize / 2f)){
return false;
}
Tile tile = world.tile(x, y);

View File

@@ -16,7 +16,7 @@ public class CachedTile extends Tile{
@Override
public Team getTeam(){
return Team.all[getTeamID()];
return Team.get(getTeamID());
}
@Override

View File

@@ -142,11 +142,11 @@ public class Tile implements Position, TargetTrait{
@Override
public Team getTeam(){
return Team.all[link().team];
return Team.get(link().team);
}
public void setTeam(Team team){
this.team = (byte) (int) team.id;
this.team = (byte) (int)team.id;
}
public byte getTeamID(){
@@ -156,7 +156,7 @@ public class Tile implements Position, TargetTrait{
public void setBlock(@NonNull Block type, Team team, int rotation){
preChanged();
this.block = type;
this.team = (byte) (int) team.id;
this.team = (byte) (int)team.id;
this.rotation = (byte)Mathf.mod(rotation, 4);
changed();
}
@@ -186,6 +186,35 @@ public class Tile implements Position, TargetTrait{
setOverlay(overlay);
}
public void remove(){
link().getLinkedTiles(other -> other.setBlock(Blocks.air));
}
public void set(Block block, Team team){
set(block, team, 0);
}
public void set(Block block, Team team, int rotation){
setBlock(block, team, rotation);
if(block.isMultiblock()){
int offsetx = -(block.size - 1) / 2;
int offsety = -(block.size - 1) / 2;
for(int dx = 0; dx < block.size; dx++){
for(int dy = 0; dy < block.size; dy++){
int worldx = dx + offsetx + x;
int worldy = dy + offsety + y;
if(!(worldx == x && worldy == y)){
Tile toplace = world.tile(worldx, worldy);
if(toplace != null){
toplace.setBlock(BlockPart.get(dx + offsetx, dy + offsety), team);
}
}
}
}
}
}
public byte rotation(){
return rotation;
}
@@ -240,7 +269,7 @@ public class Tile implements Position, TargetTrait{
}
public boolean isEnemyCheat(){
return getTeam() == waveTeam && state.rules.enemyCheat;
return getTeam() == state.rules.waveTeam && state.rules.enemyCheat;
}
public boolean isLinked(){
@@ -344,7 +373,7 @@ public class Tile implements Position, TargetTrait{
}
public boolean interactable(Team team){
return getTeam() == Team.derelict || team == getTeam();
return state.teams.canInteract(team, getTeam());
}
public Item drop(){

View File

@@ -66,7 +66,7 @@ public class BuildBlock extends Block{
public static void onConstructFinish(Tile tile, Block block, int builderID, byte rotation, Team team, boolean skipConfig){
if(tile == null) return;
float healthf = tile.entity == null ? 1f : tile.entity.healthf();
world.setBlock(tile, block, team, rotation);
tile.set(block, team, rotation);
if(tile.entity != null){
tile.entity.health = block.health * healthf;
}

View File

@@ -84,12 +84,12 @@ public class CoreBlock extends StorageBlock{
public void onProximityUpdate(Tile tile){
CoreEntity entity = tile.ent();
for(Tile other : state.teams.get(tile.getTeam()).cores){
if(other != tile){
entity.items = other.entity.items;
for(TileEntity other : state.teams.cores(tile.getTeam())){
if(other.tile != tile){
entity.items = other.items;
}
}
state.teams.get(tile.getTeam()).cores.add(tile);
state.teams.registerCore(entity);
entity.storageCapacity = itemCapacity + entity.proximity().sum(e -> isContainer(e) ? e.block().itemCapacity : 0);
entity.proximity().each(this::isContainer, t -> {
@@ -97,9 +97,9 @@ public class CoreBlock extends StorageBlock{
t.<StorageBlockEntity>ent().linkedCore = tile;
});
for(Tile other : state.teams.get(tile.getTeam()).cores){
if(other == tile) continue;
entity.storageCapacity += other.block().itemCapacity + other.entity.proximity().sum(e -> isContainer(e) ? e.block().itemCapacity : 0);
for(TileEntity other : state.teams.cores(tile.getTeam())){
if(other.tile == tile) continue;
entity.storageCapacity += other.block.itemCapacity + entity.proximity().sum(e -> isContainer(e) ? e.block().itemCapacity : 0);
}
if(!world.isGenerating()){
@@ -108,9 +108,8 @@ public class CoreBlock extends StorageBlock{
}
}
for(Tile other : state.teams.get(tile.getTeam()).cores){
CoreEntity oe = other.ent();
oe.storageCapacity = entity.storageCapacity;
for(CoreEntity other : state.teams.cores(tile.getTeam())){
other.storageCapacity = entity.storageCapacity;
}
}
@@ -151,8 +150,9 @@ public class CoreBlock extends StorageBlock{
@Override
public void removed(Tile tile){
CoreEntity entity = tile.ent();
int total = tile.entity.proximity().count(e -> e.entity.items == tile.entity.items);
float fract = 1f / total / state.teams.get(tile.getTeam()).cores.size;
float fract = 1f / total / state.teams.cores(tile.getTeam()).size;
tile.entity.proximity().each(e -> isContainer(e) && e.entity.items == tile.entity.items, t -> {
StorageBlockEntity ent = (StorageBlockEntity)t.entity;
@@ -163,22 +163,23 @@ public class CoreBlock extends StorageBlock{
}
});
state.teams.get(tile.getTeam()).cores.remove(tile);
state.teams.unregisterCore(entity);
int max = itemCapacity * state.teams.get(tile.getTeam()).cores.size;
int max = itemCapacity * state.teams.cores(tile.getTeam()).size;
for(Item item : content.items()){
tile.entity.items.set(item, Math.min(tile.entity.items.get(item), max));
}
for(Tile other : state.teams.get(tile.getTeam()).cores){
other.block().onProximityUpdate(other);
for(CoreEntity other : state.teams.cores(tile.getTeam())){
other.block.onProximityUpdate(other.tile);
}
}
@Override
public void placed(Tile tile){
super.placed(tile);
state.teams.get(tile.getTeam()).cores.add(tile);
CoreEntity entity = tile.ent();
state.teams.registerCore(entity);
}
@Override

View File

@@ -58,7 +58,7 @@ public class CommandCenter extends Block{
ObjectSet<Tile> set = indexer.getAllied(tile.getTeam(), BlockFlag.comandCenter);
if(set.size == 1){
for(BaseUnit unit : unitGroups[(int) tile.getTeam().id].all()){
for(BaseUnit unit : unitGroups[(int)tile.getTeam().id].all()){
unit.onCommand(UnitCommand.all[0]);
}
}
@@ -116,7 +116,7 @@ public class CommandCenter extends Block{
Team team = (player == null ? tile.getTeam() : player.getTeam());
for(BaseUnit unit : unitGroups[(int) team.id].all()){
for(BaseUnit unit : unitGroups[(int)team.id].all()){
unit.onCommand(command);
}