phaser4-rex-plugins
Version:
331 lines (285 loc) • 15.5 kB
TypeScript
import Point from '../point/Point';
import Circle from '../circle/Circle';
import Line from '../line/Line';
import { Vector2Like } from '../types';
/**
* A triangle is a plane created by connecting three points.
* The first two arguments specify the first point, the middle two arguments
* specify the second point, and the last two arguments specify the third point.
*/
declare class Triangle {
/**
*
* @param x1 `x` coordinate of the first point. Default 0.
* @param y1 `y` coordinate of the first point. Default 0.
* @param x2 `x` coordinate of the second point. Default 0.
* @param y2 `y` coordinate of the second point. Default 0.
* @param x3 `x` coordinate of the third point. Default 0.
* @param y3 `y` coordinate of the third point. Default 0.
*/
constructor(x1?: number, y1?: number, x2?: number, y2?: number, x3?: number, y3?: number);
/**
* Returns the area of a Triangle.
* @param triangle The Triangle to use.
*/
static Area(triangle: Triangle): number;
/**
* Builds an equilateral triangle. In the equilateral triangle, all the sides are the same length (congruent) and all the angles are the same size (congruent).
* The x/y specifies the top-middle of the triangle (x1/y1) and length is the length of each side.
* @param x x coordinate of the top point of the triangle.
* @param y y coordinate of the top point of the triangle.
* @param length Length of each side of the triangle.
*/
static BuildEquilateral(x: number, y: number, length: number): Triangle;
/**
* Takes an array of vertex coordinates, and optionally an array of hole indices, then returns an array
* of Triangle instances, where the given vertices have been decomposed into a series of triangles.
* @param data A flat array of vertex coordinates like [x0,y0, x1,y1, x2,y2, ...]
* @param holes An array of hole indices if any (e.g. [5, 8] for a 12-vertex input would mean one hole with vertices 5–7 and another with 8–11). Default null.
* @param scaleX Horizontal scale factor to multiply the resulting points by. Default 1.
* @param scaleY Vertical scale factor to multiply the resulting points by. Default 1.
* @param out An array to store the resulting Triangle instances in. If not provided, a new array is created.
*/
static BuildFromPolygon<O extends Triangle[]>(data: any[], holes?: any[], scaleX?: number, scaleY?: number, out?: O): O;
/**
* Builds a right triangle, i.e. one which has a 90-degree angle and two acute angles.
* @param x The X coordinate of the right angle, which will also be the first X coordinate of the constructed Triangle.
* @param y The Y coordinate of the right angle, which will also be the first Y coordinate of the constructed Triangle.
* @param width The length of the side which is to the left or to the right of the right angle.
* @param height The length of the side which is above or below the right angle.
*/
static BuildRight(x: number, y: number, width: number, height: number): Triangle;
/**
* Positions the Triangle so that it is centered on the given coordinates.
* @param triangle The triangle to be positioned.
* @param x The horizontal coordinate to center on.
* @param y The vertical coordinate to center on.
* @param centerFunc The function used to center the triangle. Defaults to Centroid centering.
*/
static CenterOn<O extends Triangle>(triangle: O, x: number, y: number, centerFunc?: CenterFunction): O;
/**
* Calculates the position of a Triangle's centroid, which is also its center of mass (center of gravity).
*
* The centroid is the point in a Triangle at which its three medians (the lines drawn from the vertices to the bisectors of the opposite sides) meet. It divides each one in a 2:1 ratio.
* @param triangle The Triangle to use.
* @param out An object to store the coordinates in.
*/
static Centroid<O extends Point>(triangle: Triangle, out?: O): O;
/**
* Computes the circumcentre of a triangle. The circumcentre is the centre of
* the circumcircle, the smallest circle which encloses the triangle. It is also
* the common intersection point of the perpendicular bisectors of the sides of
* the triangle, and is the only point which has equal distance to all three
* vertices of the triangle.
* @param triangle The Triangle to get the circumcenter of.
* @param out The Vector2 object to store the position in. If not given, a new Vector2 instance is created.
*/
static CircumCenter(triangle: Triangle, out?: Vector2Like): Vector2Like;
/**
* Finds the circumscribed circle (circumcircle) of a Triangle object. The circumcircle is the circle which touches all of the triangle's vertices.
* @param triangle The Triangle to use as input.
* @param out An optional Circle to store the result in.
*/
static CircumCircle(triangle: Triangle, out?: Circle): Circle;
/**
* Clones a Triangle object.
* @param source The Triangle to clone.
*/
static Clone(source: Triangle): Triangle;
/**
* Checks if a point (as a pair of coordinates) is inside a Triangle's bounds.
* @param triangle The Triangle to check.
* @param x The X coordinate of the point to check.
* @param y The Y coordinate of the point to check.
*/
static Contains(triangle: Triangle, x: number, y: number): boolean;
/**
* Filters an array of point-like objects to only those contained within a triangle.
* If `returnFirst` is true, will return an array containing only the first point in the provided array that is within the triangle (or an empty array if there are no such points).
* @param triangle The triangle that the points are being checked in.
* @param points An array of point-like objects (objects that have an `x` and `y` property)
* @param returnFirst If `true`, return an array containing only the first point found that is within the triangle. Default false.
* @param out If provided, the points that are within the triangle will be appended to this array instead of being added to a new array. If `returnFirst` is true, only the first point found within the triangle will be appended. This array will also be returned by this function.
*/
static ContainsArray(triangle: Triangle, points: Point[], returnFirst?: boolean, out?: any[]): Point[];
/**
* Tests if a triangle contains a point.
* @param triangle The triangle.
* @param point The point to test, or any point-like object with public `x` and `y` properties.
*/
static ContainsPoint(triangle: Triangle, point: Vector2Like): boolean;
/**
* Copy the values of one Triangle to a destination Triangle.
* @param source The source Triangle to copy the values from.
* @param dest The destination Triangle to copy the values to.
*/
static CopyFrom<O extends Triangle>(source: Triangle, dest: O): O;
/**
* Decomposes a Triangle into an array of its points.
* @param triangle The Triangle to decompose.
* @param out An array to store the points into.
*/
static Decompose(triangle: Triangle, out?: any[]): any[];
/**
* Returns true if two triangles have the same coordinates.
* @param triangle The first triangle to check.
* @param toCompare The second triangle to check.
*/
static Equals(triangle: Triangle, toCompare: Triangle): boolean;
/**
* Returns a Point from around the perimeter of a Triangle.
* @param triangle The Triangle to get the point on its perimeter from.
* @param position The position along the perimeter of the triangle. A value between 0 and 1.
* @param out An option Point, or Point-like object to store the value in. If not given a new Point will be created.
*/
static GetPoint<O extends Point>(triangle: Triangle, position: number, out?: O): O;
/**
* Returns an array of evenly spaced points on the perimeter of a Triangle.
* @param triangle The Triangle to get the points from.
* @param quantity The number of evenly spaced points to return. Set to 0 to return an arbitrary number of points based on the `stepRate`.
* @param stepRate If `quantity` is 0, the distance between each returned point.
* @param out An array to which the points should be appended.
*/
static GetPoints<O extends Point>(triangle: Triangle, quantity: number, stepRate: number, out?: O): O;
/**
* Calculates the position of the incenter of a Triangle object. This is the point where its three angle bisectors meet and it's also the center of the incircle, which is the circle inscribed in the triangle.
* @param triangle The Triangle to find the incenter of.
* @param out An optional Point in which to store the coordinates.
*/
static InCenter<O extends Point>(triangle: Triangle, out?: O): O;
/**
* Moves each point (vertex) of a Triangle by a given offset, thus moving the entire Triangle by that offset.
* @param triangle The Triangle to move.
* @param x The horizontal offset (distance) by which to move each point. Can be positive or negative.
* @param y The vertical offset (distance) by which to move each point. Can be positive or negative.
*/
static Offset<O extends Triangle>(triangle: O, x: number, y: number): O;
/**
* Gets the length of the perimeter of the given triangle.
* Calculated by adding together the length of each of the three sides.
* @param triangle The Triangle to get the length from.
*/
static Perimeter(triangle: Triangle): number;
/**
* Returns a random Point from within the area of the given Triangle.
* @param triangle The Triangle to get a random point from.
* @param out The Point object to store the position in. If not given, a new Point instance is created.
*/
static Random<O extends Point>(triangle: Triangle, out?: O): O;
/**
* Rotates a Triangle about its incenter, which is the point at which its three angle bisectors meet.
* @param triangle The Triangle to rotate.
* @param angle The angle by which to rotate the Triangle, in radians.
*/
static Rotate<O extends Triangle>(triangle: O, angle: number): O;
/**
* Rotates a Triangle at a certain angle about a given Point or object with public `x` and `y` properties.
* @param triangle The Triangle to rotate.
* @param point The Point to rotate the Triangle about.
* @param angle The angle by which to rotate the Triangle, in radians.
*/
static RotateAroundPoint<O extends Triangle>(triangle: O, point: Point, angle: number): O;
/**
* Rotates an entire Triangle at a given angle about a specific point.
* @param triangle The Triangle to rotate.
* @param x The X coordinate of the point to rotate the Triangle about.
* @param y The Y coordinate of the point to rotate the Triangle about.
* @param angle The angle by which to rotate the Triangle, in radians.
*/
static RotateAroundXY<O extends Triangle>(triangle: O, x: number, y: number, angle: number): O;
/**
* The geometry constant type of this object: `GEOM_CONST.TRIANGLE`.
* Used for fast type comparisons.
*/
readonly type: number;
/**
* `x` coordinate of the first point.
*/
x1: number;
/**
* `y` coordinate of the first point.
*/
y1: number;
/**
* `x` coordinate of the second point.
*/
x2: number;
/**
* `y` coordinate of the second point.
*/
y2: number;
/**
* `x` coordinate of the third point.
*/
x3: number;
/**
* `y` coordinate of the third point.
*/
y3: number;
/**
* Checks whether a given points lies within the triangle.
* @param x The x coordinate of the point to check.
* @param y The y coordinate of the point to check.
*/
contains(x: number, y: number): boolean;
/**
* Returns a specific point on the triangle.
* @param position Position as float within `0` and `1`. `0` equals the first point.
* @param output Optional Point, or point-like object, that the calculated point will be written to.
*/
getPoint<O extends Point>(position: number, output?: O): O;
/**
* Calculates a list of evenly distributed points on the triangle. It is either possible to pass an amount of points to be generated (`quantity`) or the distance between two points (`stepRate`).
* @param quantity Number of points to be generated. Can be falsey when `stepRate` should be used. All points have the same distance along the triangle.
* @param stepRate Distance between two points. Will only be used when `quantity` is falsey.
* @param output Optional Array for writing the calculated points into. Otherwise a new array will be created.
*/
getPoints<O extends Point[]>(quantity: number, stepRate?: number, output?: O): O;
/**
* Returns a random point along the triangle.
* @param point Optional `Point` that should be modified. Otherwise a new one will be created.
*/
getRandomPoint<O extends Point>(point?: O): O;
/**
* Sets all three points of the triangle. Leaving out any coordinate sets it to be `0`.
* @param x1 `x` coordinate of the first point. Default 0.
* @param y1 `y` coordinate of the first point. Default 0.
* @param x2 `x` coordinate of the second point. Default 0.
* @param y2 `y` coordinate of the second point. Default 0.
* @param x3 `x` coordinate of the third point. Default 0.
* @param y3 `y` coordinate of the third point. Default 0.
*/
setTo(x1?: number, y1?: number, x2?: number, y2?: number, x3?: number, y3?: number): this;
/**
* Returns a Line object that corresponds to Line A of this Triangle.
* @param line A Line object to set the results in. If `undefined` a new Line will be created.
*/
getLineA(line?: Line): Line;
/**
* Returns a Line object that corresponds to Line B of this Triangle.
* @param line A Line object to set the results in. If `undefined` a new Line will be created.
*/
getLineB(line?: Line): Line;
/**
* Returns a Line object that corresponds to Line C of this Triangle.
* @param line A Line object to set the results in. If `undefined` a new Line will be created.
*/
getLineC(line?: Line): Line;
/**
* Left most X coordinate of the triangle. Setting it moves the triangle on the X axis accordingly.
*/
left: number;
/**
* Right most X coordinate of the triangle. Setting it moves the triangle on the X axis accordingly.
*/
right: number;
/**
* Top most Y coordinate of the triangle. Setting it moves the triangle on the Y axis accordingly.
*/
top: number;
/**
* Bottom most Y coordinate of the triangle. Setting it moves the triangle on the Y axis accordingly.
*/
bottom: number;
}
export default Triangle;