Create AnonymousWorldgenLibrary.js
This commit is contained in:
parent
3a0589bd6a
commit
f930666935
|
|
@ -0,0 +1,55 @@
|
|||
// AnonymousWorldgenLibrary.js \\
|
||||
// A useful mod that provides a function to generate terrain when placing an element, could not be used a lot but can be useful \\
|
||||
|
||||
|
||||
|
||||
function generateWorld(pixel, layers = [], startX = -500, endX = 500, baseY = 82) {
|
||||
deletePixel(pixel.x, pixel.y); // Deletes the pixel that triggered the generation
|
||||
for (let x = startX; x <= endX; x++) {
|
||||
layers.forEach((layer, layerIndex) => {
|
||||
const y = baseY - layerIndex; // Each layer is placed one row above the previous
|
||||
|
||||
// Check if the spot is empty and passes the chance check
|
||||
if (Math.random() < layer.chance) {
|
||||
tryCreate(layer.element, x, y); // Creates the pixel
|
||||
}
|
||||
});
|
||||
}
|
||||
selectElement(null);
|
||||
}
|
||||
|
||||
|
||||
// ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
|
||||
// generateWorld Function Reference:
|
||||
// pixel: The generateWorld function is used in onPlace(pixel), the reason of including pixel is to delete it.
|
||||
// layers: An array of layer objects like this:
|
||||
// [{element: "yourElement", chance: 0.5}, {...}, ...]
|
||||
// Each layer is placed one row above the previous.
|
||||
// 'chance' must be between 0 and 1 — higher means more likely to generate.
|
||||
// startX / endX: Horizontal range to generate across. Default is -500 to 500.
|
||||
// baseY: Vertical starting point for the bottom layer. Default is 82 (bottom of medium canvas).
|
||||
//
|
||||
// Tip: To insert empty space between layers, use an empty object: {}
|
||||
// Example: [layer1, {}, layer3] will skip one row between layer1 and layer3.
|
||||
// Fact: The index 0 layer will be placed at the baseY, and the index 1 layer will be placed in baseY - 1, so when looking at the code, it looks upside down.
|
||||
// Note: If someone is using tinier or bigger canvas size then this may not work as needed, you should make a case for each canvas size
|
||||
// ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
// Example usage of generateWorld
|
||||
elements.generateWorldExample = {
|
||||
color: "#808080",
|
||||
category: "World Generator",
|
||||
onPlace: (pixel) => {
|
||||
generateWorld(pixel, [
|
||||
{element: "dirt", chance: 0.65},
|
||||
{element: "dirt", chance: 0.65},
|
||||
{element: "dirt", chance: 0.65},
|
||||
{element: "dirt", chance: 0.65},
|
||||
{element: Math.random() < 0.1 ? "grass_seed" : "grass", chance: 0.6},
|
||||
{}/* Space between grass/grass_seed and sapling */,
|
||||
{element: "sapling", chance: 1 / 6}
|
||||
]);
|
||||
},
|
||||
maxSize: 1
|
||||
};
|
||||
Loading…
Reference in New Issue