dcl-npc-toolkit-ai-version
Version:
A collection of tools for creating Non-Player-Characters (NPCs). These are capable of having conversations with the player, and play different animations. AI usage is added atop of it
60 lines • 9.38 kB
JavaScript
import { Vector3 } from '@dcl/sdk/math';
export function getRandomHexColor() {
const letters = '0123456789ABCDEF';
let color = '#';
for (let i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
}
export function onelerp(v0, v1, t) {
return (1 - t) * v0 + t * v1;
}
export function calculateBezier(start, end, inter1, inter2, t) {
var a = Vector3.lerp(start, inter1, t);
var b = Vector3.lerp(inter1, inter2, t);
var c = Vector3.lerp(inter2, end, t);
var d = Vector3.lerp(a, b, t);
var e = Vector3.lerp(b, c, t);
return Vector3.lerp(d, e, t);
}
export function smoothPath(controlPoints, smoothness) {
if (controlPoints.length < 4 || smoothness == 0) {
return [Vector3.Zero(), Vector3.Zero()];
}
let path = [];
for (let t = 0; t <= 1; t += 1 / smoothness) {
console.log('bezier: ' +
calculateBezier(controlPoints[0], controlPoints[3], controlPoints[1], controlPoints[2], t).x +
' , Time: ' +
t);
path.push(calculateBezier(controlPoints[0], controlPoints[3], controlPoints[1], controlPoints[2], t));
}
return path;
}
export function pitchShift(currentPitch, shift) {
return Math.pow(2.0, shift / 12.0) * currentPitch;
}
export function rotate2D(angle, x, y, centerX, centerY) {
angle = angle % 360;
let A = (angle * Math.PI) / 180;
let CosA = Math.cos(A);
let SinA = Math.sin(A);
let cx = centerX;
let cy = centerY;
let X = x - cx;
let Y = y - cy;
let NX = X * CosA - Y * SinA;
let NY = Y * CosA + X * SinA;
x = NX + cx;
y = NY + cy;
return [x, y];
}
export function rotateUVs(angle) {
let UV00 = rotate2D(angle, 0, 0, 0.5, 0.5);
let UV01 = rotate2D(angle, 0, 1, 0.5, 0.5);
let UV11 = rotate2D(angle, 1, 1, 0.5, 0.5);
let UV10 = rotate2D(angle, 1, 0, 0.5, 0.5);
return [UV00[0], UV00[1], UV01[0], UV01[1], UV11[0], UV11[1], UV10[0], UV10[1]];
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VpX2NvbXBvbmVudHMvdXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFHdkMsTUFBTSxVQUFVLGlCQUFpQjtJQUMvQixNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQTtJQUNsQyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUE7SUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDM0IsS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLEVBQVUsRUFBRSxFQUFVLEVBQUUsQ0FBUztJQUN2RCxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQzlCLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWMsRUFBRSxHQUFZLEVBQUUsTUFBZSxFQUFFLE1BQWUsRUFBRSxDQUFTO0lBQ3ZHLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUN0QyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDdkMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ3BDLElBQUks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QUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDMUMsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUMxQyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQzFDLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFFMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNqRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJ0BkY2wvc2RrL21hdGgnXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICdAZGNsLXNkay91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbUhleENvbG9yKCk6IHN0cmluZyB7XG4gIGNvbnN0IGxldHRlcnMgPSAnMDEyMzQ1Njc4OUFCQ0RFRidcbiAgbGV0IGNvbG9yID0gJyMnXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgY29sb3IgKz0gbGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxNildXG4gIH1cbiAgcmV0dXJuIGNvbG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbmVsZXJwKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHQ6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAoMSAtIHQpICogdjAgKyB0ICogdjFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUJlemllcihzdGFydDogVmVjdG9yMywgZW5kOiBWZWN0b3IzLCBpbnRlcjE6IFZlY3RvcjMsIGludGVyMjogVmVjdG9yMywgdDogbnVtYmVyKTogVmVjdG9yMyB7XG4gIHZhciBhID0gVmVjdG9yMy5sZXJwKHN0YXJ0LCBpbnRlcjEsIHQpXG4gIHZhciBiID0gVmVjdG9yMy5sZXJwKGludGVyMSwgaW50ZXIyLCB0KVxuICB2YXIgYyA9IFZlY3RvcjMubGVycChpbnRlcjIsIGVuZCwgdClcbiAgdmFyIGQgPSBWZWN0b3IzLmxlcnAoYSwgYiwgdClcbiAgdmFyIGUgPSBWZWN0b3IzLmxlcnAoYiwgYywgdClcbiAgcmV0dXJuIFZlY3RvcjMubGVycChkLCBlLCB0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc21vb3RoUGF0aChjb250cm9sUG9pbnRzOiBWZWN0b3IzW10sIHNtb290aG5lc3M6IG51bWJlcik6IFZlY3RvcjNbXSB7XG4gIGlmIChjb250cm9sUG9pbnRzLmxlbmd0aCA8IDQgfHwgc21vb3RobmVzcyA9PSAwKSB7XG4gICAgcmV0dXJuIFtWZWN0b3IzLlplcm8oKSwgVmVjdG9yMy5aZXJvKCldXG4gIH1cbiAgbGV0IHBhdGggPSBbXVxuXG4gIGZvciAobGV0IHQgPSAwOyB0IDw9IDE7IHQgKz0gMSAvIHNtb290aG5lc3MpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdiZXppZXI6ICcgK1xuICAgICAgICBjYWxjdWxhdGVCZXppZXIoY29udHJvbFBvaW50c1swXSwgY29udHJvbFBvaW50c1szXSwgY29udHJvbFBvaW50c1sxXSwgY29udHJvbFBvaW50c1syXSwgdCkueCArXG4gICAgICAgICcgLCBUaW1lOiAnICtcbiAgICAgICAgdFxuICAgIClcbiAgICBwYXRoLnB1c2goY2FsY3VsYXRlQmV6aWVyKGNvbnRyb2xQb2ludHNbMF0sIGNvbnRyb2xQb2ludHNbM10sIGNvbnRyb2xQb2ludHNbMV0sIGNvbnRyb2xQb2ludHNbMl0sIHQpKVxuICB9XG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaXRjaFNoaWZ0KGN1cnJlbnRQaXRjaDogbnVtYmVyLCBzaGlmdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucG93KDIuMCwgc2hpZnQgLyAxMi4wKSAqIGN1cnJlbnRQaXRjaFxufVxuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlMkQoYW5nbGU6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIsIGNlbnRlclg6IG51bWJlciwgY2VudGVyWTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGFuZ2xlID0gYW5nbGUgJSAzNjBcbiAgLy8gaWYgKGFuZ2xlID4gMTgwKVxuICAvLyBhbmdsZSAtPSAzNjA7XG4gIGxldCBBID0gKGFuZ2xlICogTWF0aC5QSSkgLyAxODBcbiAgbGV0IENvc0EgPSBNYXRoLmNvcyhBKVxuICBsZXQgU2luQSA9IE1hdGguc2luKEEpXG4gIGxldCBjeCA9IGNlbnRlclhcbiAgbGV0IGN5ID0gY2VudGVyWVxuICBsZXQgWCA9IHggLSBjeFxuICBsZXQgWSA9IHkgLSBjeVxuICBsZXQgTlggPSBYICogQ29zQSAtIFkgKiBTaW5BXG4gIGxldCBOWSA9IFkgKiBDb3NBICsgWCAqIFNpbkFcbiAgeCA9IE5YICsgY3hcbiAgeSA9IE5ZICsgY3lcblxuICByZXR1cm4gW3gsIHldXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVVVnMoYW5nbGU6IG51bWJlcik6IG51bWJlcltdIHtcbiAgbGV0IFVWMDAgPSByb3RhdGUyRChhbmdsZSwgMCwgMCwgMC41LCAwLjUpXG4gIGxldCBVVjAxID0gcm90YXRlMkQoYW5nbGUsIDAsIDEsIDAuNSwgMC41KVxuICBsZXQgVVYxMSA9IHJvdGF0ZTJEKGFuZ2xlLCAxLCAxLCAwLjUsIDAuNSlcbiAgbGV0IFVWMTAgPSByb3RhdGUyRChhbmdsZSwgMSwgMCwgMC41LCAwLjUpXG5cbiAgcmV0dXJuIFtVVjAwWzBdLCBVVjAwWzFdLCBVVjAxWzBdLCBVVjAxWzFdLCBVVjExWzBdLCBVVjExWzFdLCBVVjEwWzBdLCBVVjEwWzFdXVxufVxuIl19