13
13
import games .strategy .engine .data .changefactory .ChangeFactory ;
14
14
import games .strategy .engine .delegate .AutoSave ;
15
15
import games .strategy .engine .delegate .IDelegateBridge ;
16
+ import games .strategy .engine .posted .game .pbem .PbemMessagePoster ;
16
17
import games .strategy .engine .random .IRandomStats .DiceType ;
17
18
import games .strategy .triplea .Constants ;
18
19
import games .strategy .triplea .Properties ;
@@ -80,7 +81,7 @@ private String createUnits(final IDelegateBridge bridge) {
80
81
final CompositeChange change = new CompositeChange ();
81
82
for (final Territory t : data .getMap ().getTerritories ()) {
82
83
final Collection <Unit > myCreators = CollectionUtils .getMatches (t .getUnits (), myCreatorsMatch );
83
- if (myCreators != null && !myCreators .isEmpty ()) {
84
+ if (!myCreators .isEmpty ()) {
84
85
final Collection <Unit > toAdd = new ArrayList <>();
85
86
final Collection <Unit > toAddSea = new ArrayList <>();
86
87
final Collection <Unit > toAddLand = new ArrayList <>();
@@ -89,62 +90,34 @@ private String createUnits(final IDelegateBridge bridge) {
89
90
final IntegerMap <UnitType > createsUnitsMap = ua .getCreatesUnitsList ();
90
91
final Collection <UnitType > willBeCreated = createsUnitsMap .keySet ();
91
92
for (final UnitType ut : willBeCreated ) {
92
- if (UnitAttachment .get (ut ).getIsSea () && Matches .territoryIsLand ().test (t )) {
93
+ final UnitAttachment uaToCreate = UnitAttachment .get (ut );
94
+ if (uaToCreate .getIsSea () && !t .isWater ()) {
93
95
toAddSea .addAll (ut .create (createsUnitsMap .getInt (ut ), player ));
94
- } else if (!UnitAttachment .get (ut ).getIsSea ()
95
- && !UnitAttachment .get (ut ).getIsAir ()
96
- && Matches .territoryIsWater ().test (t )) {
96
+ } else if (!uaToCreate .getIsSea () && !uaToCreate .getIsAir () && t .isWater ()) {
97
97
toAddLand .addAll (ut .create (createsUnitsMap .getInt (ut ), player ));
98
98
} else {
99
99
toAdd .addAll (ut .create (createsUnitsMap .getInt (ut ), player ));
100
100
}
101
101
}
102
102
}
103
103
if (!toAdd .isEmpty ()) {
104
- final String transcriptText =
105
- player .getName ()
106
- + " creates "
107
- + MyFormatter .unitsToTextNoOwner (toAdd )
108
- + " in "
109
- + t .getName ();
110
- bridge .getHistoryWriter ().startEvent (transcriptText , toAdd );
111
- endTurnReport .append (transcriptText ).append ("<br />" );
112
- final Change place = ChangeFactory .addUnits (t , toAdd );
113
- change .add (place );
104
+ createUnits (t , toAdd , change , endTurnReport );
114
105
}
115
106
if (!toAddSea .isEmpty ()) {
116
107
final Predicate <Territory > myTerrs = Matches .territoryIsWater ();
117
108
final Collection <Territory > waterNeighbors = data .getMap ().getNeighbors (t , myTerrs );
118
- if (waterNeighbors != null && !waterNeighbors .isEmpty ()) {
119
- final Territory tw = getRandomTerritory (waterNeighbors , bridge );
120
- final String transcriptText =
121
- player .getName ()
122
- + " creates "
123
- + MyFormatter .unitsToTextNoOwner (toAddSea )
124
- + " in "
125
- + tw .getName ();
126
- bridge .getHistoryWriter ().startEvent (transcriptText , toAddSea );
127
- endTurnReport .append (transcriptText ).append ("<br />" );
128
- final Change place = ChangeFactory .addUnits (tw , toAddSea );
129
- change .add (place );
109
+ if (!waterNeighbors .isEmpty ()) {
110
+ final Territory location = getRandomTerritory (data , waterNeighbors , bridge );
111
+ createUnits (location , toAddSea , change , endTurnReport );
130
112
}
131
113
}
132
114
if (!toAddLand .isEmpty ()) {
133
115
final Predicate <Territory > myTerrs =
134
116
Matches .isTerritoryOwnedBy (player ).and (Matches .territoryIsLand ());
135
117
final Collection <Territory > landNeighbors = data .getMap ().getNeighbors (t , myTerrs );
136
- if (landNeighbors != null && !landNeighbors .isEmpty ()) {
137
- final Territory tl = getRandomTerritory (landNeighbors , bridge );
138
- final String transcriptText =
139
- player .getName ()
140
- + " creates "
141
- + MyFormatter .unitsToTextNoOwner (toAddLand )
142
- + " in "
143
- + tl .getName ();
144
- bridge .getHistoryWriter ().startEvent (transcriptText , toAddLand );
145
- endTurnReport .append (transcriptText ).append ("<br />" );
146
- final Change place = ChangeFactory .addUnits (tl , toAddLand );
147
- change .add (place );
118
+ if (!landNeighbors .isEmpty ()) {
119
+ final Territory location = getRandomTerritory (data , landNeighbors , bridge );
120
+ createUnits (location , toAddLand , change , endTurnReport );
148
121
}
149
122
}
150
123
}
@@ -155,21 +128,35 @@ private String createUnits(final IDelegateBridge bridge) {
155
128
return endTurnReport .toString ();
156
129
}
157
130
131
+ private void createUnits (
132
+ final Territory location ,
133
+ Collection <Unit > units ,
134
+ CompositeChange change ,
135
+ StringBuilder endTurnReport ) {
136
+ final String transcriptText =
137
+ player .getName ()
138
+ + " creates "
139
+ + MyFormatter .unitsToTextNoOwner (units )
140
+ + " in "
141
+ + location .getName ();
142
+ bridge .getHistoryWriter ().startEvent (transcriptText , units );
143
+ endTurnReport .append (transcriptText ).append ("<br />" );
144
+ final Change place = ChangeFactory .addUnits (location , units );
145
+ change .add (place );
146
+ }
147
+
158
148
private static Territory getRandomTerritory (
159
- final Collection <Territory > territories , final IDelegateBridge bridge ) {
160
- if (territories == null || territories .isEmpty ()) {
161
- return null ;
162
- }
149
+ final GameState data , final Collection <Territory > territories , final IDelegateBridge bridge ) {
163
150
if (territories .size () == 1 ) {
164
151
return CollectionUtils .getAny (territories );
165
152
}
166
153
// there is an issue with maps that have lots of rolls without any pause between them: they are
167
- // causing the crypted
168
- // random source (ie: live and pbem games) to lock up or error out
169
- // so we need to slow them down a bit, until we come up with a better solution (like aggregating
170
- // all the chances
171
- // together, then getting a ton of random numbers at once instead of one at a time)
172
- Interruptibles . sleep ( 100 );
154
+ // causing the crypted random source (ie: live and pbem games) to lock up or error out so we
155
+ // need to slow them down a bit, until we come up with a better solution (like aggregating all
156
+ // the chances together, then getting a ton of random numbers at once instead of one at a time)
157
+ if ( PbemMessagePoster . gameDataHasPlayByEmailOrForumMessengers ( data )) {
158
+ Interruptibles . sleep ( 100 );
159
+ }
173
160
final List <Territory > list = new ArrayList <>(territories );
174
161
final int random =
175
162
// ZERO BASED
0 commit comments