This commit is contained in:
2024-08-05 10:12:32 +02:00
parent ba384d79d8
commit 61c5a0e489
20 changed files with 1035 additions and 189 deletions

View File

@@ -12,14 +12,13 @@ class TrailPoint {
}
spawn() {
let spawnPosition: Vector3 = Vector3Add(this.postion, { x: 0.5, y: 0.5, z: 0.5 });
// let spawnPosition: Vector3 = Vector3Add(this.postion, { x: 0.5, y: 0.5, z: 0.5 });
let spawnPosition: Vector3 = this.postion;
try {
world
.getDimension("overworld")
.spawnParticle("minecraft:balloon_gas_particle", spawnPosition, new MolangVariableMap());
} catch (e) {}
}
}
@@ -27,13 +26,15 @@ class Trail {
id: string;
points: TrailPoint[] = [];
currentPoint: number = 0;
wrapIndex: number = 0;
nextParticleTimer: number = 0;
currentParticleCounter: number = 0;
calculatedLength: number = 0;
constructor(id: string, nextParticleTimer: number = 5) {
constructor(id: string, nextParticleTimer: number = 5, wrapIndex: number = 0) {
this.id = id;
this.nextParticleTimer = nextParticleTimer;
this.wrapIndex = wrapIndex;
}
addPoint(point: TrailPoint) {
@@ -58,10 +59,14 @@ class Trail {
spawnNext() {
if (this.currentParticleCounter >= this.nextParticleTimer) {
this.currentParticleCounter = 0;
//wrapindex is in how many segments the trail is divided into
let pointsPerInterval = this.wrapIndex > 0 ? this.calculatedLength / this.wrapIndex : 0;
this.points
.filter((point) => {
return point.index === this.currentPoint;
return (
point.index === this.currentPoint ||
(this.wrapIndex > 0 && point.index % pointsPerInterval === this.currentPoint)
);
})
.forEach((point) => {
point.spawn();

View File

@@ -60,6 +60,7 @@ export namespace TrailMaker {
if (event.itemStack.typeId == "minecraft:stick" && event.itemStack.nameTag == "AddPoint") {
let block = event.block;
let pos = this.BlockToParticlePosition(block);
world.sendMessage(`Added Point ${Vector3ToString(pos)}`);
this.currentTrail.points.push(new Point(pos, this.currentTrail.currentPoint));
this.currentTrail.currentPoint++;
@@ -80,18 +81,14 @@ export namespace TrailMaker {
}
if (event.itemStack.typeId == "minecraft:stick" && event.itemStack.nameTag == "AddLine") {
world.sendMessage(`Waiting for point 2: ${this.waitingForPoint2}`);
if (!this.waitingForPoint2) {
this.point1 = vector3(blockInteracted.location.x, blockInteracted.location.y, blockInteracted.location.z);
this.point1 = Vector3Add(this.point1, vector3(0.5, 0, 0.5));
let isHalfBlock = blockInteracted.typeId.includes("slab") || blockInteracted.typeId.includes("stair");
if (isHalfBlock) {
this.point1 = Vector3Add(this.point1, vector3(0, 0.5, 0));
} else {
this.point1 = Vector3Add(this.point1, vector3(0, 1.1, 0));
}
// this.point1 = vector3(blockInteracted.location.x, blockInteracted.location.y, blockInteracted.location.z);
this.point1 = this.BlockToParticlePosition(blockInteracted);
this.waitingForPoint2 = true;
Pupeteer.setActionBar("Select a second point");
world.sendMessage("Select a second point");
return;
} else {
@@ -166,9 +163,13 @@ export namespace TrailMaker {
}
Export() {
//Convert to json, and send to the log with console.warn
let json = JSON.stringify(this.currentTrail.points);
console.warn(json);
let output = "";
for (let i = 0; i < this.currentTrail.points.length; i++) {
let point = this.currentTrail.points[i];
let actualPos = point.position;
output += `{ index: ${point.index}, position: vector3(${actualPos.x}, ${actualPos.y}, ${actualPos.z}) },\n`;
}
console.warn(output);
}
private BlockToParticlePosition(block: Block): Vector3 {