gibbon.js
Version:
Actor/Component system for use with pixi.js.
48 lines (37 loc) • 1.28 kB
text/typescript
import { Point, Polygon } from "pixi.js";
import type { Rectangle } from 'pixi.js';
/**
* Return random point in Rectangle.
* @param {Rectangle} r
* @returns {Point}
*/
export const randInRect = (r: Rectangle) => {
return new Point(r.x + Math.random() * r.width, r.y + Math.random() * r.height)
}
/**
* @returns {number} random integer in min,max inclusive
*/
export const randInt = (min: number, max: number) => { return min + Math.floor(Math.random() * (max + 1 - min)) }
/**
* @returns Random float f, min <= f < max
*/
export const randFloat = (min: number, max: number) => { return min + (Math.random() * (max - min)) }
/**
* Create random polygon centered on 0,0.
* @param {number} minPoints
* @param {number} maxPoints
* @param {number} minRadius
* @param {number} maxRadius
*/
export function randPoly(minPoints = 3, maxPoints = 4, minRadius = 4, maxRadius = 10) {
const len = randInt(minPoints, maxPoints);
const step = 2 * Math.PI / maxPoints;
const pts = new Array(len);
let theta = 0;
for (let i = 0; i < len; i++) {
const r = minRadius + Math.random() * (maxRadius - minRadius);
pts[i] = new Point(r * Math.cos(theta), r * Math.sin(theta));
theta += step;
}
return new Polygon(pts);
}