gravity.js
a mod for sandboxels that adds a gravity block were you can create plannets with and much more!
This commit is contained in:
parent
337811d22b
commit
b556e9926c
|
|
@ -0,0 +1,40 @@
|
||||||
|
elements.gravity_point = {
|
||||||
|
color: "#FFD700", // Goudkleurig
|
||||||
|
behavior: behaviors.STURDYPOWDER,
|
||||||
|
category: "special",
|
||||||
|
state: "solid",
|
||||||
|
density: 5000,
|
||||||
|
max_gravity_distance: 100, // Bereik van zwaartekracht
|
||||||
|
gravity_strength: 1, // Kracht van zwaartekracht
|
||||||
|
|
||||||
|
tick: function(pixel) {
|
||||||
|
for (var x = -pixel.max_gravity_distance; x <= pixel.max_gravity_distance; x++) {
|
||||||
|
for (var y = -pixel.max_gravity_distance; y <= pixel.max_gravity_distance; y++) {
|
||||||
|
var nx = pixel.x + x;
|
||||||
|
var ny = pixel.y + y;
|
||||||
|
|
||||||
|
if (!isEmpty(nx, ny, true)) {
|
||||||
|
var npixel = pixelMap[nx][ny];
|
||||||
|
|
||||||
|
if (npixel && npixel.element !== "gravity_point") {
|
||||||
|
var dx = nx - pixel.x;
|
||||||
|
var dy = ny - pixel.y;
|
||||||
|
var distance = Math.sqrt(dx * dx + dy * dy);
|
||||||
|
|
||||||
|
if (distance < 1) distance = 1; // Voorkom delen door 0
|
||||||
|
if (distance <= pixel.max_gravity_distance) {
|
||||||
|
var force = (pixel.gravity_strength * 100) / (distance * distance);
|
||||||
|
var angle = Math.atan2(dy, dx);
|
||||||
|
var vx = -Math.cos(angle) * force;
|
||||||
|
var vy = -Math.sin(angle) * force;
|
||||||
|
|
||||||
|
// Voeg snelheid toe aan objecten
|
||||||
|
npixel.vx = (npixel.vx || 0) + vx;
|
||||||
|
npixel.vy = (npixel.vy || 0) + vy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
Loading…
Reference in New Issue