import { ASObject } from '@awayfl/avm2';
import { Point as AwayPoint } from '@awayjs/core';
import { SecurityDomain } from '../SecurityDomain';
export class Point extends ASObject {
private _constructorCalled: boolean = true;
private _adaptee: AwayPoint;
// Called whenever the class is initialized.
static classInitializer: any = null;
// List of static symbols to link.
static classSymbols: string [] = null; // ["interpolate", "distance", "polar"];
// List of instance symbols to link.
static instanceSymbols: string [] = null;
public get adaptee(): AwayPoint {
return this._adaptee;
}
/**
* The horizontal coordinate of the point. The default value is 0.
*/
public get x(): number {
if (!this._constructorCalled) {
console.warn('[Point] Read x before call constructor');
return 0;
}
return this._adaptee._rawData[0];
}
public set x(value: number) {
this._adaptee._rawData[0] = value;
}
/**
* The vertical coordinate of the point. The default value is 0.
*/
public get y(): number {
if (!this._constructorCalled) {
console.warn('[Point] Read y before call constructor');
return 0;
}
return this._adaptee._rawData[1];
}
public set y(value: number) {
this._adaptee._rawData[1] = value;
}
/**
* The length of the line segment from(0,0) to this point.
*/
public get length(): number {
return this._adaptee.length;
}
/**
* Creates a new point. If you pass no parameters to this method, a point is
* created at(0,0).
*
* @param x The horizontal coordinate.
* @param y The vertical coordinate.
*/
constructor(xAdaptee: number | AwayPoint = 0, y: number = 0) {
super();
this._adaptee = (xAdaptee instanceof AwayPoint) ? xAdaptee : new AwayPoint(+xAdaptee, +y);
this._constructorCalled = true;
}
/**
* Determines a point between two specified points. The parameter
* f determines where the new interpolated point is located
* relative to the two end points specified by parameters pt1
* and pt2. The closer the value of the parameter f
* is to 1.0, the closer the interpolated point is to the first
* point(parameter pt1). The closer the value of the parameter
* f is to 0, the closer the interpolated point is to the second
* point(parameter pt2).
*
* @param pt1 The first point.
* @param pt2 The second point.
* @param f The level of interpolation between the two points. Indicates
* where the new point will be, along the line between
* pt1 and pt2. If f=1,
* pt1 is returned; if f=0,
* pt2 is returned.
* @return The new, interpolated point.
*/
public static interpolate(pt1: Point, pt2: Point, f: number): Point {
return new ( this.sec).flash.geom.Point(AwayPoint.interpolate(pt1.adaptee, pt2.adaptee, f));
}
/**
* Returns the distance between pt1 and pt2.
*
* @param pt1 The first point.
* @param pt2 The second point.
* @return The distance between the first and second points.
*/
public static distance(pt1: Point, pt2: Point): number {
return AwayPoint.distance(pt1.adaptee, pt2.adaptee);
}
/**
* Converts a pair of polar coordinates to a Cartesian point coordinate.
*
* @param len The length coordinate of the polar pair.
* @param angle The angle, in radians, of the polar pair.
* @return The Cartesian point.
*/
public static polar(len: number, angle: number): Point {
return new ( this.sec).flash.geom.Point(AwayPoint.polar(+len, +angle));
}
/**
* Creates a copy of this Point object.
*
* @return The new Point object.
*/
public clone(): Point {
return new ( this.sec).flash.geom.Point(this._adaptee.clone());
}
/**
* Offsets the Point object by the specified amount. The value of
* dx is added to the original value of x to create the
* new x value. The value of dy is added to the original
* value of y to create the new y value.
*
* @param dx The amount by which to offset the horizontal coordinate,
* x.
* @param dy The amount by which to offset the vertical coordinate, y.
*/
public offset(dx: number, dy: number): void {
this._adaptee.offset(dx, dy);
}
/**
* Determines whether two points are equal. Two points are equal if they have
* the same x and y values.
*
* @param toCompare The point to be compared.
* @return A value of true if the object is equal to this Point
* object; false if it is not equal.
*/
public equals(toCompare: Point): boolean {
return this._adaptee.equals(toCompare.adaptee);
}
/**
* Subtracts the coordinates of another point from the coordinates of this
* point to create a new point.
*
* @param v The point to be subtracted.
* @return The new point.
*/
public subtract(v: Point): Point {
return new ( this.sec).flash.geom.Point(this._adaptee.subtract(v.adaptee));
}
/**
* Adds the coordinates of another point to the coordinates of this point to
* create a new point.
*
* @param v The point to be added.
* @return The new point.
*/
public add(v: Point): Point {
return new ( this.sec).flash.geom.Point(this._adaptee.add(v.adaptee));
}
/**
* Scales the line segment between(0,0) and the current point to a set
* length.
*
* @param thickness The scaling value. For example, if the current point is
* (0,5), and you normalize it to 1, the point returned is
* at(0,1).
*/
public normalize(thickness: number = 1): void {
this._adaptee.normalize(+thickness);
}
public copyFrom(sourcePoint: Point): void {
this._adaptee.copyFrom(sourcePoint.adaptee);
}
public setTo(x: number, y: number): void {
this._adaptee.setTo(x, y);
}
public toString(): string {
return '(x=' + this.x + ', y=' + this.y + ')';
}
}