Skip to content

Instantly share code, notes, and snippets.

@vViktorPL
Created December 5, 2012 16:48
Show Gist options
  • Save vViktorPL/4217318 to your computer and use it in GitHub Desktop.
Save vViktorPL/4217318 to your computer and use it in GitHub Desktop.
VOBOT v2.0
var myData = [];
var enemyData = [];
var Robot = function(robot) {
};
Robot.prototype.onIdle = function(ev) {
var robot=ev.robot;
if(myData[robot.id] == undefined){
myData[robot.id] = {};
myData[robot.id].followXY=false;
myData[robot.id].destPos = {x: 0, y:0};
myData[robot.id].destAngle = robot.angle;
}
myData[robot.id].bot = robot;
botDo(robot);
}
function distance(p1, p2){
return Math.sqrt(
Math.pow(p1.x-p2.x, 2) +
Math.pow(p1.y-p2.y, 2)
);
}
function botDo(bot){
if(myData[robot.id].enemy == undefined){ //Find closest enemy
var min = 99999;
var dist;
for(var i in enemyData){
dist = distance(enemyData.position, bot.position);
if(min>dist){
min=dist;
myData[robot.id].enemy = i;
}
}
}else{
rotateCannonToPos(bot, enemyData[myData[robot.id].enemy].position);
}
if(myData[bot.id].followXY){
dist = distance(bot.position, myData[bot.id].destPos);
if(dist>10){
var alpha=angleBetween(bot.position, myData[bot.id].destPos);
followAngle(bot, normalizeAngle(alpha-90));
if(Math.abs(bot.angle-myData[bot.id].destAngle) < 5)
bot.ahead(dist*0.01);
}else{
myData[bot.id].followXY=false;
}
}else{
goToXY(bot, random(bot, bot.arenaWidth-40)+20, random(bot, bot.arenaHeight-40)+20);
}
}
function rotateCannonToPos(bot, pos){
rotateCannonToAngle(bot, angleBetween(bot.position, pos));
}
function rotateCannonToAngle(robot, ang){
diff = Math.abs(robot.cannonAbsoluteAngle-ang);
//myData[robot.id].destCannonAngle = ang;
if(robot.cannonAbsoluteAngle > ang)
robot.rotateCannon(-diff*0.1);
else
robot.rotateCannon(diff*0.1);
}
function followAngle(bot, angle){
diff = angle - bot.angle;
if(diff>180)
diff -= 180;
myData[bot.id].destAngle = angle;
bot.turn(diff*0.1);
}
function isEnemy(bot, me){
return bot.parentId == null && bot.id!=me.parentId;
}
function predictEnemyPos(){
}
function random(bot, max){
return Math.round((bot.position.x + bot.position.y + bot.angle)%max);
}
function angleBetween(p1, p2){
if(p1 == undefined) return 0;
if(p2 == undefined) return 0;
var x = -p2.x + p1.x;
var y = -p2.y + p1.y;
alpha = (Math.atan(y/x)/3.1415)*180;
if(x<0) alpha +=180;
return normalizeAngle(alpha);
}
function normalizeAngle(angle){
while(angle<0)
angle+=360;
while(angle>360)
angle-=360;
return angle;
}
function goToXY(bot, X, Y){
myData[bot.id].destPos = {x: X, y: Y};
myData[bot.id].followXY = true;
}
Robot.prototype.onScannedRobot = function(ev) {
var robot=ev.robot;
var scan =ev.scannedRobot;
if(isEnemy(scan, robot)){
enemyData[scan.id] = scan;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment