fixing bug #15
This commit is contained in:
parent
b53ce14999
commit
8361d2f1ee
|
@ -11,7 +11,7 @@ var height = 490;
|
||||||
var gridSize = 3;
|
var gridSize = 3;
|
||||||
var nearFieldRadius = 30;
|
var nearFieldRadius = 30;
|
||||||
|
|
||||||
var timeStep = 1000/1500; (250, 500, 1000)
|
var timeStep = 1000/1500; //(250, 500, 1000)
|
||||||
var decay = Math.pow(0.8, 5);
|
var decay = Math.pow(0.8, 5);
|
||||||
var stepSize = 100*timeStep;
|
var stepSize = 100*timeStep;
|
||||||
var frameDuration = 40;
|
var frameDuration = 40;
|
||||||
|
@ -325,15 +325,10 @@ function updatePosition() {
|
||||||
}
|
}
|
||||||
|
|
||||||
clients.forEach(function (client) {
|
clients.forEach(function (client) {
|
||||||
client.r += (client.r0 - client.r)*decay;
|
//client.r += (client.r0 - client.r)*decay;
|
||||||
client.r = client.r0;
|
client.r = client.r0;
|
||||||
|
|
||||||
if (!valid(client.point) && (client.r < 1e-2)) {
|
client.valid = valid(client.point) || (client.r > 1e-2);
|
||||||
client.valid = false;
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
client.valid = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (client.settled) {
|
if (client.settled) {
|
||||||
var x = Math.round(client.x/gridSize);
|
var x = Math.round(client.x/gridSize);
|
||||||
|
@ -373,6 +368,7 @@ function updatePosition() {
|
||||||
if (!client.settled) {
|
if (!client.settled) {
|
||||||
// Kommt gerade von wo anders her
|
// Kommt gerade von wo anders her
|
||||||
|
|
||||||
|
// Mach mal einen Sprung nach vorn
|
||||||
var xn, yn;
|
var xn, yn;
|
||||||
var dx = (client.x0 - client.x);
|
var dx = (client.x0 - client.x);
|
||||||
var dy = (client.y0 - client.y);
|
var dy = (client.y0 - client.y);
|
||||||
|
@ -381,20 +377,24 @@ function updatePosition() {
|
||||||
var rn = Math.max(r-stepSize, 0);
|
var rn = Math.max(r-stepSize, 0);
|
||||||
var f = 1-rn/r;
|
var f = 1-rn/r;
|
||||||
|
|
||||||
xn = client.x + (client.x0 - client.x)*f;
|
client.x = client.x + (client.x0 - client.x)*f;
|
||||||
yn = client.y + (client.y0 - client.y)*f;
|
client.y = client.y + (client.y0 - client.y)*f;
|
||||||
} else {
|
} else {
|
||||||
xn = client.x0;
|
client.x = client.x0;
|
||||||
yn = client.y0;
|
client.y = client.y0;
|
||||||
}
|
}
|
||||||
|
|
||||||
var dx = (client.x0 - xn);
|
// Bin ich schon da?
|
||||||
var dy = (client.y0 - yn);
|
var dx = (client.x0 - client.x);
|
||||||
|
var dy = (client.y0 - client.y);
|
||||||
var r = Math.sqrt(dx*dx + dy*dy);
|
var r = Math.sqrt(dx*dx + dy*dy);
|
||||||
if (r < nearFieldRadius) {
|
if (r < nearFieldRadius) {
|
||||||
xn = Math.round(xn/gridSize);
|
xn = Math.round(client.x/gridSize);
|
||||||
yn = Math.round(yn/gridSize);
|
yn = Math.round(client.y/gridSize);
|
||||||
|
|
||||||
|
// Ist der neue Platz noch frei?
|
||||||
if (grid[xn][yn]) {
|
if (grid[xn][yn]) {
|
||||||
|
grid[xn][yn] = false;
|
||||||
client.x = xn*gridSize;
|
client.x = xn*gridSize;
|
||||||
client.y = yn*gridSize;
|
client.y = yn*gridSize;
|
||||||
} else {
|
} else {
|
||||||
|
@ -421,11 +421,7 @@ function updatePosition() {
|
||||||
client.settled = true;
|
client.settled = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
client.x = xn;
|
|
||||||
client.y = yn;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -439,30 +435,38 @@ function updatePosition() {
|
||||||
var gridx = Math.round(client.x /gridSize);
|
var gridx = Math.round(client.x /gridSize);
|
||||||
var gridy = Math.round(client.y /gridSize);
|
var gridy = Math.round(client.y /gridSize);
|
||||||
|
|
||||||
var dxmin = 0;
|
grid[gridx][gridy] = true;
|
||||||
var dymin = 0;
|
|
||||||
|
|
||||||
var dx = (gridx-gridx0);
|
do {
|
||||||
var dy = (gridy-gridy0);
|
var dx = (gridx-gridx0);
|
||||||
var rMin = dx*dx + dy*dy - 1e-5;
|
var dy = (gridy-gridy0);
|
||||||
for (var dxg = -1; dxg <= 1; dxg++) {
|
var rMin = dx*dx + dy*dy - 1e-5;
|
||||||
for (var dyg = -1; dyg <= 1; dyg++) {
|
var dxmin = 0;
|
||||||
if (grid[gridx+dxg][gridy+dyg]) {
|
var dymin = 0;
|
||||||
var dx = (gridx+dxg-gridx0);
|
var foundBetter = false
|
||||||
var dy = (gridy+dyg-gridy0);
|
for (var dxg = -1; dxg <= 1; dxg++) {
|
||||||
var r = dx*dx + dy*dy;
|
for (var dyg = -1; dyg <= 1; dyg++) {
|
||||||
if (r < rMin) {
|
if (grid[gridx+dxg][gridy+dyg] && ((dxg != 0) || (dyg != 0))) {
|
||||||
rMin = r;
|
var dx = (gridx+dxg-gridx0);
|
||||||
dxmin = dxg;
|
var dy = (gridy+dyg-gridy0);
|
||||||
dymin = dyg;
|
var r = dx*dx + dy*dy;
|
||||||
|
if (r < rMin) {
|
||||||
|
rMin = r;
|
||||||
|
dxmin = dxg;
|
||||||
|
dymin = dyg;
|
||||||
|
foundBetter = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
if (foundBetter) {
|
||||||
grid[gridx][gridy] = true;
|
gridx += dxmin;
|
||||||
grid[gridx + dxmin][gridy + dymin] = false;
|
gridy += dymin;
|
||||||
client.x = (gridx + dxmin)*gridSize;
|
}
|
||||||
client.y = (gridy + dymin)*gridSize;
|
} while (foundBetter);
|
||||||
|
grid[gridx][gridy] = false;
|
||||||
|
client.x = gridx*gridSize;
|
||||||
|
client.y = gridy*gridSize;
|
||||||
//nachrücken
|
//nachrücken
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -529,10 +533,15 @@ function renderCanvas() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
context.fillStyle = 'rgba(0,255,0,0.5)';
|
|
||||||
debugList.forEach(function (p) {
|
debugList.forEach(function (p) {
|
||||||
context.beginPath();
|
context.beginPath();
|
||||||
context.arc(p.x, p.y, 1, 0, 2*Math.PI, false);
|
context.fillStyle = '#aaf';
|
||||||
|
context.arc(p.xo, p.yo, 2, 0, 2*Math.PI, false);
|
||||||
|
context.fill();
|
||||||
|
|
||||||
|
context.beginPath();
|
||||||
|
context.fillStyle = '#0f0';
|
||||||
|
context.arc(p.x, p.y, 2, 0, 2*Math.PI, false);
|
||||||
context.fill();
|
context.fill();
|
||||||
});
|
});
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue