Minor logic unit rotation fix / Core capture unit derelict tareting

This commit is contained in:
Anuken
2021-06-29 16:26:02 -04:00
parent c7bd9dd0fa
commit 6c18634b0d
5 changed files with 10 additions and 13 deletions

View File

@@ -285,7 +285,7 @@ public class BlockIndexer{
for(int i = 0; i < activeTeams.size; i++){
Team enemy = activeTeams.items[i];
if(enemy == team || team == Team.derelict) continue;
if(enemy == team || (team == Team.derelict && !state.rules.coreCapture)) continue;
Building entity = indexer.findTile(enemy, x, y, range, pred, true);
if(entity != null){
@@ -360,7 +360,7 @@ public class BlockIndexer{
private void process(Tile tile){
var team = tile.team();
//only process entity changes with centered tiles
if(tile.isCenter() && team != Team.derelict){
if(tile.isCenter() && tile.build != null){
var data = team.data();
if(tile.block().flags.size() > 0 && tile.isCenter()){
TileArray[] map = getFlagged(team);

View File

@@ -119,9 +119,11 @@ public class Pathfinder implements Runnable{
}
}
int tid = tile.getTeamID();
return PathTile.get(
tile.build == null || !solid || tile.block() instanceof CoreBlock ? 0 : Math.min((int)(tile.build.health / 40), 80),
tile.getTeamID(),
tid == 0 && tile.build != null && state.rules.coreCapture ? 255 : tid, //use teamid = 255 when core capture is enabled to mark out derelict structures
solid,
tile.floor().isLiquid,
tile.staticDarkness() >= 2 || (tile.floor().solid && tile.block() == Blocks.air),

View File

@@ -104,7 +104,7 @@ public class LogicAI extends AIController{
//look where moving if there's nothing to aim at
if(!shoot){
unit.lookAt(unit.prefRotation());
}else if(unit.hasWeapons() && unit.mounts.length > 0){ //if there is, look at the object
}else if(unit.hasWeapons() && unit.mounts.length > 0 && !unit.mounts[0].weapon.ignoreRotation){ //if there is, look at the object
unit.lookAt(unit.mounts[0].aimX, unit.mounts[0].aimY);
}
}

View File

@@ -97,7 +97,7 @@ public class Team implements Comparable<Team>{
}
public boolean isEnemy(Team other){
return state.teams.areEnemies(this, other);
return this != other;
}
public Seq<CoreBuild> cores(){

View File

@@ -49,7 +49,7 @@ public class Teams{
public boolean eachEnemyCore(Team team, Boolf<CoreBuild> ret){
for(TeamData data : active){
if(areEnemies(team, data.team)){
if(team != data.team){
for(CoreBuild tile : data.cores){
if(ret.get(tile)){
return true;
@@ -62,7 +62,7 @@ public class Teams{
public void eachEnemyCore(Team team, Cons<Building> ret){
for(TeamData data : active){
if(areEnemies(team, data.team)){
if(team != data.team){
for(Building tile : data.cores){
ret.get(tile);
}
@@ -91,11 +91,6 @@ public class Teams{
return get(team).active();
}
/** Returns whether {@param other} is an enemy of {@param #team}. */
public boolean areEnemies(Team team, Team other){
return team != other;
}
public boolean canInteract(Team team, Team other){
return team == other || other == Team.derelict;
}
@@ -216,7 +211,7 @@ public class Teams{
Seq<Team> enemies = new Seq<>();
for(TeamData other : active){
if(areEnemies(data.team, other.team)){
if(data.team != other.team){
enemies.add(other.team);
}
}