Further AI handling improvements.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3401 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -89,6 +89,13 @@ public class Table
|
||||
// make room for the maximum number of players
|
||||
occupants = new Name[_tconfig.getMaximumPlayers()];
|
||||
bodyOids = new int[occupants.length];
|
||||
|
||||
// fill in information on the AIs
|
||||
int acount = (config.ais == null) ? 0 : config.ais.length;
|
||||
for (int ii = 0; ii < acount; ii++) {
|
||||
// TODO: handle this naming business better
|
||||
occupants[ii] = new Name("AI " + (ii+1));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -265,8 +272,8 @@ public class Table
|
||||
*/
|
||||
public boolean isEmpty ()
|
||||
{
|
||||
for (int i = 0; i < occupants.length; i++) {
|
||||
if (occupants[i] != null) {
|
||||
for (int i = 0; i < bodyOids.length; i++) {
|
||||
if (bodyOids[i] != 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ public abstract class GameConfig extends PlaceConfig implements Cloneable
|
||||
* players should be null and slots with AIs should contain
|
||||
* configuration for those AIs. A null array indicates no use of AIs
|
||||
* at all. */
|
||||
public GameAI[] ais;
|
||||
public GameAI[] ais = new GameAI[0];
|
||||
|
||||
/**
|
||||
* Returns the message bundle identifier for the bundle that should be
|
||||
|
||||
@@ -87,8 +87,7 @@ public class GameManager extends PlaceManager
|
||||
}
|
||||
|
||||
// configure our AIs
|
||||
int aicount = (_gameconfig.ais == null) ? 0 : _gameconfig.ais.length;
|
||||
for (int ii = 0; ii < aicount; ii++) {
|
||||
for (int ii = 0; ii < _gameconfig.ais.length; ii++) {
|
||||
if (_gameconfig.ais[ii] != null) {
|
||||
setAI(ii, _gameconfig.ais[ii]);
|
||||
}
|
||||
@@ -446,8 +445,8 @@ public class GameManager extends PlaceManager
|
||||
// let the players of this game know that we're ready to roll (if
|
||||
// we have a specific set of players)
|
||||
for (int ii = 0; ii < getPlayerSlots(); ii++) {
|
||||
// skip non-existent players
|
||||
if (!_gameobj.isOccupiedPlayer(ii)) {
|
||||
// skip non-existent players and AIs
|
||||
if (!_gameobj.isOccupiedPlayer(ii) || isAI(ii)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -116,9 +116,10 @@ public class TableManager
|
||||
// create a brand spanking new table
|
||||
Table table = new Table(_plobj.getOid(), config);
|
||||
|
||||
// stick the creator into position zero
|
||||
// stick the creator into the first non-AI position
|
||||
int cpos = (config.ais == null) ? 0 : config.ais.length;
|
||||
String error =
|
||||
table.setOccupant(0, creator.username, creator.getOid());
|
||||
table.setOccupant(cpos, creator.username, creator.getOid());
|
||||
if (error != null) {
|
||||
Log.warning("Unable to add creator to position zero of " +
|
||||
"table!? [table=" + table + ", creator=" + creator +
|
||||
@@ -275,9 +276,9 @@ public class TableManager
|
||||
};
|
||||
try {
|
||||
CrowdServer.plreg.createPlace(table.config, obs);
|
||||
} catch (InstantiationException ie) {
|
||||
} catch (Throwable t) {
|
||||
Log.warning("Failed to create manager for game " +
|
||||
"[config=" + table.config + "]: " + ie);
|
||||
"[config=" + table.config + "]: " + t);
|
||||
throw new InvocationException(INTERNAL_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user