/*******************************************************************************
* Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://robocode.sourceforge.net/license/epl-v10.html
*
* Contributors:
* Pavel Savara
* - Initial implementation
* Flemming N. Larsen
* - Javadocs
*******************************************************************************/
package robocode.control.events;
import robocode.BattleResults;
import robocode.BattleRules;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* A BattleCompletedEvent is sent to {@link IBattleListener#onBattleCompleted(BattleCompletedEvent)
* onBattleCompleted()} when the battle is completed successfully and results are available. This event
* will not occur if the battle is terminated or aborted by the user before the battle is completed.
*
* @see IBattleListener
* @see IBattleListener#onBattleCompleted(BattleCompletedEvent)
* @see BattleStartedEvent
* @see BattleFinishedEvent
*
* @author Pavel Savara (original)
* @author Flemming N. Larsen (contributor)
*
* @since 1.6.2
*/
public class BattleCompletedEvent extends BattleEvent {
private final BattleRules battleRules;
private final BattleResults[] results;
/**
* Called by the game to create a new BattleCompletedEvent.
* Please don't use this constructor as it might change.
*
* @param battleRules the rules that was used in the battle.
* @param results the indexed results of the battle. These are unsorted, but using robot indexes.
*/
public BattleCompletedEvent(BattleRules battleRules, BattleResults[] results) {
super();
this.battleRules = battleRules;
this.results = results;
}
/**
* Returns the rules used in the battle.
*
* @return the rules used in the battle.
*/
public BattleRules getBattleRules() {
return battleRules;
}
/**
* Returns the battle results sorted on score.
* Note that the robot index cannot be used to determine the score with the sorted results.
*
* @return an array of sorted BattleResults, where the results with the bigger score are placed first in the list.
* @see #getIndexedResults()
*/
public BattleResults[] getSortedResults() {
List<BattleResults> copy = new ArrayList<BattleResults>(Arrays.asList(results));
Collections.sort(copy);
Collections.reverse(copy);
return copy.toArray(new BattleResults[copy.size()]);
}
/**
* Returns the battle results that can be used to determine the score for the individual robot based
* on the robot index.
*
* @return an array of indexed BattleResults, where each index matches an index of a specific robot.
* @see #getSortedResults()
*/
public BattleResults[] getIndexedResults() {
BattleResults[] copy = new BattleResults[results.length];
System.arraycopy(results, 0, copy, 0, results.length);
return copy;
}
}