User:Rsim/Code snippets
Jump to navigation
Jump to search
My Bullet Shielding Code Snippet
This is how i check for bullet-hit-bullet collisions. If you find this code useful , have any questions or see ways to improve this code, please tell me :)
...
//moveAheadTime is the number of time units before this bot will fire
//moveAheadDistance is the distance (in direction heading) it will have moved during moveAheadTime
Point2D.Double enemyBulletLocation = Util.project(enemyShootingLocation,enemyBulletBearing,moveAheadTime*enemyBulletSpeed);
Point2D.Double shootingLocation = Util.project(bot.location,heading,moveAheadDistance);
for (int t=0;t<timeTillEnemyBulletHitBot-1-moveAheadTime;t++){
// Move enemy bullet location half way
Point2D.Double nextEnemyBulletLocation = Util.project(enemyBulletLocation,enemyBulletBearing,enemyBulletSpeed/2);
double bearing = Util.absoluteBearing(shootingLocation,nextEnemyBulletLocation);
double distance = shootingLocation.distance(nextEnemyBulletLocation);
double optimalPower = (20.0-distance/(t+0.5))/3;
optimalPower = Math.min(MAX_POWER,Math.max(0.1,optimalPower));
double optimalSpeed = Rules.getBulletSpeed(optimalPower);
// Move enemy bullet location half way remaining half way
nextEnemyBulletLocation = Util.project(nextEnemyBulletLocation,enemyBulletBearing,enemyBulletSpeed/2);
Line2D.Double enemyBulletLine = new Line2D.Double(enemyBulletLocation,nextEnemyBulletLocation);
Point2D.Double botBulletLocation = Util.project(shootingLocation,bearing,t*optimalSpeed);
Point2D.Double botNextBulletLocation = Util.project(botBulletLocation,bearing,optimalSpeed);
Line2D.Double botBulletLine = new Line2D.Double(botBulletLocation,botNextBulletLocation);
if(checkIntersection(enemyBulletLine,botBulletLine)){
//we have a bullet-hit-bullet collision. do something useful
...
}
enemyBulletLocation=nextEnemyBulletLocation;
}
...