<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://robowiki.net/w/index.php?action=history&amp;feed=atom&amp;title=Gouldingi%2FCode</id>
	<title>Gouldingi/Code - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://robowiki.net/w/index.php?action=history&amp;feed=atom&amp;title=Gouldingi%2FCode"/>
	<link rel="alternate" type="text/html" href="http://robowiki.net/w/index.php?title=Gouldingi/Code&amp;action=history"/>
	<updated>2026-04-29T08:54:27Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://robowiki.net/w/index.php?title=Gouldingi/Code&amp;diff=16768&amp;oldid=prev</id>
		<title>RednaxelaBot: Using &lt;syntaxhighlight&gt;.</title>
		<link rel="alternate" type="text/html" href="http://robowiki.net/w/index.php?title=Gouldingi/Code&amp;diff=16768&amp;oldid=prev"/>
		<updated>2010-07-01T08:28:03Z</updated>

		<summary type="html">&lt;p&gt;Using &amp;lt;syntaxhighlight&amp;gt;.&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 08:28, 1 July 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l10&quot; &gt;Line 10:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 10:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Code Size|Code size]]: ''1442''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Code Size|Code size]]: ''1442''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;syntaxhighlight&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;package pez.mini;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;package pez.mini;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import robocode.*;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import robocode.*;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l232&quot; &gt;Line 232:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 232:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;syntaxhighlight&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Source Code]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Source Code]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>RednaxelaBot</name></author>
		
	</entry>
	<entry>
		<id>http://robowiki.net/w/index.php?title=Gouldingi/Code&amp;diff=7869&amp;oldid=prev</id>
		<title>Voidious: migrating from old wiki</title>
		<link rel="alternate" type="text/html" href="http://robowiki.net/w/index.php?title=Gouldingi/Code&amp;diff=7869&amp;oldid=prev"/>
		<updated>2009-05-31T04:20:14Z</updated>

		<summary type="html">&lt;p&gt;migrating from old wiki&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Navbox small&lt;br /&gt;
| title        = Gouldingi Sub-pages&lt;br /&gt;
| parent       = Gouldingi&lt;br /&gt;
| page1        = Version History&lt;br /&gt;
| page2        = Code&lt;br /&gt;
| page3        = Archived Talk 20030814&lt;br /&gt;
}}&lt;br /&gt;
----&lt;br /&gt;
The full source code of a bot that for a second was #6 on [[Eternal Rumble]] [[One on One]]. For the moment it's #11.&lt;br /&gt;
&lt;br /&gt;
* [[Code Size|Code size]]: ''1442''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package pez.mini;&lt;br /&gt;
import robocode.*;&lt;br /&gt;
import java.awt.geom.*;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
&lt;br /&gt;
// Gouldingi, by PEZ. Small, hard to catch and sharp teeth.&lt;br /&gt;
//&lt;br /&gt;
// Gouldingi is open source under GPL-like conditions. Meaning you can use&lt;br /&gt;
// the code. Meaning you should feel obliged to share any improvements you do&lt;br /&gt;
// to the code. Meaning you must release your bots code if you directly use this&lt;br /&gt;
// code.&lt;br /&gt;
//&lt;br /&gt;
// Home page of this bot is: http://robowiki.dyndns.org/?Gouldingi&lt;br /&gt;
// The code should be available there and it is also the place for you to share any&lt;br /&gt;
// code improvements.&lt;br /&gt;
//&lt;br /&gt;
// $Id: Gouldingi.java,v 1.9 2003/04/18 10:08:30 peter Exp $&lt;br /&gt;
&lt;br /&gt;
public class Gouldingi extends AdvancedRobot {&lt;br /&gt;
    private static Point2D location = new Point2D.Double();&lt;br /&gt;
    private static Point2D oldLocation = new Point2D.Double();&lt;br /&gt;
    private static Point2D enemyLocation = new Point2D.Double();&lt;br /&gt;
    private static Point2D oldEnemyLocation = new Point2D.Double();&lt;br /&gt;
    private static Rectangle2D fieldRectangle;&lt;br /&gt;
    private static double guessedHeading;&lt;br /&gt;
    private static double enemyDistance;&lt;br /&gt;
    private static double enemyEnergy;&lt;br /&gt;
    private static double absoluteBearing;&lt;br /&gt;
    private static double deltaBearing;&lt;br /&gt;
    private static double meanOffsetFactor;&lt;br /&gt;
    private static double meanAimFactorLeft;&lt;br /&gt;
    private static double meanAimFactorStraight;&lt;br /&gt;
    private static double meanAimFactorRight;&lt;br /&gt;
    private static double velocity;&lt;br /&gt;
&lt;br /&gt;
    public void run() {&lt;br /&gt;
        fieldRectangle = new Rectangle2D.Double(0, 0 , getBattleFieldWidth(), getBattleFieldHeight());&lt;br /&gt;
        setColors(Color.gray, Color.yellow, Color.black);&lt;br /&gt;
        setAdjustGunForRobotTurn(true);&lt;br /&gt;
        setAdjustRadarForGunTurn(true);&lt;br /&gt;
        turnRadarRightRadians(Double.POSITIVE_INFINITY); &lt;br /&gt;
&lt;br /&gt;
        while (true) {&lt;br /&gt;
            if (Math.random() &amp;lt; 0.05) {&lt;br /&gt;
                velocity = Math.min(8, Math.random() * 24);&lt;br /&gt;
            }&lt;br /&gt;
            setMaxVelocity(Math.abs(getTurnRemaining()) &amp;gt; 45 ? 0.1 : velocity);&lt;br /&gt;
            if (getOthers() == 0) {&lt;br /&gt;
                moveRandomly();&lt;br /&gt;
            }&lt;br /&gt;
            execute();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void onScannedRobot(ScannedRobotEvent e) {&lt;br /&gt;
        oldLocation.setLocation(location);&lt;br /&gt;
        location.setLocation(getX(), getY());&lt;br /&gt;
        oldEnemyLocation.setLocation(enemyLocation);&lt;br /&gt;
        absoluteBearing = getHeading() + e.getBearing();&lt;br /&gt;
        enemyEnergy = e.getEnergy();&lt;br /&gt;
        enemyDistance = e.getDistance();&lt;br /&gt;
        toLocation(absoluteBearing, enemyDistance, location, enemyLocation);&lt;br /&gt;
        deltaBearing = normalRelativeAngle(absoluteBearing(oldLocation, enemyLocation) -&lt;br /&gt;
            absoluteBearing(oldLocation, oldEnemyLocation));&lt;br /&gt;
        aimGun();&lt;br /&gt;
        moveRandomly();&lt;br /&gt;
        if (enemyEnergy &amp;gt; 0 &amp;amp;&amp;amp; (getEnergy() &amp;gt; 0.2 || enemyDistance &amp;lt; 150)) {&lt;br /&gt;
            Bullet bullet = setFireBullet(bulletPower(enemyEnergy));&lt;br /&gt;
            if (bullet != null) {&lt;br /&gt;
                addCustomEvent(new CheckUpdateFactors(bullet));&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        setTurnRadarLeftRadians(getRadarTurnRemaining()); &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private void moveRandomly() {&lt;br /&gt;
        if (Math.abs(getDistanceRemaining()) &amp;lt; Math.random() * 50) {&lt;br /&gt;
            Point2D dLocation = new Point2D.Double();&lt;br /&gt;
            double relativeAngle = -36 + 72 * Math.random();&lt;br /&gt;
            double distanceExtra = 3;&lt;br /&gt;
            double angle = absoluteBearing + 180 + relativeAngle;&lt;br /&gt;
            if (isCornered() || enemyDistance &amp;gt; 600) {&lt;br /&gt;
                distanceExtra = -1;&lt;br /&gt;
            }&lt;br /&gt;
            if (enemyEnergy == 0 &amp;amp;&amp;amp; getOthers() == 1) {&lt;br /&gt;
                distanceExtra = -10;&lt;br /&gt;
            }&lt;br /&gt;
            distanceExtra *= Math.abs(relativeAngle);&lt;br /&gt;
            toLocation(angle, enemyDistance + distanceExtra, enemyLocation, dLocation);&lt;br /&gt;
            if (!fieldRectangle.contains(dLocation)) {&lt;br /&gt;
                angle = absoluteBearing + 180 - relativeAngle;&lt;br /&gt;
                toLocation(angle, enemyDistance + distanceExtra, enemyLocation, dLocation);&lt;br /&gt;
            }&lt;br /&gt;
            translateInsideField(dLocation, 35);&lt;br /&gt;
            goTo(dLocation);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private double bulletPower(double enemyEnergy) {&lt;br /&gt;
        double power = 3;&lt;br /&gt;
        power = Math.min(enemyEnergy / 4, power);&lt;br /&gt;
        power = Math.min(getEnergy() / 3, power);&lt;br /&gt;
        return power;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private void aimGun() {&lt;br /&gt;
        double guessedDistance = location.distance(enemyLocation);&lt;br /&gt;
        double meanAimFactor = meanAimFactorStraight;&lt;br /&gt;
        if (deltaBearing &amp;lt; -0.3) {&lt;br /&gt;
            meanAimFactor = meanAimFactorLeft;&lt;br /&gt;
        }&lt;br /&gt;
        else if (deltaBearing &amp;gt; 0.3) {&lt;br /&gt;
            meanAimFactor = meanAimFactorRight;&lt;br /&gt;
        }&lt;br /&gt;
        guessedHeading = absoluteBearing(location, enemyLocation);&lt;br /&gt;
        if (Math.abs(deltaBearing) &amp;gt; 0.05) {&lt;br /&gt;
            guessedHeading += deltaBearing * meanAimFactor;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            guessedHeading += meanOffsetFactor;&lt;br /&gt;
        }&lt;br /&gt;
        Point2D impactLocation = new Point2D.Double();&lt;br /&gt;
        toLocation(guessedHeading, guessedDistance, location, impactLocation);&lt;br /&gt;
        translateInsideField(impactLocation, 1);&lt;br /&gt;
        guessedHeading = absoluteBearing(location, impactLocation);&lt;br /&gt;
        setTurnGunRight(normalRelativeAngle(guessedHeading - getGunHeading()));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private void goTo(Point2D point) {&lt;br /&gt;
        double distance = location.distance(point);&lt;br /&gt;
        double angle = normalRelativeAngle(absoluteBearing(location, point) - getHeading());&lt;br /&gt;
        if (Math.abs(angle) &amp;gt; 90) {&lt;br /&gt;
            distance *= -1;&lt;br /&gt;
            if (angle &amp;gt; 0) {&lt;br /&gt;
                angle -= 180;&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                angle += 180;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        setTurnRight(angle);&lt;br /&gt;
        setAhead(distance);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private boolean isCornered() {&lt;br /&gt;
        double m = 100;&lt;br /&gt;
        double mnX = m;&lt;br /&gt;
        double mnY = m;&lt;br /&gt;
        double mxX = fieldRectangle.getWidth() - m;&lt;br /&gt;
        double mxY = fieldRectangle.getHeight() - m;&lt;br /&gt;
        double x = location.getX();&lt;br /&gt;
        double y = location.getY();&lt;br /&gt;
        return ((x &amp;lt; mnX &amp;amp;&amp;amp; (y &amp;lt; mnY || y &amp;gt; mxY)) || (x &amp;gt; mxX &amp;amp;&amp;amp; (y &amp;lt; mnY || y &amp;gt; mxY)));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private void translateInsideField(Point2D point, double margin) {&lt;br /&gt;
        point.setLocation(Math.max(margin, Math.min(fieldRectangle.getWidth() - margin, point.getX())),&lt;br /&gt;
                          Math.max(margin, Math.min(fieldRectangle.getHeight() - margin, point.getY())));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private void toLocation(double angle, double length, Point2D sourceLocation, Point2D targetLocation) {&lt;br /&gt;
        targetLocation.setLocation(sourceLocation.getX() + Math.sin(Math.toRadians(angle)) * length,&lt;br /&gt;
                                   sourceLocation.getY() + Math.cos(Math.toRadians(angle)) * length);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private double absoluteBearing(Point2D source, Point2D target) {&lt;br /&gt;
        return Math.toDegrees(Math.atan2(target.getX() - source.getX(), target.getY() - source.getY()));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private double normalRelativeAngle(double angle) {&lt;br /&gt;
        angle = Math.toRadians(angle);&lt;br /&gt;
        return Math.toDegrees(Math.atan2(Math.sin(angle), Math.cos(angle))); &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public double rollingAvg(double value, double newEntry, double n, double weighting ) {&lt;br /&gt;
        return (value * n + newEntry * weighting)/(n + weighting);&lt;br /&gt;
    } &lt;br /&gt;
&lt;br /&gt;
    class CheckUpdateFactors extends Condition {&lt;br /&gt;
        private long time;&lt;br /&gt;
        private double bulletVelocity;&lt;br /&gt;
        private double bulletPower;&lt;br /&gt;
        private double bearingDelta;&lt;br /&gt;
        private Point2D oldRLocation = new Point2D.Double();&lt;br /&gt;
        private Point2D oldELocation = new Point2D.Double();&lt;br /&gt;
        private double oldBearing;&lt;br /&gt;
&lt;br /&gt;
        public CheckUpdateFactors(Bullet bullet) {&lt;br /&gt;
            this.time = getTime();&lt;br /&gt;
            this.bulletVelocity = bullet.getVelocity();&lt;br /&gt;
            this.bulletPower = bullet.getPower();&lt;br /&gt;
            this.bearingDelta = deltaBearing;&lt;br /&gt;
            this.oldRLocation.setLocation(location);&lt;br /&gt;
            this.oldELocation.setLocation(enemyLocation);&lt;br /&gt;
            this.oldBearing = absoluteBearing(oldRLocation, oldELocation);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public boolean test() {&lt;br /&gt;
            if (bulletVelocity * (getTime() - time) &amp;gt; oldRLocation.distance(enemyLocation) - 10) {&lt;br /&gt;
                double impactBearing = absoluteBearing(oldRLocation, enemyLocation);&lt;br /&gt;
                double bearingDiff = normalRelativeAngle(impactBearing - oldBearing);&lt;br /&gt;
                meanOffsetFactor = rollingAvg(meanOffsetFactor, bearingDiff, 20, bulletPower);&lt;br /&gt;
                if (Math.abs(bearingDelta) &amp;gt; 0.05) {&lt;br /&gt;
                    double factor = bearingDiff / bearingDelta;&lt;br /&gt;
                    if (bearingDelta &amp;lt; -0.3) {&lt;br /&gt;
                        meanAimFactorLeft = rollingAvg(meanAimFactorLeft, factor, 75, bulletPower);&lt;br /&gt;
                    }&lt;br /&gt;
                    else if (bearingDelta &amp;gt; 0.3) {&lt;br /&gt;
                        meanAimFactorRight = rollingAvg(meanAimFactorRight, factor, 75, bulletPower);&lt;br /&gt;
                    }&lt;br /&gt;
                    else {&lt;br /&gt;
                        meanAimFactorStraight = rollingAvg(meanAimFactorStraight, factor, 75, bulletPower);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                removeCustomEvent(this);&lt;br /&gt;
            }&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Source Code]]&lt;/div&gt;</summary>
		<author><name>Voidious</name></author>
		
	</entry>
</feed>