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:
Michael Bayne
2005-03-12 10:08:02 +00:00
parent 787d4f1fe5
commit f2a9f7ed0d
4 changed files with 18 additions and 11 deletions
@@ -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);
}
}