Skip to content

Instantly share code, notes, and snippets.

@ArtBIT
Created December 3, 2012 19:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ArtBIT/4197249 to your computer and use it in GitHub Desktop.
Save ArtBIT/4197249 to your computer and use it in GitHub Desktop.
CRUSHER
var MAX_SPEED = 100;
var DISTANCE = 50;
//FightCode can only understand your robot
//if its class is called Robot
var Robot = function(robot) {
this.dir = 1;
this.cannonDir = 1;
this.speed = MAX_SPEED*.8;
this.ts = 0;
this.pivot = {
x:robot.arenaWidth/2,
y:robot.arenaHeight/2,
ang: 0,
d: 0
};
this.recalculateDistance({robot:robot});
this.keepDistance({robot: robot}, 100);
};
Robot.prototype.onIdle = function(ev) {
var robot = ev.robot;
var now = new Date().getTime();
//if (now > this.pivot.ts + 1000) {
robot.rotateCannon(this.cannonDir * 90);
//}
//this.doMove(ev);
/*
if (Math.random()>0.5) {
robot.ahead(50);
}
else {
robot.back(50);
}
*/
};
function closestAngle(a, b) {
if (Math.abs(b-a) < 180) {
return b-a;
}
if (b>a) {
return b-a-180;
}
return b-a+180;
};
Robot.prototype.doMove = function(ev) {
var robot = ev.robot;
this.speed += (this.speed - (MAX_SPEED/2))/8;
var dist = this.speed * this.dir;
if (dist > 0) {
robot.ahead(dist);
} else {
robot.back(-dist);
}
this.recalculateDistance(ev);
};
Robot.prototype.orientTowardsPivot = function(ev) {
var robot = ev.robot;
var dang = -closestAngle(this.pivot.ang, robot.angle);
this.turn(ev,dang);
};
Robot.prototype.keepDistance = function(ev, distance) {
var robot = ev.robot;
var d = this.pivot.d - distance;
console.log(d, distance);
this.orientTowardsPivot(ev);
if (d > 50) {
this.turn(ev, this.cannonDir*90);
robot.ahead(50);
}
else if (d < -50) {
this.turn(ev, -this.cannonDir*90);
robot.back(50);
}
this.orientTowardsPivot(ev);
robot.ahead(50);
};
Robot.prototype.recalculateDistance = function(ev) {
var robot = ev.robot;
var dx = this.pivot.x - robot.position.x;
var dy = this.pivot.y - robot.position.y;
this.pivot.d = Math.sqrt(dx*dx+dy*dy);
this.pivot.ang = (Math.atan2(dy, dx) / Math.PI) * 180;
};
Robot.prototype.scan = function(ev) {
this.pivot.x = ev.scannedRobot.position.x;
this.pivot.y = ev.scannedRobot.position.y;
//this.pivot.ts = (new Date()).getTime();
this.recalculateDistance(ev);
};
Robot.prototype.onScannedRobot = function(ev) {
var robot = ev.robot;
this.scan(ev);
if (this.pivot.d < 300) {
/*
if (robot.gunCooldownTime) {
return robot.stop();
}
*/
robot.fire();
}
this.keepDistance(ev, DISTANCE);
//this.doMove(ev);
};
Robot.prototype.turn = function(ev, ang) {
var robot = ev.robot;
robot.turn(ang);
var cannonAngle = -90+closestAngle(this.pivot.ang, robot.cannonAbsoluteAngle);
robot.rotateCannon(cannonAngle);
this.cannonDir = cannonAngle > 0 ? 1 : -1;
}
Robot.prototype.onHitByBullet = function(ev) {
return;
var robot = ev.robot;
robot.stop();
this.dir *= -1;
this.speed = MAX_SPEED;
if (robot.gunCoolDownTime) {
this.doMove(ev);
}
if (robot.life < 80 && robot.availableClones) {
robot.clone();
robot.stop();
robot.ahead(50);
}
};
Robot.prototype.onWallCollision = function(ev) {
return;
var robot = ev.robot;
robot.stop();
this.dir *= -1;
this.turn(ev, ev.bearing);
robot.back(50);
this.recalculateDistance(ev);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment