White holes
This commit is contained in:
parent
bed30a2d13
commit
92a76283d7
|
|
@ -5734,6 +5734,13 @@ color1 and color2 spread through striped paint like dye does with itself. <u>col
|
|||
}
|
||||
function tryMove(pixel,nx,ny,leaveBehind,force) {
|
||||
if(!pixel) { return false };
|
||||
if ((typeof(pixel.tempDrag) !== "undefined") && (!force)) {
|
||||
if(typeof(pixel.tempDrag) === "number" && pixel.tempDrag >= pixelTicks) {
|
||||
return true
|
||||
} else {
|
||||
delete pixel.tempDrag
|
||||
}
|
||||
};
|
||||
if (pixel.drag && !force) { return true; }
|
||||
var info = elements[pixel.element];
|
||||
var oob = outOfBounds(nx,ny);
|
||||
|
|
@ -8606,13 +8613,13 @@ color1 and color2 spread through striped paint like dye does with itself. <u>col
|
|||
for (var i = 0; i < targets.length; i++) {
|
||||
var newPixel = pixelMap[targets[i][0]]?.[targets[i][1]];
|
||||
if ((!newPixel) || newPixel.del) { continue };
|
||||
if((newPixel.element == pixel.element) || ((newPixel.x == pixel.x) && (newPixel.y == pixel.y))) { continue };
|
||||
newPixel.drag = true;
|
||||
if(((newPixel.element == pixel.element) || (elements[pixel.element].ignore && elements[pixel.element].ignore.includes(newPixel.element))) || ((newPixel.x == pixel.x) && (newPixel.y == pixel.y))) { continue };
|
||||
newPixel.tempDrag = pixelTicks + 1;
|
||||
var [mX, mY] = [pixel.x, pixel.y];
|
||||
var distanceComplement = (range / 2) - pyth(mX,mY,newPixel.x,newPixel.y);
|
||||
var distanceProportion = 0.2 + (distanceComplement / (range / 2));
|
||||
var distanceModifier = distanceProportion ** 2;
|
||||
var pullCount = (4 * distanceModifier) * (commonMovableCriteria(pixel.element) ? 1 : 0.8);
|
||||
var pullCount = (4 * distanceModifier) * (commonMovableCriteria(newPixel.element) ? 1 : 0.8);
|
||||
var pullCountIntegerPart = Math.floor(pullCount);
|
||||
var pullCountFractionalPart = pullCount % 1;
|
||||
var truePullCount = Math.min(3,pullCountIntegerPart + (Math.random() < pullCountFractionalPart));
|
||||
|
|
@ -8649,7 +8656,76 @@ color1 and color2 spread through striped paint like dye does with itself. <u>col
|
|||
state: undefined,
|
||||
density: 1797.69313486e305, //about as close to Infinity as we can serializably get
|
||||
category: "special",
|
||||
hardness: 1
|
||||
hardness: 1,
|
||||
ignore: ["amba_white_hole"]
|
||||
};
|
||||
|
||||
elements.amba_white_hole = {
|
||||
color: "#ffffff",
|
||||
maxColorOffset: 0,
|
||||
excludeRandom: true,
|
||||
insulate: true,
|
||||
tick: function(pixel) {
|
||||
pixel.color = "rgb(255,255,255)";
|
||||
var range = (pixel.range ?? 30) * 2;
|
||||
var targets = mouseRange(pixel.x,pixel.y,range,"circle",true);
|
||||
shuffleArray(targets);
|
||||
for (var i = 0; i < targets.length; i++) {
|
||||
var newPixel = pixelMap[targets[i][0]]?.[targets[i][1]];
|
||||
if ((!newPixel) || newPixel.del) { continue };
|
||||
if(((newPixel.element == pixel.element) || (elements[pixel.element].ignore && elements[pixel.element].ignore.includes(newPixel.element))) || ((newPixel.x == pixel.x) && (newPixel.y == pixel.y))) { continue };
|
||||
newPixel.tempDrag = pixelTicks + 1;
|
||||
var [mX, mY] = [pixel.x, pixel.y];
|
||||
var distanceComplement = (range / 2) - pyth(mX,mY,newPixel.x,newPixel.y);
|
||||
var distanceProportion = 0.2 + (distanceComplement / (range / 2));
|
||||
var distanceModifier = distanceProportion ** 2;
|
||||
var pullCount = (4 * distanceModifier) * (commonMovableCriteria(newPixel.element) ? 1 : 0.8);
|
||||
var pullCountIntegerPart = Math.floor(pullCount);
|
||||
var pullCountFractionalPart = pullCount % 1;
|
||||
var truePullCount = Math.min(3,pullCountIntegerPart + (Math.random() < pullCountFractionalPart));
|
||||
for(var j = 0; j < truePullCount; j++) {
|
||||
if((pullCountIntegerPart >= 1) && (Math.random() < pullCount / 3)) { tryBreak(newPixel) };
|
||||
var x = newPixel.x;
|
||||
var y = newPixel.y;
|
||||
var empty = checkForEmptyPixels(x, y);
|
||||
let bestVal = Math.sqrt(Math.pow(mX - x, 2) + Math.pow(mY - y, 2));
|
||||
let best = null;
|
||||
for (const pixelPair of empty) {
|
||||
const x_ = x + pixelPair[0];
|
||||
const y_ = y + pixelPair[1];
|
||||
const c = Math.sqrt(Math.pow(mX - x_, 2) + Math.pow(mY - y_, 2));
|
||||
if (c < bestVal) {
|
||||
bestVal = c;
|
||||
best = pixelPair;
|
||||
}
|
||||
}
|
||||
if (best) {
|
||||
var destCoords = [x - best[0], y - best[1]];
|
||||
newPixel.vx = -(truePullCount * (best[0]));
|
||||
newPixel.vy = -(truePullCount * (best[1]));
|
||||
var moveResult = tryMoveAndReturnBlockingPixel(newPixel, destCoords[0], destCoords[1], undefined, true);
|
||||
if((moveResult !== true) && !(outOfBounds(...destCoords))) {
|
||||
swapPixels(newPixel,moveResult);
|
||||
tryMove(newPixel, destCoords[0] - best[0], destCoords[1] - best[1], undefined, true)
|
||||
};
|
||||
heatNeighbors(newPixel,20);
|
||||
var a0 = settings.abszero ?? -273.15;
|
||||
if(pixel.temp >= a0) {
|
||||
if(pixel.temp <= (a0 + 20)) {
|
||||
pixel.temp = a0
|
||||
} else {
|
||||
pixel.temp -= 20
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
state: undefined,
|
||||
density: -(1797.69313486e305), //about as close to -Infinity as we can serializably get
|
||||
category: "special",
|
||||
hardness: 1,
|
||||
ignore: ["amba_black_hole"]
|
||||
};
|
||||
|
||||
//ASSORTED RAINBOW VARIANTS ##
|
||||
|
|
|
|||
Loading…
Reference in New Issue