/** * */ package rampancy.standard; import java.util.Arrays; import rampancy.util.*; import rampancy.util.data.segmentArray.RLeafSegment; import rampancy.util.data.segmentTree.RSTNode; import rampancy.util.movement.RMovementStatistic; import rampancy.util.wave.REnemyWave; import robocode.util.Utils; /** * @author Matthew Chun-Lum * */ public class RDefaultMovementStatistic implements RMovementStatistic { public static final int STANDARD_ROLL_DEPTH = 10; private RDefaultSegmentTree segmentTree; public RDefaultMovementStatistic() { segmentTree = new RDefaultSegmentTree(); } /* (non-Javadoc) * @see rampancy_v2.util.RMovementStatistic#getDanger(rampancy_v2.util.REnemyWave, rampancy_v2.util.RPoint) */ public double getDanger(REnemyWave wave, RPoint location) { // TODO Auto-generated method stub return 0; } /* (non-Javadoc) * @see rampancy_v2.util.RMovementStatistic#getSafestGuessFactor(rampancy_v2.util.REnemyWave) */ public double getSafestGuessFactor(REnemyWave wave) { RSTNode leaf = segmentTree.getSegmentForState(wave.getTargetState()); double[] guessFactors = leaf.getGuessFactors(); int lowestIndex = RUtil.indexOfSmallest(guessFactors); int offset = lowestIndex - guessFactors.length / 2; double factor = (double) offset / (double) ((guessFactors.length - 1) / 2); return factor; } /** * @param wave * @return a reference to the guess factor array specified by this wave */ public double[] getGuessFactorArray(REnemyWave wave) { return segmentTree.getSegmentForState(wave.getTargetState()).getGuessFactors(); } /* (non-Javadoc) * @see rampancy_v2.util.RMovementStatistic#noteHitByBullet(rampancy_v2.util.REnemyWave) */ public void noteHitByBullet(REnemyWave wave, RPoint hitLocation) { double factorRaw = wave.computeRawFactor(hitLocation); int guessFactorIndex = (int) RUtil.limit(0, (factorRaw * ((RDefaultSurfingSegmentArray.NUM_GUESS_FACTORS - 1) / 2)) + ((RDefaultSurfingSegmentArray.NUM_GUESS_FACTORS - 1) / 2), RDefaultSurfingSegmentArray.NUM_GUESS_FACTORS - 1); RSTNode leaf = segmentTree.getSegmentForState(wave.getTargetState()); RSTNode.updateGuessFactors(leaf, guessFactorIndex, 2.0, STANDARD_ROLL_DEPTH); } }