Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

detect units given to other players #1318

Merged
merged 2 commits into from
Oct 26, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 53 additions & 44 deletions MekHQ/src/mekhq/campaign/ResolveScenarioTracker.java
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public ResolveScenarioTracker(Scenario s, Campaign c, boolean ctrl) {
unitsStatus = new Hashtable<>();
salvageStatus = new Hashtable<>();
potentialSalvage = new ArrayList<>();
alliedUnits = new ArrayList<>(); // TODO: Make some use of this?
alliedUnits = new ArrayList<>();
actualSalvage = new ArrayList<>();
leftoverSalvage = new ArrayList<>();
devastatedEnemyUnits = new ArrayList<>();
Expand Down Expand Up @@ -186,15 +186,13 @@ public void processGame() {
entities.put(UUID.fromString(e.getExternalIdAsString()), e);

checkForLostLimbs(e, control);
if(e.getOwnerId() == pid) {
if(e.getOwnerId() == pid || e.getOwner().getTeam() == team) {
if(!e.getExternalIdAsString().equals("-1")) {
UnitStatus status = unitsStatus.get(UUID.fromString(e.getExternalIdAsString()));
if (null == status && scenario instanceof AtBScenario) {
TestUnit nu = generateNewTestUnit(e);
status = new UnitStatus(nu);
unitsStatus.put(nu.getId(), status);
alliedUnits.add(nu);
status = processAlliedUnit(e);
}

if(null != status) {
boolean lost = (!e.canEscape() && !control) || e.getRemovalCondition() == IEntityRemovalConditions.REMOVE_DEVASTATED;
status.assignFoundEntity(e, lost);
Expand All @@ -210,13 +208,6 @@ public void processGame() {
}
}
}
} else if(e.getOwner().getTeam() == team) {
TestUnit nu = generateNewTestUnit(e);
UnitStatus status = new UnitStatus(nu);
unitsStatus.put(nu.getId(), status);
alliedUnits.add(nu);
boolean lost = (!e.canEscape() && !control) || e.getRemovalCondition() == IEntityRemovalConditions.REMOVE_DEVASTATED;
status.assignFoundEntity(e, lost);
} else if(e.getOwner().isEnemyOf(client.getLocalPlayer())) {
if(control) {
// Kill credit automatically assigned only if they can't escape
Expand Down Expand Up @@ -260,18 +251,18 @@ public void processGame() {

entities.put(UUID.fromString(e.getExternalIdAsString()), e);

if(e.getOwnerId() == pid) {
if(e.getOwnerId() == pid || e.getOwner().getTeam() == team) {
if(!e.getExternalIdAsString().equals("-1")) {
UnitStatus status = unitsStatus.get(UUID.fromString(e.getExternalIdAsString()));

if (null == status && scenario instanceof AtBScenario) {
status = processAlliedUnit(e);
}

if(null != status) {
status.assignFoundEntity(e, true);
}
}
} else if(e.getOwner().getTeam() == team) {
TestUnit nu = generateNewTestUnit(e);
UnitStatus us = new UnitStatus(nu);
unitsStatus.put(nu.getId(), us);
alliedUnits.add(nu);
} else {
Entity killer = victoryEvent.getEntity(e.getKillerId());
if(null != killer && killer.getOwnerId() == pid) {
Expand All @@ -294,15 +285,13 @@ public void processGame() {
entities.put(UUID.fromString(e.getExternalIdAsString()), e);

checkForLostLimbs(e, control);
if(e.getOwnerId() == pid) {
if(e.getOwnerId() == pid || e.getOwner().getTeam() == team) {
if(!e.getExternalIdAsString().equals("-1")) {
UnitStatus status = unitsStatus.get(UUID.fromString(e.getExternalIdAsString()));
if (null == status && scenario instanceof AtBScenario) {
TestUnit nu = generateNewTestUnit(e);
status = new UnitStatus(nu);
unitsStatus.put(nu.getId(), status);
alliedUnits.add(nu);
status = processAlliedUnit(e);
}

if(null != status) {
status.assignFoundEntity(e, false);
}
Expand All @@ -315,11 +304,6 @@ public void processGame() {
}
}
}
} else if(e.getOwner().getTeam() == team) {
TestUnit nu = generateNewTestUnit(e);
UnitStatus us = new UnitStatus(nu);
unitsStatus.put(nu.getId(), us);
alliedUnits.add(nu);
}
}

Expand All @@ -334,9 +318,14 @@ public void processGame() {
entities.put(UUID.fromString(e.getExternalIdAsString()), e);

checkForLostLimbs(e, control);
if(e.getOwnerId() == pid) {
if(e.getOwnerId() == pid || e.getOwner().getTeam() == team) {
if(!e.getExternalIdAsString().equals("-1")) {
UnitStatus status = unitsStatus.get(UUID.fromString(e.getExternalIdAsString()));

if (null == status && scenario instanceof AtBScenario) {
status = processAlliedUnit(e);
}

if(null != status) {
status.assignFoundEntity(e, !control);
if(e instanceof EjectedCrew) {
Expand All @@ -358,11 +347,6 @@ public void processGame() {
}
}
}
} else if(e.getOwner().getTeam() == team) {
TestUnit nu = generateNewTestUnit(e);
UnitStatus us = new UnitStatus(nu);
unitsStatus.put(nu.getId(), us);
alliedUnits.add(nu);
} else if(e.getOwner().isEnemyOf(client.getLocalPlayer())) {
Entity killer = victoryEvent.getEntity(e.getKillerId());
if(null != killer && killer.getOwnerId() == pid) {
Expand All @@ -386,6 +370,15 @@ public void processGame() {
}
checkStatusOfPersonnel();
}

private UnitStatus processAlliedUnit(Entity e) {
TestUnit nu = generateNewTestUnit(e);
UnitStatus us = new UnitStatus(nu);
unitsStatus.put(nu.getId(), us);
alliedUnits.add(nu);

return us;
}

/**
* This checks whether an entity has any blown off limbs. If the battlefield
Expand Down Expand Up @@ -892,16 +885,15 @@ private void loadUnitsAndPilots(File unitFile) throws IOException {
if(!e.getExternalIdAsString().equals("-1")) {
UnitStatus status = unitsStatus.get(UUID.fromString(e.getExternalIdAsString()));
if (null == status && scenario instanceof AtBScenario && !(e instanceof EjectedCrew)) {
TestUnit nu = generateNewTestUnit(e);
status = new UnitStatus(nu);
unitsStatus.put(nu.getId(), status);
alliedUnits.add(nu);
status = processAlliedUnit(e);
}

if(null != status) {
boolean lost = (!e.canEscape() && !control) || e.getRemovalCondition() == IEntityRemovalConditions.REMOVE_DEVASTATED;
status.assignFoundEntity(e, lost);
}
}

if(null != e.getCrew()) {
if(!e.getCrew().getExternalIdAsString().equals("-1")) {
if(!e.getCrew().isEjected() || e instanceof EjectedCrew) {
Expand All @@ -920,12 +912,10 @@ private void loadUnitsAndPilots(File unitFile) throws IOException {
checkForLostLimbs(e, control);
if(!e.getExternalIdAsString().equals("-1")) {
UnitStatus status = unitsStatus.get(UUID.fromString(e.getExternalIdAsString()));
if (null == status) {
TestUnit nu = generateNewTestUnit(e);
status = new UnitStatus(nu);
unitsStatus.put(nu.getId(), status);
alliedUnits.add(nu);
if (null == status && scenario instanceof AtBScenario && !(e instanceof EjectedCrew)) {
status = processAlliedUnit(e);
}

if(null != status) {
boolean lost = (!e.canEscape() && !control) || e.getRemovalCondition() == IEntityRemovalConditions.REMOVE_DEVASTATED;
status.assignFoundEntity(e, lost);
Expand Down Expand Up @@ -1001,6 +991,25 @@ private void loadUnitsAndPilots(File unitFile) throws IOException {
}

for(Entity e : parser.getRetreated()) {
if(!e.getExternalIdAsString().equals("-1")) {
UnitStatus status = unitsStatus.get(UUID.fromString(e.getExternalIdAsString()));
if (null == status && scenario instanceof AtBScenario) {
status = processAlliedUnit(e);
}

if(null != status) {
status.assignFoundEntity(e, false);
}
}
if(null != e.getCrew()) {
if(!e.getCrew().getExternalIdAsString().equals("-1")) {
pilots.put(UUID.fromString(e.getCrew().getExternalIdAsString()), e.getCrew());
if(e instanceof EjectedCrew) {
ejections.put(UUID.fromString(e.getCrew().getExternalIdAsString()), (EjectedCrew)e);
}
}
}

entities.put(UUID.fromString(e.getExternalIdAsString()), e);
}
}
Expand Down
3 changes: 2 additions & 1 deletion MekHQ/src/mekhq/campaign/mission/ScenarioObjective.java
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,8 @@ public String getTimeLimitString() {
*/
public String toShortString() {
String timeLimitString = getTimeLimitString();
String edgeString = getDestinationEdge() != OffBoardDirection.NONE ? getDestinationEdge().toString() : "";
String edgeString = ((getDestinationEdge() != OffBoardDirection.NONE) &&
(getDestinationEdge() != null)) ? getDestinationEdge().toString() : "";
String amountString = fixedAmount != null ? fixedAmount.toString() : String.format("%d%%", percentage);

switch(getObjectiveCriterion()) {
Expand Down