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) {
|
function tryMove(pixel,nx,ny,leaveBehind,force) {
|
||||||
if(!pixel) { return false };
|
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; }
|
if (pixel.drag && !force) { return true; }
|
||||||
var info = elements[pixel.element];
|
var info = elements[pixel.element];
|
||||||
var oob = outOfBounds(nx,ny);
|
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++) {
|
for (var i = 0; i < targets.length; i++) {
|
||||||
var newPixel = pixelMap[targets[i][0]]?.[targets[i][1]];
|
var newPixel = pixelMap[targets[i][0]]?.[targets[i][1]];
|
||||||
if ((!newPixel) || newPixel.del) { continue };
|
if ((!newPixel) || newPixel.del) { continue };
|
||||||
if((newPixel.element == pixel.element) || ((newPixel.x == pixel.x) && (newPixel.y == pixel.y))) { 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.drag = true;
|
newPixel.tempDrag = pixelTicks + 1;
|
||||||
var [mX, mY] = [pixel.x, pixel.y];
|
var [mX, mY] = [pixel.x, pixel.y];
|
||||||
var distanceComplement = (range / 2) - pyth(mX,mY,newPixel.x,newPixel.y);
|
var distanceComplement = (range / 2) - pyth(mX,mY,newPixel.x,newPixel.y);
|
||||||
var distanceProportion = 0.2 + (distanceComplement / (range / 2));
|
var distanceProportion = 0.2 + (distanceComplement / (range / 2));
|
||||||
var distanceModifier = distanceProportion ** 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 pullCountIntegerPart = Math.floor(pullCount);
|
||||||
var pullCountFractionalPart = pullCount % 1;
|
var pullCountFractionalPart = pullCount % 1;
|
||||||
var truePullCount = Math.min(3,pullCountIntegerPart + (Math.random() < pullCountFractionalPart));
|
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,
|
state: undefined,
|
||||||
density: 1797.69313486e305, //about as close to Infinity as we can serializably get
|
density: 1797.69313486e305, //about as close to Infinity as we can serializably get
|
||||||
category: "special",
|
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 ##
|
//ASSORTED RAINBOW VARIANTS ##
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue