Skip to content

Commit c3b6c3d

Browse files
authored
Merge pull request #6567 from goron111/bug-negative-temporaryPrisonerCapacity
Issue 6560: Fix for negative temporary prisoner capacity
2 parents 60fec35 + 0d4959b commit c3b6c3d

File tree

3 files changed

+17
-4
lines changed

3 files changed

+17
-4
lines changed

MekHQ/src/mekhq/campaign/Campaign.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -6407,7 +6407,7 @@ public int getTemporaryPrisonerCapacity() {
64076407
}
64086408

64096409
public void setTemporaryPrisonerCapacity(int temporaryPrisonerCapacity) {
6410-
this.temporaryPrisonerCapacity = temporaryPrisonerCapacity;
6410+
this.temporaryPrisonerCapacity = max(PrisonerEventManager.MINIMUM_TEMPORARY_CAPACITY, temporaryPrisonerCapacity);
64116411
}
64126412

64136413
public RandomEventLibraries getRandomEventLibraries() {

MekHQ/src/mekhq/campaign/randomEvents/prisoners/PrisonerEventManager.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
*/
2828
package mekhq.campaign.randomEvents.prisoners;
2929

30+
import static java.lang.Math.abs;
3031
import static java.lang.Math.max;
3132
import static java.lang.Math.min;
3233
import static java.lang.Math.round;
@@ -91,6 +92,9 @@ public class PrisonerEventManager {
9192
private final int RESPONSE_TARGET_NUMBER = 7;
9293

9394
public static final int DEFAULT_TEMPORARY_CAPACITY = 100;
95+
// The temporary prisoner capacity should never go below 0.
96+
// But the security forces should be able to guard some prisoners in all cases
97+
public static final int MINIMUM_TEMPORARY_CAPACITY = 25;
9498
public static final double TEMPORARY_CAPACITY_DEGRADE_RATE = 0.1;
9599

96100
// These values are based on CamOps. CamOps states a squad of CI or one squad of BA can
@@ -175,7 +179,8 @@ int degradeTemporaryCapacity() {
175179
int newCapacity = 0;
176180

177181
if (temporaryCapacityModifier != DEFAULT_TEMPORARY_CAPACITY) {
178-
int degreeOfChange = (int) round(temporaryCapacityModifier * TEMPORARY_CAPACITY_DEGRADE_RATE);
182+
double differendInTemporaryCapacity = (double) abs(DEFAULT_TEMPORARY_CAPACITY-temporaryCapacityModifier);
183+
int degreeOfChange = max(1,(int) round(differendInTemporaryCapacity * TEMPORARY_CAPACITY_DEGRADE_RATE));
179184

180185
if (temporaryCapacityModifier < DEFAULT_TEMPORARY_CAPACITY) {
181186
temporaryCapacityModifier += degreeOfChange;

MekHQ/unittests/mekhq/campaign/randomEvents/prisoners/PrisonerEventManagerTest.java

+10-2
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,15 @@
2727
*/
2828
package mekhq.campaign.randomEvents.prisoners;
2929

30+
import static java.lang.Math.abs;
3031
import static java.lang.Math.max;
3132
import static java.lang.Math.min;
3233
import static java.lang.Math.round;
3334
import static mekhq.campaign.mission.enums.AtBMoraleLevel.STALEMATE;
3435
import static mekhq.campaign.randomEvents.prisoners.PrisonerEventManager.DEFAULT_TEMPORARY_CAPACITY;
3536
import static mekhq.campaign.randomEvents.prisoners.PrisonerEventManager.TEMPORARY_CAPACITY_DEGRADE_RATE;
3637
import static org.junit.jupiter.api.Assertions.assertEquals;
38+
import static org.junit.jupiter.api.Assertions.assertNotEquals;
3739
import static org.junit.jupiter.api.Assertions.assertFalse;
3840
import static org.junit.jupiter.api.Assertions.assertTrue;
3941
import static org.mockito.Mockito.mock;
@@ -78,11 +80,13 @@ void testDegradeTemporaryCapacity_DegradeDownTowardsDefault() {
7880
// Act
7981
int actualValue = eventManager.degradeTemporaryCapacity();
8082

81-
int degreeOfChange = (int) round(INITIAL_TEMPORARY_CAPACITY * TEMPORARY_CAPACITY_DEGRADE_RATE);
83+
int differendInTemporaryCapacity = abs(DEFAULT_TEMPORARY_CAPACITY-INITIAL_TEMPORARY_CAPACITY);
84+
int degreeOfChange = (int) max(1,round(differendInTemporaryCapacity * TEMPORARY_CAPACITY_DEGRADE_RATE));
8285
int expectedValue = max(DEFAULT_TEMPORARY_CAPACITY, INITIAL_TEMPORARY_CAPACITY - degreeOfChange);
8386

8487
// Assert
8588
assertEquals(expectedValue, actualValue);
89+
assertNotEquals(INITIAL_TEMPORARY_CAPACITY, actualValue);
8690
}
8791

8892
@Test
@@ -107,6 +111,7 @@ void testDegradeTemporaryCapacity_DegradeDownTowardsDefault_ResultBelowDefault()
107111

108112
// Assert
109113
assertEquals(expectedValue, actualValue);
114+
assertNotEquals(INITIAL_TEMPORARY_CAPACITY, actualValue);
110115
}
111116

112117
@Test
@@ -128,11 +133,13 @@ void testDegradeTemporaryCapacity_DegradeUpTowardsDefault() {
128133
// Act
129134
int actualValue = eventManager.degradeTemporaryCapacity();
130135

131-
int degreeOfChange = (int) round(INITIAL_TEMPORARY_CAPACITY * TEMPORARY_CAPACITY_DEGRADE_RATE);
136+
int differendInTemporaryCapacity = abs(DEFAULT_TEMPORARY_CAPACITY-INITIAL_TEMPORARY_CAPACITY);
137+
int degreeOfChange = (int) max(1,round(differendInTemporaryCapacity * TEMPORARY_CAPACITY_DEGRADE_RATE));
132138
int expectedValue = min(DEFAULT_TEMPORARY_CAPACITY, INITIAL_TEMPORARY_CAPACITY + degreeOfChange);
133139

134140
// Assert
135141
assertEquals(expectedValue, actualValue);
142+
assertNotEquals(INITIAL_TEMPORARY_CAPACITY, actualValue);
136143
}
137144

138145
@Test
@@ -157,6 +164,7 @@ void testDegradeTemporaryCapacity_DegradeUpTowardsDefault_ResultAboveDefault() {
157164

158165
// Assert
159166
assertEquals(expectedValue, actualValue);
167+
assertNotEquals(INITIAL_TEMPORARY_CAPACITY, actualValue);
160168
}
161169

162170
@Test

0 commit comments

Comments
 (0)