White holes

This commit is contained in:
An Orbit 2024-06-24 19:43:49 -04:00 committed by GitHub
parent bed30a2d13
commit 92a76283d7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 80 additions and 4 deletions

View File

@ -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 ##