hobgoblin
Version:
A framework for writing roguelike games in JavaScript, implementing ROT.js
57 lines (52 loc) • 1.78 kB
JavaScript
Game.Geometry = {
getLine: function(startX, startY, endX, endY) {
var points = [];
var dx = Math.abs(endX - startX);
var dy = Math.abs(endY - startY);
var sx = (startX < endX) ? 1 : -1;
var sy = (startY < endY) ? 1 : -1;
var err = dx - dy;
var e2;
while (true) {
points.push({x: startX, y: startY});
if (startX == endX && startY == endY) {
break;
}
e2 = err * 2;
if (e2 > -dx) {
err -= dy;
startX += sx;
}
if (e2 < dx){
err += dx;
startY += sy;
}
}
return points;
},
getCircle: function(centerX, centerY, radius) {
var angle = 0,
increment = 10 / radius, // should have an inverse relationship to radius
points = [],
repeatTries = 0,
x, y;
while(angle <= 360) {
x = Math.round(centerX + radius * Math.cos(angle));
y = Math.round(centerY + radius * Math.sin(angle));
var key = x + "," + y;
if(points.indexOf(key) < 0)
points.push(key);
else
repeatTries++;
angle += increment;
}
return points;
},
getDistance: function(startX, startY, endX, endY) {
// Math.pow(a, 2) + Math.pow(b, 2) = Math.pow(c, 2)
// c = Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2))
var horizontalDistance = startX - endX;
var verticalDistance = startY - endY;
return Math.sqrt(Math.pow(horizontalDistance, 2) + Math.pow(verticalDistance, 2));
}
};