From afef422a0bc92965efc87df39aeed9e6d982c55b Mon Sep 17 00:00:00 2001
From: O-01-67 <68935009+O-01-67@users.noreply.github.com>
Date: Fri, 7 Oct 2022 17:34:13 -0400
Subject: [PATCH] docs later
---
mods/onTryMoveInto.js | 72 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 72 insertions(+)
create mode 100644 mods/onTryMoveInto.js
diff --git a/mods/onTryMoveInto.js b/mods/onTryMoveInto.js
new file mode 100644
index 00000000..8fc15667
--- /dev/null
+++ b/mods/onTryMoveInto.js
@@ -0,0 +1,72 @@
+elements.on_try_move_into_test = {
+ color: "#ffffff",
+ properties: {
+ ticks: 0,
+ attemptedMovesIntoPixel: 0,
+ },
+ behavior: behaviors.POWDER,
+ reactions: {
+ "dirt": { elem1: "diamond" },
+ },
+ state: "solid",
+ category: "special",
+ density: 1000,
+ tick: function(pixel) {
+ pixel.ticks++;
+ },
+ onTryMoveInto: function(pixel,otherPixel) {
+ pixel.attemptedMovesIntoPixel++;
+ var otherElement = otherPixel.element;
+ if(otherElement === "ash") {
+ console.log(`This is a test of potentially undesired multiplicate running. (tick: ${pixelTicks}, move attempts: ${pixel.attemptedMovesIntoPixel})`);
+ //if(deletePixel(pixel.x,pixel.y)) {
+ // console.log("This pixel has been deleted.");
+ //};
+ };
+ },
+ desc: "Try burying this pixel and see what happens. (Use Debug)\n\nonTryMoveInto is run as part of tryMove, before reactions, while tick functions are run as part of pixelDraw.\nIn some circumstances, such as a pixel being buried under a pile of anything that isn't a sturdy powder, this function may run multiple times per tick. For example, bury this pixel in ash and look in the console.\n\nTo use this function, include in your element definition the \"onTryMoveInto\" key with a function value, similarly to tick functions. This function takes two arguments; \"otherPixel\" is the pixel that is trying to move and \"pixel\" is the pixel whose position otherPixel is trying to move into.",
+ related: ["debug", "ash"],
+}
+
+function tryMove(pixel,nx,ny,leaveBehind=undefined) {
+ var info = elements[pixel.element];
+ var oob = outOfBounds(nx,ny);
+ if (isEmpty(nx,ny,false,oob)) { // If coords is empty, move to coords
+ movePixel(pixel,nx,ny,leaveBehind);
+ return true;
+ }
+ else if (!oob) {
+ // Reactions
+ newPixel = pixelMap[nx][ny];
+ var newInfo = elements[newPixel.element];
+ if(newInfo.onTryMoveInto !== undefined) {
+ newInfo.onTryMoveInto(newPixel,pixel);
+ }
+ var rr1 = false;
+ if (info.reactions !== undefined && info.reactions[newPixel.element] !== undefined) {
+ rr1 = reactPixels(pixel,newPixel)
+ if (rr1) {
+ return true;
+ }
+ }
+ if (!rr1 && elements[newPixel.element].reactions !== undefined && elements[newPixel.element].reactions[pixel.element] !== undefined && !elements[newPixel.element].reactions[pixel.element].oneway) {
+ if (reactPixels(newPixel,pixel)) {
+ return true;
+ }
+ }
+ // Density
+ if (elements[pixel.element].id !== elements[newPixel.element].id) {
+ if (info.density !== undefined && elements[newPixel.element].density !== undefined) {
+ // if the pixel's state + ">" + newPixel's state is in validDensitySwaps, and the pixel's density is larger than the newPixel's density, swap the pixels
+ if (validDensitySwaps[info.state][elements[newPixel.element].state] && info.density >= elements[newPixel.element].density) {
+ // chance depending on the difference in density
+ if (Math.random() < (info.density - elements[newPixel.element].density)/(info.density + elements[newPixel.element].density)) {
+ swapPixels(pixel,newPixel);
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+}