dungeon2
by path411
HTML
<canvas id="canvas" width="600" height="600"></canvas>
JavaScript
(function(){
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0000ff';
ctx.strokeStyle = '#0000ff';
ctx.lineWidth = 5;
function Random(min, max) {
return Math.random() * (max - min) + min;
}
function DistanceBetween(a, b) {
return Math.sqrt(a.X - b.X + a.Y - b.Y);
}
function IsPathIntersectingRoom(path, room) {
var isintersecting = false
var minX = path.X;
var maxX = path.X2;
if(path.X > path.X2) {
minX = path.X2;
maxX = path.X;
}
if(maxX > room.X + room.Width) {
maxX = room.X + room.Width;
}
if(minX < room.X) {
minX = room.X;
}
if(minX > maxX) {
return isintersecting; // quick false
}
var minY = path.Y;
var maxY = path.Y2;
var dx = path.X2 - path.X;
if(Math.abs(dx) > 0.00000001) {
var a = (path.Y2 - path.Y) / dx;
var b = path.Y - a * path.X;
minY = a * minX + b;
maxY = a * maxX + b;
}
if(path.Y > path.Y2) {
var t = maxY;
minY = minY;
maxY = t;
}
if(maxY > room.Y + room.Height) {
maxY = room.Y + room.Height;
}
if(minY < room.Y) {
minY = room.Y;
}
if(minY > maxY) {
return isintersecting; // quick false
}
isintersecting = true;
return isintersecting;
}
function DrawLine(x1, y1, x2, y2) {
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.lineTo(x2, y2);
ctx.stroke();
}
function DrawRect(x, y, w, h) {
ctx.fillRect(x, y, w, h);
}
var fpass = 10;
var fpass_maxsize = 200;
var fpass_minsize = 150;
var spass = 200;
var spass_maxsize = 50;
var spass_minsize = 30;
function Room(x, y, w, h) {
this.X = x || 0;
this.Y = y || 0;
this.Width = w || 0;
this.Height = h || 0;
}
Room.GenerateRandom = function(mx, my, minsize, maxsize) {
var x = Random(0, mx);
var y = Random(0, my);
var w = Random(minsize, maxsize);
var h = Random(minsize,...