public BotForce() { this.entityList = new ArrayList<Entity>(); try { behaviorSettings = BehaviorSettingsFactory.getInstance().DEFAULT_BEHAVIOR.getCopy(); } catch (PrincessException ex) { MekHQ.getLogger().log(getClass(), "BotForce()", LogLevel.ERROR, //$NON-NLS-1$ "Error getting Princess default behaviors"); //$NON-NLS-1$ MekHQ.getLogger().error(getClass(), "BotForce()", ex); //$NON-NLS-1$ } };
private boolean getPresetPrincessBehavior() { princessBehavior = behaviorSettingsFactory.getBehavior((String) princessBehaviorNames.getSelectedItem()); if (princessBehavior == null) { princessBehavior = new BehaviorSettings(); return false; } return true; }
/** * Initializes the {@link megamek.client.bot.princess.BehaviorSettings} cache. If the cache is empty, it will load from * mmconf/princessBehaviors.xml. Also, if the "DEFAULT behavior is missing, it will be added. * * @param reinitialize Set TRUE to force the cache to be completely rebuilt. */ public void init(boolean reinitialize) { synchronized (behaviorMap) { if (reinitialize) { behaviorMap.clear(); } if (behaviorMap.isEmpty()) { loadBehaviorSettings(buildPrincessBehaviorDoc()); } addDefaultBehaviors(); } }
addBehavior(behaviorSettings); getLogger().error(getClass(), METHOD_NAME, e); return false; } finally { addDefaultBehaviors();
init(false); if (!behaviorFile.exists()) { if (!behaviorFile.createNewFile()) { getLogger().log(BehaviorSettingsFactory.class, METHOD_NAME, LogLevel.ERROR, "Could not create " + PRINCESS_BEHAVIOR_PATH); getLogger().log(BehaviorSettingsFactory.class, METHOD_NAME, LogLevel.ERROR, "Could not write to " + PRINCESS_BEHAVIOR_PATH); getLogger().error(getClass(), METHOD_NAME, e); return false;
botClient = makeNewPrincessClient(target, verbosity, host, port); if (!StringUtil.isNullOrEmpty(configName)) { final BehaviorSettings behavior = BehaviorSettingsFactory.getInstance() .getBehavior(configName.toString()); if (null != behavior) { if (null != verbosity) { } else { results.add("Unrecognized Behavior Setting: '" + configName + "'. Using DEFAULT."); ((Princess) botClient).setBehaviorSettings(BehaviorSettingsFactory.getInstance().DEFAULT_BEHAVIOR); ((Princess) botClient).setBehaviorSettings(BehaviorSettingsFactory.getInstance().DEFAULT_BEHAVIOR);
@Test public void testLoadBehaviorSettings() throws IOException, SAXException, ParserConfigurationException { // Test loading a good behavior settings file. testFactory.behaviorMap.clear(); TestCase.assertTrue(testFactory.loadBehaviorSettings(buildTestDocument())); TestCase.assertEquals(5, testFactory.behaviorMap.size()); String[] expectedBehaviors = new String[] {BehaviorSettingsFactoryTestConstants.NM_RECKLESS, BehaviorSettingsFactoryTestConstants.NM_COWARDLY, BehaviorSettingsFactoryTestConstants.NM_ESCAPE, BehaviorSettingsFactoryTestConstants.NM_DEFAULT, BehaviorSettingsFactory.BERSERK_BEHAVIOR_DESCRIPTION}; TestCase.assertEquals(Sets.newSet(expectedBehaviors), Sets.newSet(testFactory.getBehaviorNames())); // Test loading a null behavior settings file. testFactory.behaviorMap.clear(); TestCase.assertFalse(testFactory.loadBehaviorSettings(null)); TestCase.assertEquals(4, testFactory.behaviorMap.size()); expectedBehaviors = new String[]{BehaviorSettingsFactory.BERSERK_BEHAVIOR_DESCRIPTION, BehaviorSettingsFactory.COWARDLY_BEHAVIOR_DESCRIPTION, BehaviorSettingsFactory.DEFAULT_BEHAVIOR_DESCRIPTION, BehaviorSettingsFactory.ESCAPE_BEHAVIOR_DESCRIPTION}; Assert.assertArrayEquals(expectedBehaviors, testFactory.getBehaviorNames()); } }
private Document buildPrincessBehaviorDoc() { final String METHOD_NAME = "buildPrincessBehaviorDoc()"; try { File behaviorFile = new File(PRINCESS_BEHAVIOR_PATH); if (!behaviorFile.exists() || !behaviorFile.isFile()) { getLogger().log(BehaviorSettingsFactory.class, "buildPrincessBehaviorDoc()", LogLevel.ERROR, "Could not load " + PRINCESS_BEHAVIOR_PATH); return null; } try(InputStream is = new FileInputStream(behaviorFile)) { return MegaMekXmlUtil.newSafeDocumentBuilder().parse(is); } } catch (Exception e) { getLogger().error(getClass(), METHOD_NAME, e); return null; } }
behaviorSettingsFactory.addBehavior(princessBehavior); behaviorSettingsFactory.saveBehaviorSettings(saveTargets);
princessBehaviorNames = new JComboBox<>(behaviorSettingsFactory.getBehaviorNames()); princessBehaviorNames.setSelectedItem(BehaviorSettingsFactory.DEFAULT_BEHAVIOR_DESCRIPTION); princessBehaviorNames.setToolTipText(Messages.getString("BotConfigDialog.behaviorToolTip"));
private BehaviorSettingsFactory() { init(true); }
private void addDefaultBehaviors() { if (!behaviorMap.keySet().contains(DEFAULT_BEHAVIOR_DESCRIPTION)) { addBehavior(DEFAULT_BEHAVIOR); } if (!behaviorMap.keySet().contains(BERSERK_BEHAVIOR.getDescription())) { addBehavior(BERSERK_BEHAVIOR); } if (!behaviorMap.keySet().contains(COWARDLY_BEHAVIOR.getDescription())) { addBehavior(COWARDLY_BEHAVIOR); } if (!behaviorMap.keySet().contains(ESCAPE_BEHAVIOR.getDescription())) { addBehavior(ESCAPE_BEHAVIOR); } }
BehaviorSettings newBehavior = BehaviorSettingsFactory.getInstance().getBehavior(behaviorName); if (newBehavior == null) { msg = "Behavior '" + behaviorName + "' does not exist.";
private BehaviorSettings buildEscapeBehavior() { try { BehaviorSettings escapeBehavior = new BehaviorSettings(); escapeBehavior.setDescription(ESCAPE_BEHAVIOR_DESCRIPTION); escapeBehavior.setDestinationEdge(CardinalEdge.NEAREST_OR_NONE); escapeBehavior.setRetreatEdge(CardinalEdge.NEAREST_OR_NONE); escapeBehavior.setForcedWithdrawal(true); escapeBehavior.setAutoFlee(true); escapeBehavior.setFallShameIndex(7); escapeBehavior.setHyperAggressionIndex(3); escapeBehavior.setSelfPreservationIndex(10); escapeBehavior.setHerdMentalityIndex(5); escapeBehavior.setBraveryIndex(2); return escapeBehavior; } catch (Exception e) { getLogger().error(BehaviorSettingsFactory.class, "buildEscapeBehavior", e); return null; } }
/** * @return an array of the names of all the {@link megamek.client.bot.princess.BehaviorSettings} in the cache. */ public String[] getBehaviorNames() { init(false); List<String> names; synchronized (behaviorMap) { names = new ArrayList<>(behaviorMap.keySet()); } Collections.sort(names); return names.toArray(new String[names.size()]); }
actual = testAddBotUtil.addBot(args, mockGame, mockClient.getHost(), mockClient.getPort()); TestCase.assertEquals(expected, actual); BehaviorSettings expectedBehavior = BehaviorSettingsFactory.getInstance().getBehavior("BERSERK"); TestCase.assertEquals(expectedBehavior, mockPrincess.getBehaviorSettings()); actual = testAddBotUtil.addBot(args, mockGame, mockClient.getHost(), mockClient.getPort()); TestCase.assertEquals(expected, actual); expectedBehavior = BehaviorSettingsFactory.getInstance().getBehavior("ESCAPE"); TestCase.assertEquals(expectedBehavior, mockPrincess.getBehaviorSettings()); actual = testAddBotUtil.addBot(args, mockGame, mockClient.getHost(), mockClient.getPort()); TestCase.assertEquals(expected, actual); expectedBehavior = BehaviorSettingsFactory.getInstance().getBehavior("DEFAULT"); TestCase.assertEquals(expectedBehavior, mockPrincess.getBehaviorSettings()); actual = testAddBotUtil.addBot(args, mockGame, mockClient.getHost(), mockClient.getPort()); TestCase.assertEquals(expected, actual); expectedBehavior = BehaviorSettingsFactory.getInstance().getBehavior("ESCAPE"); TestCase.assertEquals(expectedBehavior, mockPrincess.getBehaviorSettings()); actual = testAddBotUtil.addBot(args, mockGame, mockClient.getHost(), mockClient.getPort()); TestCase.assertEquals(expected, actual); expectedBehavior = BehaviorSettingsFactory.getInstance().getBehavior("DEFAULT"); TestCase.assertEquals(expectedBehavior, mockPrincess.getBehaviorSettings());
public BotForce(String name, int team, int start, int home, ArrayList<Entity> entityList, String camoCategory, String camoFileName, int colorIndex) { final String METHOD_NAME = "BotForce(String,int,int,int,ArrayList<Entity>,String,String,int)"; //$NON-NLS-1$ this.name = name; this.team = team; this.start = start; this.entityList = entityList; this.camoCategory = camoCategory; this.camoFileName = camoFileName; this.colorIndex = colorIndex; try { behaviorSettings = BehaviorSettingsFactory.getInstance().DEFAULT_BEHAVIOR.getCopy(); } catch (PrincessException ex) { MekHQ.getLogger().log(getClass(), METHOD_NAME, LogLevel.ERROR, "Error getting Princess default behaviors"); //$NON-NLS-1$ MekHQ.getLogger().error(getClass(), METHOD_NAME, ex); } behaviorSettings.setRetreatEdge(CardinalEdge.NEAREST_OR_NONE); behaviorSettings.setDestinationEdge(CardinalEdge.NEAREST_OR_NONE); }
private BehaviorSettings buildBerserkBehavior() { try { BehaviorSettings berserkBehavior = new BehaviorSettings(); berserkBehavior.setDescription(BERSERK_BEHAVIOR_DESCRIPTION); berserkBehavior.setDestinationEdge(CardinalEdge.NEAREST_OR_NONE); berserkBehavior.setRetreatEdge(CardinalEdge.NEAREST_OR_NONE); berserkBehavior.setForcedWithdrawal(false); berserkBehavior.setAutoFlee(false); berserkBehavior.setFallShameIndex(2); berserkBehavior.setHyperAggressionIndex(10); berserkBehavior.setSelfPreservationIndex(2); berserkBehavior.setHerdMentalityIndex(5); berserkBehavior.setBraveryIndex(9); return berserkBehavior; } catch (Exception e) { getLogger().error(BehaviorSettingsFactory.class, "buildBerserkBehavior", e); return null; } }
/** * Constructor - initializes a new instance of the Princess bot. * @param name The display name. * @param host The host address to which to connect. * @param port The port on the host where to connect. * @param verbosity The verbosity of the bot's reporting and logging. */ public Princess(final String name, final String host, final int port, final LogLevel verbosity) { super(name, host, port); getLogger().setLogLevel(LOGGING_CATEGORY, verbosity); setBehaviorSettings(BehaviorSettingsFactory.getInstance(getLogger()) .DEFAULT_BEHAVIOR); fireControlState = new FireControlState(); pathRankerState = new PathRankerState(); // Start-up precog now, so that it can instantiate its game instance, // and it will stay up-to date. precognition = new Precognition(this); precogThread = new Thread(precognition, "Princess-precognition (" + getName() + ")"); precogThread.start(); }
private BehaviorSettings buildCowardlyBehavior() { try { BehaviorSettings cowardlyBehavior = new BehaviorSettings(); cowardlyBehavior.setDescription(COWARDLY_BEHAVIOR_DESCRIPTION); cowardlyBehavior.setDestinationEdge(CardinalEdge.NEAREST_OR_NONE); cowardlyBehavior.setRetreatEdge(CardinalEdge.NEAREST_OR_NONE); cowardlyBehavior.setForcedWithdrawal(true); cowardlyBehavior.setAutoFlee(false); cowardlyBehavior.setFallShameIndex(8); cowardlyBehavior.setHyperAggressionIndex(1); cowardlyBehavior.setSelfPreservationIndex(10); cowardlyBehavior.setHerdMentalityIndex(8); cowardlyBehavior.setBraveryIndex(2); return cowardlyBehavior; } catch (Exception e) { getLogger().error(BehaviorSettingsFactory.class, "buildCowardlyBehavior", e); return null; } }