Files
Reeks2Missie6/scripts/Commandeer/utils/arrow.ts
Bram Verhulst 67af73c6b5 Init
2024-07-04 14:42:38 +02:00

63 lines
1.4 KiB
TypeScript

import { MolangVariableMap, Vector3, world } from "@minecraft/server";
import { Vector3Add, vector3 } from "./vectorUtils";
import { PARTICLES, spawnParticle } from "./particleUtils";
let arrowTemplate: Vector3[] = [
vector3(0, 0, 0),
vector3(1, 1, 0),
vector3(-1, 1, 0),
vector3(1.5, 2, 0),
vector3(-1.5, 2, 0),
vector3(2, 3, 0),
vector3(-2, 3, 0),
vector3(0, 1, 0),
vector3(0, 2, 0),
vector3(0, 3, 0),
vector3(0, 4, 0),
vector3(0, 5, 0),
];
let offset: Vector3 = vector3(0, 0, 0);
let angleOffset = 0;
let heightBobbing = 0;
let tickCounter = 0;
function rotate(pos: Vector3, angle: number) {
let x = pos.x;
let z = pos.z;
let newX = x * Math.cos(angle) - z * Math.sin(angle);
let newZ = x * Math.sin(angle) + z * Math.cos(angle);
return vector3(newX, pos.y, newZ);
}
const particleData = new MolangVariableMap().setColorRGB("variable.color", {
red: 1,
green: 1,
blue: 1,
alpha: 1,
});
function drawArrow(offsetPos: Vector3) {
tickCounter++;
if (tickCounter % 2 == 0) {
angleOffset += 0.1;
heightBobbing += 0.3;
offset = vector3(46.5, 75, 220.5);
arrowTemplate.forEach((pos) => {
let rotatedPos = rotate(pos, angleOffset);
let finalPos = Vector3Add(offsetPos, rotatedPos);
finalPos.y += Math.sin(heightBobbing) / 2;
spawnParticle(finalPos, PARTICLES.point, particleData);
});
}
}
export { drawArrow };