Files
esengine/extensions/ecs-tween/lib/framework.d.ts

6522 lines
223 KiB
TypeScript
Raw Normal View History

declare module es {
/**
*
*/
class Core {
/**
*
*/
static emitter: Emitter<CoreEvents>;
static paused: boolean;
/**
*
*/
static debugRenderEndabled: boolean;
/**
* 访
*/
private static _instance;
/**
* 使EntitySystems
*/
static entitySystemsEnabled: boolean;
/**
* debug模式
* create时进行更改
*/
readonly debug: boolean;
_nextScene: Scene;
/**
* GraphicsDeviceReset事件
*/
_graphicsDeviceChangeTimer: ITimer;
/**
* 访
*/
_globalManagers: GlobalManager[];
_coroutineManager: CoroutineManager;
_timerManager: TimerManager;
private constructor();
/**
* /访
* @constructor
*/
static readonly Instance: Core;
_frameCounterElapsedTime: number;
_frameCounter: number;
_totalMemory: number;
_titleMemory: (totalMemory: number, frameCounter: number) => void;
_scene: Scene;
/**
*
*/
/**
*
* @param value
*/
static scene: Scene;
/**
*
*/
static create(debug?: boolean): Core;
/**
*
* @param manager
*/
static registerGlobalManager(manager: es.GlobalManager): void;
/**
*
* @param manager
*/
static unregisterGlobalManager(manager: es.GlobalManager): void;
/**
* T的全局管理器
* @param type
*/
static getGlobalManager<T extends es.GlobalManager>(type: new (...args: any[]) => T): T;
/**
* coroutineCoroutine可以将number延时几秒或延时到其他startCoroutine.Yielding
* null将使coroutine在下一帧被执行
* @param enumerator
*/
static startCoroutine(enumerator: any): ICoroutine;
/**
*
* @param timeInSeconds
* @param repeats
* @param context
* @param onTime
*/
static schedule(timeInSeconds: number, repeats: boolean, context: any, onTime: (timer: ITimer) => void): Timer;
startDebugDraw(): void;
/**
*
*/
onSceneChanged(): void;
protected initialize(): void;
protected update(currentTime?: number): Promise<void>;
}
}
declare module es {
enum LogType {
error = 0,
warn = 1,
log = 2,
info = 3,
trace = 4
}
class Debug {
static warnIf(condition: boolean, format: string, ...args: any[]): void;
static warn(format: string, ...args: any[]): void;
static error(format: string, ...args: any[]): void;
static log(type: LogType, format: string, ...args: any[]): void;
}
}
declare module es {
/**
* Debug.drawText等
* CLASS-THING使
*/
class DebugDefault {
static debugText: number;
static colliderBounds: number;
static colliderEdge: number;
static colliderPosition: number;
static colliderCenter: number;
static renderableBounds: number;
static renderableCenter: number;
static verletParticle: number;
static verletConstraintEdge: number;
}
}
declare module es {
class Insist {
static fail(message?: string, ...args: any[]): void;
static isTrue(condition: boolean, message?: string, ...args: any[]): void;
static isFalse(condition: boolean, message?: string, ...args: any[]): void;
static isNull(obj: any, message?: string, ...args: any[]): void;
static isNotNull(obj: any, message?: string, ...args: any[]): void;
static areEqual(first: any, second: any, message: string, ...args: any[]): void;
static areNotEqual(first: any, second: any, message: string, ...args: any[]): void;
}
}
declare module es {
/**
*
* - onAddedToEntity
* - OnEnabled
*
*
* - onRemovedFromEntity
*/
abstract class Component {
static _idGenerator: number;
/**
*
*/
readonly id: number;
/**
*
*/
entity: Entity;
constructor();
/**
* 访 this.entity.transform
*/
readonly transform: Transform;
private _enabled;
/**
* onEnabled/onDisable
*/
/**
* onEnabled/onDisable
* @param value
*/
enabled: boolean;
private _updateOrder;
/** 更新此实体上组件的顺序 */
/** 更新此实体上组件的顺序 */
updateOrder: number;
/**
* 西访
*/
initialize(): void;
/**
*
*/
onAddedToEntity(): void;
/**
*
*/
onRemovedFromEntity(): void;
/**
*
* @param comp
*/
onEntityTransformChanged(comp: ComponentTransform): void;
debugRender(batcher: IBatcher): void;
/**
*
*/
onEnabled(): void;
/**
*
*/
onDisabled(): void;
setEnabled(isEnabled: boolean): this;
setUpdateOrder(updateOrder: number): this;
}
}
declare module es {
class ComponentType {
static INDEX: number;
private index_;
private type_;
constructor(type: Class, index?: number);
getName(): string;
getIndex(): number;
toString(): string;
}
}
declare module es {
enum CoreEvents {
/**
*
*/
sceneChanged = 0,
/**
*
*/
frameUpdated = 1,
/**
*
*/
renderChanged = 2
}
}
declare module es {
class EntityComparer implements IComparer<Entity> {
compare(self: Entity, other: Entity): number;
}
class Entity implements IEqualityComparable {
static entityComparer: IComparer<Entity>;
/**
*
*/
scene: Scene;
/**
*
*/
name: string;
/**
*
*/
readonly id: number;
/**
* //
*/
readonly transform: Transform;
/**
*
*/
readonly components: ComponentList;
/**
* entity update方法的频率12
*/
updateInterval: number;
componentBits: Bits;
constructor(name: string, id: number);
_isDestroyed: boolean;
/**
* destroytrue
*/
readonly isDestroyed: boolean;
private _tag;
/**
* 使使
*/
/**
* 使使
* @param value
*/
tag: number;
private _enabled;
/**
* /
*/
/**
* /
* @param value
*/
enabled: boolean;
private _updateOrder;
/**
* updateOrder还用于对scene.entities上的标签列表进行排序
*/
/**
* updateOrder还用于对scene.entities上的标签列表进行排序
* @param value
*/
updateOrder: number;
parent: Transform;
readonly childCount: number;
position: Vector2;
localPosition: Vector2;
rotation: number;
rotationDegrees: number;
localRotation: number;
localRotationDegrees: number;
scale: Vector2;
localScale: Vector2;
readonly worldInverseTransform: Matrix2D;
readonly localToWorldTransform: Matrix2D;
readonly worldToLocalTransform: Matrix2D;
onTransformChanged(comp: ComponentTransform): void;
setParent(parent: Entity): any;
setParent(parent: Transform): any;
setPosition(x: number, y: number): this;
setLocalPosition(localPosition: Vector2): this;
setRotation(radians: number): this;
setRotationDegrees(degrees: number): this;
setLocalRotation(radians: number): this;
setLocalRotationDegrees(degrees: number): this;
setScale(scale: number): any;
setScale(scale: Vector2): any;
setLocalScale(scale: number): any;
setLocalScale(scale: Vector2): any;
/**
*
* @param tag
*/
setTag(tag: number): Entity;
/**
*
* @param isEnabled
*/
setEnabled(isEnabled: boolean): this;
/**
* updateOrder还用于对scene.entities上的标签列表进行排序
* @param updateOrder
*/
setUpdateOrder(updateOrder: number): this;
/**
*
*/
destroy(): void;
/**
* 下面的生命周期方法将被调用在组件上:OnRemovedFromEntity
*/
detachFromScene(): void;
/**
*
* @param newScene
*/
attachToScene(newScene: Scene): void;
/**
*
*/
onAddedToScene(): void;
/**
*
*/
onRemovedFromScene(): void;
/**
*
*/
update(): void;
debugRender(batcher: IBatcher): void;
/**
*
* @param componentType
*/
createComponent<T extends Component>(componentType: new (...args: any[]) => T): T;
/**
*
* @param component
*/
addComponent<T extends Component>(component: T): T;
/**
* T的第一个组件并返回它null
* @param type
*/
getComponent<T extends Component>(type: new (...args: any[]) => T): T;
/**
* T的第一个并已加入场景的组件并返回它null
* @param type
* @returns
*/
getComponentInScene<T extends Component>(type: new (...args: any[]) => T): T;
/**
* T类型的组件false
* @param type
* @param outComponent
* @returns
*/
tryGetComponent<T extends Component>(type: new (...args: any[]) => T, outComponent: Ref<T>): boolean;
/**
*
* @param type
*/
hasComponent<T extends Component>(type: new (...args: any[]) => T): boolean;
/**
* T的第一个组件并返回它
* @param type
*/
getOrCreateComponent<T extends Component>(type: new (...args: any[]) => T): T;
/**
* typeName类型的所有组件使
* @param typeName
* @param componentList
*/
getComponents(typeName: any, componentList?: any): any[];
/**
*
* @param component
*/
removeComponent(component: Component): void;
/**
* T的第一个组件
* @param type
*/
removeComponentForType<T extends Component>(type: any): boolean;
/**
*
*/
removeAllComponents(): void;
tweenPositionTo(to: Vector2, duration?: number): ITween<Vector2>;
tweenLocalPositionTo(to: Vector2, duration?: number): ITween<Vector2>;
tweenScaleTo(to: Vector2, duration?: number): any;
tweenScaleTo(to: number, duration?: number): any;
tweenLocalScaleTo(to: Vector2, duration?: any): any;
tweenLocalScaleTo(to: number, duration?: any): any;
tweenRotationDegreesTo(to: number, duration?: number): TransformVector2Tween;
tweenLocalRotationDegreesTo(to: number, duration?: number): TransformVector2Tween;
compareTo(other: Entity): number;
equals(other: Entity): boolean;
getHashCode(): number;
toString(): string;
}
}
declare module es {
/** 2d 向量 */
class Vector2 implements IEquatable<Vector2> {
x: number;
y: number;
/**
* X和Y的二维向量
* @param x x坐标
* @param y y坐标
*/
constructor(x?: number, y?: number);
static readonly zero: Vector2;
static readonly one: Vector2;
static readonly unitX: Vector2;
static readonly unitY: Vector2;
static readonly up: Vector2;
static readonly down: Vector2;
static readonly left: Vector2;
static readonly right: Vector2;
/**
*
* @param value1
* @param value2
*/
static add(value1: Vector2, value2: Vector2): Vector2;
/**
*
* @param value1
* @param value2
*/
static divide(value1: Vector2, value2: Vector2): Vector2;
static divideScaler(value1: Vector2, value2: number): Vector2;
/**
*
* @param value1
* @param value2
*/
static sqrDistance(value1: Vector2, value2: Vector2): number;
/**
*
* @param value1
* @param min
* @param max
*/
static clamp(value1: Vector2, min: Vector2, max: Vector2): Vector2;
/**
* Vector2线
* @param value1
* @param value2
* @param amount (0.0-1.0)
* @returns 线
*/
static lerp(value1: Vector2, value2: Vector2, amount: number): Vector2;
/**
* Vector2线
* @param value1
* @param value2
* @param amount
* @returns
*/
static lerpPrecise(value1: Vector2, value2: Vector2, amount: number): Vector2;
/**
* Vector2Vector2包含了通过指定的Matrix进行的二维向量变换
* @param position
* @param matrix
*/
static transform(position: Vector2, matrix: Matrix2D): Vector2;
/**
* Vector2Matrix转换的指定法线
* @param normal
* @param matrix
*/
static transformNormal(normal: Vector2, matrix: Matrix): Vector2;
/**
*
* @param value1
* @param value2
* @returns
*/
static distance(vec1: Vector2, vec2: Vector2): number;
/**
*
* @param from
* @param to
*/
static angle(from: Vector2, to: Vector2): number;
/**
* Vector2
* @param value
* @returns
*/
static negate(value: Vector2): Vector2;
/**
* Vector2线
* @param vector
* @param normal
* @returns
*/
static reflect(vector: Vector2, normal: Vector2): Vector2;
/**
* Vector2
* @param value1
* @param value2
* @param amount
* @returns
*/
static smoothStep(value1: Vector2, value2: Vector2, amount: number): Vector2;
setTo(x: number, y: number): void;
negate(): Vector2;
/**
*
* @param value
*/
add(v: Vector2): Vector2;
addEqual(v: Vector2): Vector2;
/**
*
* @param value
*/
divide(value: Vector2): Vector2;
divideScaler(value: number): Vector2;
/**
*
* @param value
*/
multiply(value: Vector2): Vector2;
/**
*
* @param value
* @returns
*/
multiplyScaler(value: number): Vector2;
/**
* Vector2减去一个Vector2
* @param value Vector2
* @returns Vector2
*/
sub(value: Vector2): Vector2;
subEqual(v: Vector2): Vector2;
dot(v: Vector2): number;
/**
*
* @param size
* @returns
*/
scale(size: number): Vector2;
scaleEqual(size: number): Vector2;
transform(matrix: Matrix2D): Vector2;
normalize(): Vector2;
/**
* Vector2变成一个方向相同的单位向量
*/
normalizeEqual(): Vector2;
magnitude(): number;
distance(v?: Vector2): number;
/**
* Vector2的平方长度
* @returns Vector2的平方长度
*/
lengthSquared(): number;
/**
* X和Y值
*/
round(): Vector2;
/**
*
* @param left
* @param right
*/
angleBetween(left: Vector2, right: Vector2): number;
/**
*
* @param other
* @returns true false
*/
equals(other: Vector2, tolerance?: number): boolean;
isValid(): boolean;
/**
* Vector2
* @param value1
* @param value2
* @returns
*/
static min(value1: Vector2, value2: Vector2): Vector2;
/**
* Vector2
* @param value1
* @param value2
* @returns
*/
static max(value1: Vector2, value2: Vector2): Vector2;
/**
* Vector2Hermite样条插值
* @param value1
* @param tangent1
* @param value2
* @param tangent2
* @param amount
* @returns
*/
static hermite(value1: Vector2, tangent1: Vector2, value2: Vector2, tangent2: Vector2, amount: number): Vector2;
static unsignedAngle(from: Vector2, to: Vector2, round?: boolean): number;
clone(): Vector2;
}
}
declare module es {
/** 场景 */
class Scene {
camera: ICamera;
/** 这个场景中的实体列表 */
readonly entities: EntityList;
readonly renderableComponents: RenderableComponentList;
/** 管理所有实体处理器 */
readonly entityProcessors: EntityProcessorList;
readonly _sceneComponents: SceneComponent[];
_renderers: Renderer[];
readonly identifierPool: IdentifierPool;
private _didSceneBegin;
constructor();
/**
*
* begin之前contructor中调用这个函数
*/
initialize(): void;
/**
* Core将这个场景设置为活动场景时
*/
onStart(): void;
/**
*
* Core把这个场景从活动槽中移除时
*/
unload(): void;
begin(): void;
end(): void;
update(): void;
render(): void;
addRenderer<T extends Renderer>(renderer: T): T;
getRenderer<T extends Renderer>(type: new (...args: any[]) => T): T;
removeRenderer(renderer: Renderer): void;
/**
* SceneComponent
* @param component
*/
addSceneComponent<T extends SceneComponent>(component: T): T;
/**
* T的第一个SceneComponent并返回它null
* @param type
*/
getSceneComponent<T extends SceneComponent>(type: any): T;
/**
* T的第一个SceneComponent并返回它SceneComponentSceneComponent
* @param type
*/
getOrCreateSceneComponent<T extends SceneComponent>(type: any): T;
/**
* SceneComponents列表中删除一个SceneComponent
* @param component
*/
removeSceneComponent(component: SceneComponent): void;
/**
*
* @param name
*/
createEntity(name: string): Entity;
/**
*
* @param entity
*/
addEntity(entity: Entity): Entity;
/**
*
*/
destroyAllEntities(): void;
/**
*
* @param name
*/
findEntity(name: string): Entity;
findEntityById(id: number): Entity;
/**
*
* @param tag
*/
findEntitiesWithTag(tag: number): Entity[];
/**
*
* @param tag
* @returns
*/
findEntityWithTag(tag: number): Entity;
/**
* T的组件
* @param type
*/
findComponentOfType<T extends Component>(type: new (...args: any[]) => T): T;
/**
* T的所有已启用已加载组件的列表
* @param type
*/
findComponentsOfType<T extends Component>(type: new (...args: any[]) => T): T[];
/**
*
* @param type
* @returns
*/
findEntitiesOfComponent(...types: any[]): Entity[];
/**
* EntitySystem处理器
* @param processor
*/
addEntityProcessor(processor: EntitySystem): EntitySystem;
/**
* EntitySystem处理器
* @param processor
*/
removeEntityProcessor(processor: EntitySystem): void;
/**
* EntitySystem处理器
*/
getEntityProcessor<T extends EntitySystem>(type: new (...args: any[]) => T): T;
}
}
declare module es {
enum ComponentTransform {
position = 0,
scale = 1,
rotation = 2
}
enum DirtyType {
clean = 0,
positionDirty = 1,
scaleDirty = 2,
rotationDirty = 4
}
class Transform {
/** 与此转换关联的实体 */
readonly entity: Entity;
hierarchyDirty: DirtyType;
_localDirty: boolean;
_localPositionDirty: boolean;
_localScaleDirty: boolean;
_localRotationDirty: boolean;
_positionDirty: boolean;
_worldToLocalDirty: boolean;
_worldInverseDirty: boolean;
/**
*
*/
_localTransform: Matrix2D;
/**
*
*/
_worldTransform: Matrix2D;
_rotationMatrix: Matrix2D;
_translationMatrix: Matrix2D;
_scaleMatrix: Matrix2D;
_children: Transform[];
constructor(entity: Entity);
/**
*
*/
readonly childCount: number;
/**
*
*/
/**
*
* @param value
*/
rotationDegrees: number;
/**
*
*/
/**
*
* @param value
*/
localRotationDegrees: number;
readonly localToWorldTransform: Matrix2D;
_parent: Transform;
/**
*
*/
/**
*
* @param value
*/
parent: Transform;
_worldToLocalTransform: Matrix2D;
readonly worldToLocalTransform: Matrix2D;
_worldInverseTransform: Matrix2D;
readonly worldInverseTransform: Matrix2D;
_position: Vector2;
/**
*
*/
/**
*
* @param value
*/
position: Vector2;
_scale: Vector2;
/**
*
*/
/**
*
* @param value
*/
scale: Vector2;
_rotation: number;
/**
*
*/
/**
*
* @param value
*/
rotation: number;
_localPosition: Vector2;
/**
* transform.position相同
*/
/**
* transform.position相同
* @param value
*/
localPosition: Vector2;
_localScale: Vector2;
/**
* transform.scale相同
*/
/**
* transform.scale相同
* @param value
*/
localScale: Vector2;
_localRotation: number;
/**
* transform.rotation相同
*/
/**
* transform.rotation相同
* @param value
*/
localRotation: number;
/**
*
* @param index
*/
getChild(index: number): Transform;
/**
*
* @param parent
*/
setParent(parent: Transform): Transform;
/**
*
* @param x
* @param y
*/
setPosition(x: number, y: number): Transform;
/**
* transform.position相同
* @param localPosition
*/
setLocalPosition(localPosition: Vector2): Transform;
/**
*
* @param radians
*/
setRotation(radians: number): Transform;
/**
*
* @param degrees
*/
setRotationDegrees(degrees: number): Transform;
/**
* 使
* @param pos
*/
lookAt(pos: Vector2): void;
/**
* transform.rotation相同
* @param radians
*/
setLocalRotation(radians: number): this;
/**
* transform.rotation相同
* @param degrees
*/
setLocalRotationDegrees(degrees: number): Transform;
/**
*
* @param scale
*/
setScale(scale: Vector2): Transform;
/**
* transform.scale相同
* @param scale
*/
setLocalScale(scale: Vector2): Transform;
/**
*
*/
roundPosition(): void;
updateTransform(): void;
setDirty(dirtyFlagType: DirtyType): void;
/**
* transform属性进行拷贝
* @param transform
*/
copyFrom(transform: Transform): void;
toString(): string;
}
}
declare module es {
/**
* Component时Component和实体被启用
*/
interface IUpdatable {
enabled: boolean;
updateOrder: number;
update(): any;
}
/**
*
*/
class IUpdatableComparer implements IComparer<IUpdatable> {
compare(a: IUpdatable, b: IUpdatable): number;
}
var isIUpdatable: (props: any) => props is IUpdatable;
}
declare module es {
class SceneComponent implements IComparer<SceneComponent> {
/**
*
*/
scene: Scene;
/**
* SceneComponenttrueonEnabled/onDisable
*/
/**
* SceneComponenttrueonEnabled/onDisable
* @param value
*/
enabled: boolean;
/**
* SceneComponents的顺序
*/
updateOrder: number;
_enabled: boolean;
/**
* SceneComponent时调用
*/
onEnabled(): void;
/**
* SceneComponent时调用
*/
onDisabled(): void;
/**
* SceneComponent从场景中移除时调用
*/
onRemovedFromScene(): void;
/**
*
*/
update(): void;
/**
* /SceneComponent
* @param isEnabled
*/
setEnabled(isEnabled: boolean): SceneComponent;
/**
* SceneComponent的updateOrder并触发某种SceneComponent
* @param updateOrder
*/
setUpdateOrder(updateOrder: number): this;
compare(other: SceneComponent): number;
}
}
declare module es {
/**
*
*
*/
class ArcadeRigidbody extends Component implements IUpdatable {
/** 这个刚体的质量。质量为0则是一个不可移动的物体 */
mass: number;
/**
* 0-101
*/
readonly elasticity: number;
elasticiy: number;
/**
* 0 - 101
*/
friction: number;
/**
* 0-9沿线glue摩擦力
*/
glue: number;
/**
* Physics.gravity
*/
shouldUseGravity: boolean;
/**
*
*/
velocity: Vector2;
/**
* 0
*/
readonly isImmovable: boolean;
_mass: number;
_elasticity: number;
_friction: number;
_glue: number;
_inverseMass: number;
_collider: Collider;
constructor();
/**
* 0
* @param mass
*/
setMass(mass: number): ArcadeRigidbody;
/**
* 0-101
* @param value
*/
setElasticity(value: number): ArcadeRigidbody;
/**
* 0 - 101
* @param value
*/
setFriction(value: number): ArcadeRigidbody;
/**
* 0-9沿线glue摩擦力
* @param value
*/
setGlue(value: number): ArcadeRigidbody;
setVelocity(velocity: Vector2): ArcadeRigidbody;
/**
* 100000使使
* @param force
*/
addImpulse(force: Vector2): void;
onAddedToEntity(): void;
update(): void;
/**
*
* @param other
* @param minimumTranslationVector
*/
processOverlap(other: ArcadeRigidbody, minimumTranslationVector: Vector2): void;
/**
*
* @param other
* @param minimumTranslationVector
*/
processCollision(other: ArcadeRigidbody, minimumTranslationVector: Vector2): void;
/**
* MTV之间的相对速度使
* @param relativeVelocity
* @param minimumTranslationVector
* @param responseVelocity
*/
calculateResponseVelocity(relativeVelocity: Vector2, minimumTranslationVector: Vector2): Vector2;
}
}
declare module es {
class CharacterCollisionState2D {
right: boolean;
left: boolean;
above: boolean;
below: boolean;
becameGroundedThisFrame: boolean;
wasGroundedLastFrame: boolean;
movingDownSlope: boolean;
slopeAngle: number;
hasCollision(): boolean;
reset(): void;
toString(): string;
}
class CharacterController implements ITriggerListener {
onControllerCollidedEvent: ObservableT<RaycastHit>;
onTriggerEnterEvent: ObservableT<Collider>;
onTriggerExitEvent: ObservableT<Collider>;
/**
* true
*/
ignoreOneWayPlatformsTime: number;
supportSlopedOneWayPlatforms: boolean;
ignoredColliders: Set<Collider>;
/**
* 线
* 使 0 线
*/
skinWidth: number;
/**
* CC2D
*/
slopeLimit: number;
/**
*
*/
jumpingThreshold: number;
/**
* 线 = =
*/
slopeSpeedMultiplier: AnimCurve;
totalHorizontalRays: number;
totalVerticalRays: number;
collisionState: CharacterCollisionState2D;
velocity: Vector2;
readonly isGrounded: boolean;
readonly raycastHitsThisFrame: RaycastHit[];
constructor(player: Entity, skinWidth?: number, platformMask?: number, onewayPlatformMask?: number, triggerMask?: number);
onTriggerEnter(other: Collider, local: Collider): void;
onTriggerExit(other: Collider, local: Collider): void;
/**
* + deltaMovement
* @param deltaMovement
* @param deltaTime
*/
move(deltaMovement: Vector2, deltaTime: number): void;
/**
*
* @param maxDistance
*/
warpToGrounded(maxDistance?: number): void;
/**
* BoxCollider2D
* 线
* skinWidth setter
*/
recalculateDistanceBetweenRays(): void;
/**
* raycastOrigins skinWidth
* 线线
*/
private primeRaycastOrigins;
/**
* 使
* 线skinWidth线线
* 线 skinWidth deltaMovement skinWidth
* @param deltaMovement
* @returns
*/
private moveHorizontally;
private moveVertically;
/**
* BoxCollider2D
* deltaMovement 便slopeSpeedModifier
* @param deltaMovement
* @returns
*/
private handleVerticalSlope;
/**
* deltaMovement
* @param deltaMovement
* @param angle
* @returns
*/
private handleHorizontalSlope;
private _player;
private _collider;
private _skinWidth;
private _triggerHelper;
/**
* 线
* 使 75 线
*/
private _slopeLimitTangent;
private readonly kSkinWidthFloatFudgeFactor;
/**
* 线TRTLBRBL
*/
private _raycastOrigins;
/**
* 线
*/
private _raycastHit;
/**
* 线
* 便
*/
private _raycastHitsThisFrame;
private _verticalDistanceBetweenRays;
private _horizontalDistanceBetweenRays;
/**
* 使 delta.y
*
*/
private _isGoingUpSlope;
private _isWarpingToGround;
private platformMask;
private triggerMask;
private oneWayPlatformMask;
private readonly rayOriginSkinMutiplier;
}
}
declare module es {
/**
* /退
* ITriggerListener方法将在实现接口的触发器实体上的任何组件上调用
* Mover类一起工作
*/
interface ITriggerListener {
/**
*
* Mover/ProjectileMover方法处理使
* @param other
* @param local
*/
onTriggerEnter(other: Collider, local: Collider): any;
/**
*
* @param other
* @param local
*/
onTriggerExit(other: Collider, local: Collider): any;
}
class TriggerListenerHelper {
static getITriggerListener(entity: Entity, components: ITriggerListener[]): ITriggerListener[];
}
var isITriggerListener: (props: any) => props is ITriggerListener;
}
declare module es {
/**
*
* ITriggerListener接口用于管理对移动过程中违反的任何触发器的回调
* move方法
*
* ITriggerListener
*/
class Mover extends Component {
private _triggerHelper;
onAddedToEntity(): void;
/**
*
* @param motion
* @param collisionResult
*/
calculateMovement(motion: Vector2, collisionResult: CollisionResult): boolean;
/**
* calculatemomovement应用到实体并更新triggerHelper
* @param motion
*/
applyMovement(motion: Vector2): void;
/**
* calculateMovement和applyMovement来移动考虑碰撞的实体;
* @param motion
* @param collisionResult
*/
move(motion: Vector2, collisionResult: CollisionResult): boolean;
}
}
declare module es {
/**
* ITriggerListeners报告
*
*/
class ProjectileMover extends Component {
private _tempTriggerList;
private _collider;
onAddedToEntity(): void;
/**
*
* @param motion
*/
move(motion: Vector2): boolean;
private notifyTriggerListeners;
}
}
declare module es {
abstract class Collider extends Component {
static readonly lateSortOrder: number;
castSortOrder: number;
/**
*
*/
shape: Shape;
/**
*
*/
isTrigger: boolean;
/**
* physicsLayer可以用作过滤器Flags类有帮助位掩码的方法
*/
physicsLayer: Ref<number>;
/**
* 使
*
*/
collidesWithLayers: Ref<number>;
/**
* true
*/
shouldColliderScaleAndRotateWithTransform: boolean;
/**
*
* 使
*/
registeredPhysicsBounds: Rectangle;
protected _colliderRequiresAutoSizing: boolean;
_localOffsetLength: number;
_isPositionDirty: boolean;
_isRotationDirty: boolean;
/**
*
*/
protected _isParentEntityAddedToScene: any;
/**
*
*/
protected _isColliderRegistered: any;
/**
*
*/
readonly absolutePosition: Vector2;
/**
* transform.rotation
*/
readonly rotation: number;
readonly bounds: Rectangle;
protected _localOffset: Vector2;
/**
* localOffset添加到实体
* /
*/
/**
* localOffset添加到实体
* /
* @param value
*/
localOffset: Vector2;
/**
* localOffset添加到实体
*
* @param offset
*/
setLocalOffset(offset: Vector2): Collider;
/**
* true
* @param shouldColliderScaleAndRotationWithTransform
*/
setShouldColliderScaleAndRotateWithTransform(shouldColliderScaleAndRotationWithTransform: boolean): Collider;
onAddedToEntity(): void;
onRemovedFromEntity(): void;
onEntityTransformChanged(comp: ComponentTransform): void;
onEnabled(): void;
onDisabled(): void;
/**
* ()
*/
registerColliderWithPhysicsSystem(): void;
/**
* ()
*/
unregisterColliderWithPhysicsSystem(): void;
/**
*
* @param other
*/
overlaps(other: Collider): boolean;
/**
* ()true
* @param collider
* @param motion
* @param result
*/
collidesWith(collider: Collider, motion: Vector2, result?: CollisionResult): boolean;
/**
* true
* @param collider
* @param result
*/
collidesWithNonMotion(collider: Collider, result?: CollisionResult): boolean;
/**
*
* true使
* @param motion
* @param result
*/
collidesWithAny(motion: Vector2, result: CollisionResult): boolean;
/**
*
* @param result
*/
collidesWithAnyNonMotion(result?: CollisionResult): boolean;
}
}
declare module es {
class BoxCollider extends Collider {
/**
* BoxCollider使x/y组件作为局部Offset
* @param x
* @param y
* @param width
* @param height
*/
constructor(x?: number, y?: number, width?: number, height?: number);
width: number;
height: number;
/**
* BoxCollider的大小
* @param width
* @param height
*/
setSize(width: number, height: number): this;
/**
* BoxCollider的宽度
* @param width
*/
setWidth(width: number): BoxCollider;
/**
* BoxCollider的高度
* @param height
*/
setHeight(height: number): void;
debugRender(batcher: IBatcher): void;
toString(): string;
}
}
declare module es {
class CircleCollider extends Collider {
/**
* CircleCollider
* 使RenderableComponentCircleCollider
* RenderableComponent有一个0,01.5f * renderable.width的CircleCollideroriginNormalied为中心除以缩放尺寸来偏移原点
*
* @param radius
*/
constructor(radius?: number);
radius: number;
/**
*
* @param radius
*/
setRadius(radius: number): CircleCollider;
debugRender(batcher: IBatcher): void;
toString(): string;
}
}
declare module es {
/**
*
*/
class PolygonCollider extends Collider {
/**
* localOffset的差异为居中
* @param points
*/
constructor(points: Vector2[]);
}
}
declare module es {
interface IRenderable {
enabled: boolean;
renderLayer: number;
isVisibleFromCamera(camera: ICamera): boolean;
render(batcher: IBatcher, camera: ICamera): void;
debugRender(batcher: IBatcher): void;
}
}
declare module es {
abstract class RenderableComponent extends es.Component implements IRenderable {
getwidth(): number;
getheight(): number;
protected _bounds: es.Rectangle;
getbounds(): es.Rectangle;
readonly bounds: Rectangle;
protected _areBoundsDirty: boolean;
color: Color;
renderLayer: number;
protected _renderLayer: number;
onEntityTransformChanged(comp: ComponentTransform): void;
localOffset: es.Vector2;
setLocalOffset(offset: es.Vector2): this;
isVisible: boolean;
debugRenderEnabled: boolean;
protected _isVisible: boolean;
protected _localOffset: es.Vector2;
abstract render(batcher: IBatcher, camera: ICamera): void;
protected onBecameVisible(): void;
protected onBecameInvisible(): void;
setRenderLayer(renderLayer: number): RenderableComponent;
isVisibleFromCamera(cam: ICamera): boolean;
debugRender(batcher: IBatcher): void;
tweenColorTo(to: Color, duration: number): RenderableColorTween;
}
}
declare module es {
interface Map<K, V> {
clear(): void;
containsKey(key: any): boolean;
containsValue(value: any): boolean;
get(key: any): V;
isEmpty(): boolean;
put(key: any, value: any): void;
remove(key: any): V;
size(): number;
values(): V[];
}
class HashMap<K, V> implements Map<K, V> {
private map_;
private keys_;
constructor();
clear(): void;
values(): V[];
contains(value: any): boolean;
containsKey(key: any): boolean;
containsValue(value: any): boolean;
get(key: K): V;
isEmpty(): boolean;
keys(): K[];
/**
* if key is a string, use as is, else use key.id_ or key.name
*/
put(key: any, value: any): void;
remove(key: any): V;
size(): number;
}
}
declare module es {
/**
*
*/
abstract class EntitySystem {
private _entities;
constructor(matcher?: Matcher);
private _scene;
/**
*
*/
scene: Scene;
private _matcher;
readonly matcher: Matcher;
private _startTime;
private _endTime;
private _useTime;
/** 获取系统在当前帧所消耗的时间 仅在debug模式下生效 */
readonly useTime: number;
initialize(): void;
onChanged(entity: Entity): void;
add(entity: Entity): void;
onAdded(entity: Entity): void;
remove(entity: Entity): void;
onRemoved(entity: Entity): void;
update(): void;
lateUpdate(): void;
/**
*
* 使
*/
protected begin(): void;
protected process(entities: Entity[]): void;
protected lateProcess(entities: Entity[]): void;
/**
*
*/
protected end(): void;
/**
*
*
*
*
* @returns truefalse
*/
protected checkProcessing(): boolean;
}
}
declare module es {
/**
*
*
* ExpirationSystem
* timeLeft值的系统
* 使寿
*
*
*
* 300
* 300
*
* CPU周期
*/
abstract class DelayedIteratingSystem extends EntitySystem {
/**
*
*/
private delay;
/**
*
*/
private running;
/**
*
*/
private acc;
constructor(matcher: Matcher);
protected process(entities: Entity[]): void;
protected checkProcessing(): boolean;
/**
*
*
*
*
* @param offeredDelay
*/
offerDelay(offeredDelay: number): void;
/**
*
* accumulativeDelta
* @param entity
* @param accumulatedDelta delta时间
*/
protected abstract processDelta(entity: Entity, accumulatedDelta: number): any;
protected abstract processExpired(entity: Entity): any;
/**
*
* @param entity
*/
protected abstract getRemainingDelay(entity: Entity): number;
/**
*
*/
getInitialTimeDelay(): number;
/**
*
*
*/
getRemainingTimeUntilProcessing(): number;
/**
*
*/
isRunning(): boolean;
/**
*
*/
stop(): void;
}
}
declare module es {
/**
*
*
*
* Matcher相匹配的实体使Entity的时候使
*/
abstract class EntityProcessingSystem extends EntitySystem {
constructor(matcher: Matcher);
/**
*
* @param entity
*/
abstract processEntity(entity: Entity): any;
lateProcessEntity(entity: Entity): void;
/**
*
* @param entities
*/
protected process(entities: Entity[]): void;
protected lateProcess(entities: Entity[]): void;
}
}
declare module es {
/**
*
*/
abstract class IntervalSystem extends EntitySystem {
/**
*
*/
protected acc: number;
/**
*
*/
private readonly interval;
private intervalDelta;
constructor(matcher: Matcher, interval: number);
protected checkProcessing(): boolean;
/**
* delta值
*/
protected getIntervalDelta(): number;
}
}
declare module es {
/**
* x个ticks处理一个实体的子集
*
*
*
* 100
*/
abstract class IntervalIteratingSystem extends IntervalSystem {
constructor(matcher: Matcher, interval: number);
/**
*
* @param entity
*/
abstract processEntity(entity: Entity): any;
protected process(entities: Entity[]): void;
}
}
declare module es {
/**
* JobSystem使用实体的子集调用Executeentities线
*/
abstract class JobSystem extends EntitySystem {
readonly _threads: number;
readonly _jobs: Job[];
readonly _executeStr: string;
constructor(matcher: Matcher, threads: number);
protected process(entities: Entity[]): void;
private queueOnThread;
/**
*
* worker数据无法共享
* @example this.test = job[0].context.test;
* @param job
*/
protected abstract resetJob(job: Job): any;
/**
* 线
* @param entity
*/
protected abstract execute(entity: Entity): any;
}
class Job {
entities: Entity[];
from: number;
to: number;
worker: Worker;
execute: string;
err: string;
context: any;
set(entities: Entity[], from: number, to: number, execute: string, context: any): void;
}
}
declare module es {
abstract class PassiveSystem extends EntitySystem {
onChanged(entity: Entity): void;
protected process(entities: Entity[]): void;
}
}
/** 用于协调其他系统的通用系统基类 */
declare module es {
abstract class ProcessingSystem extends EntitySystem {
onChanged(entity: Entity): void;
/** 处理我们的系统 每帧调用 */
abstract processSystem(): any;
protected process(entities: Entity[]): void;
}
}
declare module es {
class Bits {
private _bit;
set(index: number, value: number): void;
get(index: number): number;
}
}
declare module es {
class ComponentList {
/**
* updateOrder排序
*/
static compareUpdatableOrder: IUpdatableComparer;
_entity: Entity;
/**
*
*/
_components: Component[];
/**
*
*/
_updatableComponents: IUpdatable[];
/**
*
*/
_componentsToAdd: {
[index: number]: Component;
};
/**
*
*/
_componentsToRemove: {
[index: number]: Component;
};
_componentsToAddList: Component[];
_componentsToRemoveList: Component[];
_tempBufferList: Component[];
/**
*
*/
_isComponentListUnsorted: boolean;
private componentsByType;
private componentsToAddByType;
constructor(entity: Entity);
readonly count: number;
readonly buffer: Component[];
markEntityListUnsorted(): void;
add(component: Component): void;
remove(component: Component): void;
/**
*
*/
removeAllComponents(): void;
deregisterAllComponents(): void;
registerAllComponents(): void;
private decreaseBits;
private addBits;
/**
*
*/
updateLists(): void;
handleRemove(component: Component): void;
private removeComponentsByType;
private addComponentsByType;
private removeComponentsToAddByType;
private addComponentsToAddByType;
/**
* T的第一个组件并返回它
* (onAddedToEntity方法的组件)
* null
* @param type
* @param onlyReturnInitializedComponents
*/
getComponent<T extends Component>(type: any, onlyReturnInitializedComponents: boolean): T;
/**
* T类型的所有组件使
* @param typeName
* @param components
*/
getComponents(typeName: any, components?: any[]): any[];
update(): void;
onEntityTransformChanged(comp: ComponentTransform): void;
onEntityEnabled(): void;
onEntityDisabled(): void;
debugRender(batcher: IBatcher): void;
}
}
declare module es {
class ComponentTypeFactory {
private componentTypes_;
private componentTypeCount_;
types: Bag<ComponentType>;
constructor();
getTypeFor(c: any): ComponentType;
getIndexFor(c: any): number;
}
}
declare module es {
class ComponentTypeManager {
private static _componentTypesMask;
static add(type: any): void;
static getIndexFor(type: any): number;
}
}
declare module es {
class EntityList {
scene: Scene;
/**
*
*/
_entities: Entity[];
/**
* 便
*/
_entitiesToAdded: {
[index: number]: Entity;
};
/**
* 便
*/
_entitiesToRemove: {
[index: number]: Entity;
};
_entitiesToAddedList: Entity[];
_entitiesToRemoveList: Entity[];
/**
*
*/
_isEntityListUnsorted: boolean;
/**
* 便
*/
_entityDict: Map<number, Set<Entity>>;
_unsortedTags: Set<number>;
constructor(scene: Scene);
readonly count: number;
readonly buffer: Entity[];
markEntityListUnsorted(): void;
markTagUnsorted(tag: number): void;
/**
*
* @param entity
*/
add(entity: Entity): void;
/**
*
* @param entity
*/
remove(entity: Entity): void;
/**
*
*/
removeAllEntities(): void;
/**
* EntityList管理
* @param entity
*/
contains(entity: Entity): boolean;
getTagList(tag: number): Set<Entity>;
addToTagList(entity: Entity): void;
removeFromTagList(entity: Entity): void;
update(): void;
updateLists(): void;
/**
* name的实体null
* @param name
*/
findEntity(name: string): Entity;
/**
*
* @param id
* @returns
*/
findEntityById(id: number): Entity;
/**
*
* List可以通过ListPool.free放回池中
* @param tag
*/
entitiesWithTag(tag: number): Entity[];
/**
* tag的实体
* @param tag
* @returns
*/
entityWithTag(tag: number): Entity;
/**
* T类型的组件
* @param type
*/
findComponentOfType<T extends Component>(type: any): T;
/**
* T类型的组件
* List可以通过ListPool.free放回池中
* @param type
*/
findComponentsOfType<T extends Component>(type: any): T[];
/**
*
* @param types
* @returns
*/
findEntitesOfComponent(...types: any[]): Entity[];
}
}
declare module es {
class EntityProcessorList {
_processors: EntitySystem[];
add(processor: EntitySystem): void;
remove(processor: EntitySystem): void;
onComponentAdded(entity: Entity): void;
onComponentRemoved(entity: Entity): void;
onEntityAdded(entity: Entity): void;
onEntityRemoved(entity: Entity): void;
begin(): void;
update(): void;
lateUpdate(): void;
end(): void;
getProcessor<T extends EntitySystem>(type: new (...args: any[]) => T): T;
protected notifyEntityChanged(entity: Entity): void;
protected removeFromProcessors(entity: Entity): void;
}
}
declare module es {
class HashHelpers {
static readonly hashCollisionThreshold: number;
static readonly hashPrime: number;
/**
*
*
* Hashtable当前的容量为x
* 2x2x的质数p_1p_2...p_i...p_n使p_n-1 < 2x < p_n
*
* IEh1(key)+i*h2(key)0 <= i < size.h2和size必须是相对质数
*/
static readonly primes: number[];
/**
* Array.MaxArrayLength小的最大质数
*/
static readonly maxPrimeArrayLength: number;
static isPrime(candidate: number): boolean;
static getPrime(min: number): number;
/**
*
* @param oldSize
* @returns
*/
static expandPrime(oldSize: number): number;
static getHashCode(str: any): number;
}
}
declare module es {
class IdentifierPool {
private ids;
private nextAvailableId_;
constructor();
checkOut(): number;
checkIn(id: number): void;
}
}
declare module es {
class Matcher {
protected allSet: (new (...args: any[]) => Component)[];
protected exclusionSet: (new (...args: any[]) => Component)[];
protected oneSet: (new (...args: any[]) => Component)[];
static empty(): Matcher;
getAllSet(): (new (...args: any[]) => Component)[];
getExclusionSet(): (new (...args: any[]) => Component)[];
getOneSet(): (new (...args: any[]) => Component)[];
isInterestedEntity(e: Entity): boolean;
isInterested(components: Bits): boolean;
all(...types: any[]): Matcher;
exclude(...types: any[]): this;
one(...types: any[]): this;
}
}
declare module es {
class RenderableComponentList {
private _components;
private _componentsByRenderLayer;
private _unsortedRenderLayers;
private _componentsNeedSort;
readonly count: number;
get(index: number): IRenderable;
add(component: IRenderable): void;
remove(component: IRenderable): void;
updateRenderableRenderLayer(component: IRenderable, oldRenderLayer: number, newRenderLayer: number): void;
setRenderLayerNeedsComponentSort(renderLayer: number): void;
setNeedsComponentSort(): void;
private addToRenderLayerList;
componentsWithRenderLayer(renderLayer: number): IRenderable[];
updateLists(): void;
}
}
declare class StringUtils {
/**
*
*/
private static specialSigns;
/**
*
* @param str
* @return
*/
static matchChineseWord(str: string): string[];
/**
*
* @param target
* @return
*/
static lTrim(target: string): string;
/**
*
* @param target
* @return
*/
static rTrim(target: string): string;
/**
* 2
* @param target
* @return 2
*/
static trim(target: string): string;
/**
*
* @param str
* @return
*/
static isWhiteSpace(str: string): boolean;
/**
*
* @param mainStr
* @param targetStr
* @param replaceStr
* @param caseMark
* @return
*/
static replaceMatch(mainStr: string, targetStr: string, replaceStr: string, caseMark?: boolean): string;
/**
* html实体换掉字符窜中的特殊字符
* @param str
* @param reversion
* @return
*/
static htmlSpecialChars(str: string, reversion?: boolean): string;
/**
* "0"
*
* @param str
* @param width
* str.length >= widthstr
* @return
*
*/
static zfill(str: string, width?: number): string;
/**
*
* @param str
* @return
*/
static reverse(str: string): string;
/**
*
* @param str
* @param start
* @param en
* @param order true从字符串头部开始计算false从字符串尾巴开始结算
* @return
*/
static cutOff(str: string, start: number, len: number, order?: boolean): string;
/**
* {0}
*/
static strReplace(str: string, rStr: string[]): string;
static format(str: string, ...args: any[]): string;
}
declare module es {
/** 提供帧定时信息 */
class Time {
/** 游戏运行的总时间 */
static totalTime: number;
/** deltaTime的未缩放版本。不受时间尺度的影响 */
static unscaledDeltaTime: number;
/** 前一帧到当前帧的时间增量,按时间刻度进行缩放 */
static deltaTime: number;
/** 时间刻度缩放 */
static timeScale: number;
/** DeltaTime可以为的最大值 */
static maxDeltaTime: number;
/** 已传递的帧总数 */
static frameCount: number;
/** 自场景加载以来的总时间 */
static timeSinceSceneLoad: number;
private static _lastTime;
static update(currentTime: number): void;
static sceneChanged(): void;
/**
* 使delta的间隔值true
* @param interval
*/
static checkEvery(interval: number): boolean;
}
}
declare class TimeUtils {
/**
* ID
* @param d
* @returns ID
*/
static monthId(d?: Date): number;
/**
* ID
* @param d
* @returns ID
*/
static dateId(t?: Date): number;
/**
* ID
* @param d
* @returns ID
*/
static weekId(d?: Date, first?: boolean): number;
/**
* a比b小
*/
static diffDay(a: Date, b: Date, fixOne?: boolean): number;
/**
*
*/
static getFirstDayOfWeek(d?: Date): Date;
/**
*
*/
static getFirstOfDay(d?: Date): Date;
/**
*
*/
static getNextFirstOfDay(d?: Date): Date;
/**
* @returns 2018-12-12
*/
static formatDate(date: Date): string;
/**
* @returns 2018-12-12 12:12:12
*/
static formatDateTime(date: Date): string;
/**
* @returns s 2018-12-12 2018-12-12 12:12:12
*/
static parseDate(s: string): Date;
/**
*
* @param time
* @param partition
* @param showHour
* @return , ,
*
* 比如: time = 4351; secondToTime(time)返回字符串01:12:31;
*/
static secondToTime(time?: number, partition?: string, showHour?: boolean): string;
/**
*
* @param time
* @param partition
* @return
* @throws Error Exception
*
* 1 trace(MillisecondTransform.timeToMillisecond("00:60:00"))
* 3600000
*
*
* 2 trace(MillisecondTransform.timeToMillisecond("00.60.00","."))
* 3600000
*/
static timeToMillisecond(time: string, partition?: string): string;
}
2021-08-03 00:09:43 +08:00
declare module es {
/**
*
*/
class TypeBit {
}
}
declare module es {
/**
* 线
* 线
*/
class WorkerUtils {
/** 正在执行的队列 */
private static readonly pendingJobs;
private static jobIdGen;
/**
* worker
* @param doFunc worker所能做的事情
*/
static makeWorker(doFunc: Function): Worker;
static workerMessage(worker: Worker): (...message: any[]) => Promise<{}>;
}
}
declare module es {
class Graphics {
static instance: Graphics;
batcher: IBatcher;
constructor(batcher: IBatcher);
}
}
declare module es {
class Color {
/**
*
*/
r: number;
/**
* 绿
*/
g: number;
/**
*
*/
b: number;
/**
* (0-1)
*/
a: number;
/**
*
*/
h: number;
/**
*
*/
s: number;
/**
*
*/
l: number;
/**
* r, g, b, a Color
*
* @param r (0-255)
* @param g 绿 (0-255)
* @param b (0-255)
* @param a alpha (0-1.0)
*/
constructor(r: number, g: number, b: number, a?: number);
/**
* r, g, b, a Color
*
* @param r (0-255)
* @param g 绿 (0-255)
* @param b (0-255)
* @param a alpha (0-1.0)
*/
static fromRGB(r: number, g: number, b: number, a?: number): Color;
/**
* Color
*
* @param hex #ffffff CSS alpha
*/
static createFromHex(hex: string): Color;
/**
* hsl Color
*
* @param h [0-1]
* @param s [0-1]
* @param l [0-1]
* @param a [0-1]
*/
static fromHSL(h: number, s: number, l: number, a?: number): Color;
/**
*
*
* @param factor
*/
lighten(factor?: number): Color;
/**
*
*
* @param factor
*/
darken(factor?: number): Color;
/**
* 使
*
* @param factor
*/
saturate(factor?: number): Color;
/**
*
*
* @param factor
*/
desaturate(factor?: number): Color;
/**
*
*
* @param color
*/
mulitiply(color: Color): Color;
/**
*
*
* @param color
*/
screen(color: Color): Color;
/**
*
*/
invert(): Color;
/**
*
*
* @param color
*/
average(color: Color): Color;
/**
* CSS
*
* @param format
*/
toString(format?: 'rgb' | 'hsl' | 'hex'): string;
/**
*
* @param c
* @see https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb
*/
private _componentToHex;
/**
*
*/
toHex(): string;
/**
*
*
* @param hex #ffffff CSS alpha
*/
fromHex(hex: string): void;
/**
* RGBA
*/
toRGBA(): string;
/**
* HSLA
*/
toHSLA(): string;
/**
* CSS
*/
fillStyle(): string;
/**
*
*/
clone(): Color;
/**
* Black (#000000)
*/
static Black: Color;
/**
* White (#FFFFFF)
*/
static White: Color;
/**
* Gray (#808080)
*/
static Gray: Color;
/**
* Light gray (#D3D3D3)
*/
static LightGray: Color;
/**
* Dark gray (#A9A9A9)
*/
static DarkGray: Color;
/**
* Yellow (#FFFF00)
*/
static Yellow: Color;
/**
* Orange (#FFA500)
*/
static Orange: Color;
/**
* Red (#FF0000)
*/
static Red: Color;
/**
* Vermillion (#FF5B31)
*/
static Vermillion: Color;
/**
* Rose (#FF007F)
*/
static Rose: Color;
/**
* Magenta (#FF00FF)
*/
static Magenta: Color;
/**
* Violet (#7F00FF)
*/
static Violet: Color;
/**
* Blue (#0000FF)
*/
static Blue: Color;
/**
* Azure (#007FFF)
*/
static Azure: Color;
/**
* Cyan (#00FFFF)
*/
static Cyan: Color;
/**
* Viridian (#59978F)
*/
static Viridian: Color;
/**
* Green (#00FF00)
*/
static Green: Color;
/**
* Chartreuse (#7FFF00)
*/
static Chartreuse: Color;
/**
* Transparent (#FFFFFF00)
*/
static Transparent: Color;
}
}
declare module es {
interface IBatcher {
begin(cam: ICamera): any;
end(): any;
drawPoints(points: Vector2[], color: Color, thickness?: number): any;
drawPolygon(poisition: Vector2, points: Vector2[], color: Color, closePoly: boolean, thickness?: number): any;
drawHollowRect(x: number, y: number, width: number, height: number, color: Color, thickness?: number): any;
drawCircle(position: Vector2, raidus: number, color: Color, thickness?: number): any;
drawCircleLow(position: es.Vector2, radius: number, color: Color, thickness?: number, resolution?: number): any;
drawRect(x: number, y: number, width: number, height: number, color: Color): any;
drawLine(start: Vector2, end: Vector2, color: Color, thickness: number): any;
drawPixel(position: Vector2, color: Color, size?: number): any;
}
}
declare module es {
interface ICamera extends Component {
bounds: Rectangle;
}
}
declare module es {
abstract class Renderer {
camera: ICamera;
readonly renderOrder: number;
shouldDebugRender: boolean;
protected renderDirty: boolean;
constructor(renderOrder: number, camera: ICamera);
onAddedToScene(scene: es.Scene): void;
unload(): void;
protected beginRender(cam: ICamera): void;
protected endRender(): void;
protected onRenderChanged(): void;
abstract render(scene: Scene): void;
protected renderAfterStateCheck(renderable: IRenderable, cam: ICamera): void;
protected debugRender(scene: Scene): void;
}
}
declare module es {
class DefaultRenderer extends Renderer {
constructor(renderOrder?: number, camera?: ICamera);
render(scene: Scene): void;
}
}
declare module es {
/**
* (cubic and quadratic bezier helper)
*/
class Bezier {
/**
* 线
* @param p0
* @param p1
* @param p2
* @param t
*/
static getPoint(p0: Vector2, p1: Vector2, p2: Vector2, t: number): Vector2;
/**
*
* @param start
* @param firstControlPoint
* @param secondControlPoint
* @param end
* @param t
*/
static getPointThree(start: Vector2, firstControlPoint: Vector2, secondControlPoint: Vector2, end: Vector2, t: number): Vector2;
/**
*
* @param p0
* @param p1
* @param p2
* @param t
*/
static getFirstDerivative(p0: Vector2, p1: Vector2, p2: Vector2, t: number): Vector2;
/**
*
* @param start
* @param firstControlPoint
* @param secondControlPoint
* @param end
* @param t
*/
static getFirstDerivativeThree(start: Vector2, firstControlPoint: Vector2, secondControlPoint: Vector2, end: Vector2, t: number): Vector2;
/**
* bezier曲线
* ListPool的合并列表
* @param start
* @param firstCtrlPoint
* @param secondCtrlPoint
* @param end
* @param distanceTolerance
*/
static getOptimizedDrawingPoints(start: Vector2, firstCtrlPoint: Vector2, secondCtrlPoint: Vector2, end: Vector2, distanceTolerance?: number): Vector2[];
/**
* bezier曲线
* @param start
* @param firstCtrlPoint
* @param secondCtrlPoint
* @param end
* @param points
* @param distanceTolerance
*/
private static recursiveGetOptimizedDrawingPoints;
}
}
declare module es {
/**
* 访
*/
class BezierSpline {
_points: Vector2[];
_curveCount: number;
/**
* t被修改为在曲线段的范围内
* @param t
*/
pointIndexAtTime(t: number): {
time: number;
range: number;
};
/**
*
* @param index
* @param point
*/
setControlPoint(index: number, point: Vector2): void;
/**
* t的贝塞尔曲线上的点
* @param t
*/
getPointAtTime(t: number): Vector2;
/**
* t的速度
* @param t
*/
getVelocityAtTime(t: number): Vector2;
/**
* t时贝塞尔的方向
* @param t
*/
getDirectionAtTime(t: number): Vector2;
/**
* 线线
* @param start
* @param firstControlPoint
* @param secondControlPoint
* @param end
*/
addCurve(start: Vector2, firstControlPoint: Vector2, secondControlPoint: Vector2, end: Vector2): void;
/**
* bezier
*/
reset(): void;
/**
* splitine分解成totalSegments部分使线
* @param totalSegments
*/
getDrawingPoints(totalSegments: number): Vector2[];
}
}
declare module es {
/**
*
* isFlagSet之外flag参数是一个非移位的标志
* 使(0123)/
*/
class Flags {
/**
*
*
* @param self
* @param flag
*/
static isFlagSet(self: number, flag: number): boolean;
/**
*
* @param self
* @param flag
*/
static isUnshiftedFlagSet(self: number, flag: number): boolean;
/**
*
* @param self
* @param flag
*/
static setFlagExclusive(self: Ref<number>, flag: number): void;
/**
*
* @param self
* @param flag
*/
static setFlag(self: Ref<number>, flag: number): void;
/**
*
* @param self
* @param flag
*/
static unsetFlag(self: Ref<number>, flag: number): void;
/**
*
* @param self
*/
static invertFlags(self: Ref<number>): void;
}
}
declare module es {
class MathHelper {
static readonly Epsilon: number;
static readonly Rad2Deg: number;
static readonly Deg2Rad: number;
/**
* pi除以2的值(1.57079637)
*/
static readonly PiOver2: number;
/**
*
* @param radians
*/
static toDegrees(radians: number): number;
/**
*
* @param degrees
*/
static toRadians(degrees: number): number;
/**
*
* @param value1
* @param value2
* @param value3
* @param amount1
* @param amount2
*/
static barycentric(value1: number, value2: number, value3: number, amount1: number, amount2: number): number;
/**
* 使Catmull-Rom插值
* @param value1
* @param value2
* @param value3
* @param value4
* @param amount
*/
static catmullRom(value1: number, value2: number, value3: number, value4: number, amount: number): number;
/**
* leftMin-leftMax范围内rightMin-rightMax范围内的值
* @param value
* @param leftMin
* @param leftMax
* @param rightMin
* @param rightMax
*/
static map(value: number, leftMin: number, leftMax: number, rightMin: number, rightMax: number): number;
/**
* 01
* @param value
* @param min
* @param max
* @returns
*/
static map01(value: number, min: number, max: number): number;
/**
* 10
* map01的取反
* @param value
* @param min
* @param max
* @returns
*/
static map10(value: number, min: number, max: number): number;
/**
* 使
* @param value1
* @param value2
* @param amount
*/
static smoothStep(value1: number, value2: number, amount: number): number;
/**
* π-π
* @param angle
*/
static wrapAngle(angle: number): number;
/**
* 2
* @param value
* @returns
*/
static isPowerOfTwo(value: number): boolean;
static lerp(from: number, to: number, t: number): number;
static betterLerp(a: number, b: number, t: number, epsilon: number): number;
/**
* 使a和b之间
* 360
* @param a
* @param b
* @param t
* @returns
*/
static lerpAngle(a: number, b: number, t: number): number;
/**
* 使a和b之间
* @param a
* @param b
* @param t
* @returns
*/
static lerpAngleRadians(a: number, b: number, t: number): number;
/**
* t使其不大于长度且不小于0
* @param t
* @param length
* @returns
*/
static pingPong(t: number, length: number): number;
/**
* value> = threshold返回其符号0
* @param value
* @param threshold
* @returns
*/
static signThreshold(value: number, threshold: number): number;
static inverseLerp(from: number, to: number, t: number): number;
/**
* 线
* MathHelper.Lerp的效率较低
*/
static lerpPrecise(value1: number, value2: number, amount: number): number;
static clamp(value: number, min: number, max: number): number;
static snap(value: number, increment: number): number;
/**
* 03
* @param circleCenter
* @param radius
* @param angleInDegrees
*/
static pointOnCirlce(circleCenter: Vector2, radius: number, angleInDegrees: number): Vector2;
/**
* true
* @param value
*/
static isEven(value: number): boolean;
/**
* true
* @param value
* @returns
*/
static isOdd(value: number): boolean;
/**
*
* @param value
* @param roundedAmount
* @returns
*/
static roundWithRoundedAmount(value: number, roundedAmount: Ref<number>): number;
/**
* 0-1
* @param value
*/
static clamp01(value: number): number;
static angleBetweenVectors(from: Vector2, to: Vector2): number;
static angleToVector(angleRadians: number, length: number): Vector2;
/**
* t并确保它总是大于或等于0并且小于长度
* @param t
* @param length
*/
static incrementWithWrap(t: number, length: number): number;
/**
* t并确保其始终大于或等于0且小于长度
* @param t
* @param length
* @returns
*/
static decrementWithWrap(t: number, length: number): number;
/**
* sqrtx * x + y * y
* @param x
* @param y
* @returns
*/
static hypotenuse(x: number, y: number): number;
static closestPowerOfTwoGreaterThan(x: number): number;
/**
* roundToNearest为步长1251275
* @param value
* @param roundToNearest
*/
static roundToNearest(value: number, roundToNearest: number): number;
/**
*
* @param value
* @param ep
*/
static withinEpsilon(value: number, ep?: number): boolean;
/**
* start可以小于或大于end例如:开始是21046
* @param start
* @param end
* @param shift
*/
static approach(start: number, end: number, shift: number): number;
/**
*
* 1301002555
* 2340302553655
* @param start
* @param end
* @param shift
* @returns
*/
static approachAngle(start: number, end: number, shift: number): number;
/**
* Vector Vector
* @param other
*/
static project(self: Vector2, other: Vector2): Vector2;
/**
*
*
* 使2 * Pi代替360
* @param start
* @param end
* @param shift
* @returns
*/
static approachAngleRadians(start: number, end: number, shift: number): number;
/**
* 使
* @param value1
* @param value2
* @param tolerance
* @returns
*/
static approximately(value1: number, value2: number, tolerance?: number): boolean;
/**
*
* @param current
* @param target
*/
static deltaAngle(current: number, target: number): number;
/**
* //
* @param value
* @param min
* @param max
* @returns
*/
static between(value: number, min: number, max: number): boolean;
/**
*
* @param current
* @param target
* @returns
*/
static deltaAngleRadians(current: number, target: number): number;
/**
* t使0
* @param t
* @param length
*/
static repeat(t: number, length: number): number;
static floorToInt(f: number): number;
/**
*
* @param position
* @param speed
* @returns
*/
static rotateAround(position: Vector2, speed: number): Vector2;
/**
*
* 90135使45135
* @param point
* @param center
* @param angleIndegrees
*/
static rotateAround2(point: Vector2, center: Vector2, angleIndegrees: number): Vector2;
/**
* 03
* @param circleCenter
* @param radius
* @param angleInDegrees
*/
static pointOnCircle(circleCenter: Vector2, radius: number, angleInDegrees: number): Vector2;
/**
* 03
* @param circleCenter
* @param radius
* @param angleInRadians
* @returns
*/
static pointOnCircleRadians(circleCenter: Vector2, radius: number, angleInRadians: number): Vector2;
/**
* lissajou曲线
* @param xFrequency
* @param yFrequency
* @param xMagnitude
* @param yMagnitude
* @param phase
* @returns
*/
static lissajou(xFrequency?: number, yFrequency?: number, xMagnitude?: number, yMagnitude?: number, phase?: number): Vector2;
/**
* lissajou曲线的阻尼形式0
* 01
*
* @param xFrequency
* @param yFrequency
* @param xMagnitude
* @param yMagnitude
* @param phase
* @param damping
* @param oscillationInterval
* @returns
*/
static lissajouDamped(xFrequency?: number, yFrequency?: number, xMagnitude?: number, yMagnitude?: number, phase?: number, damping?: number, oscillationInterval?: number): Vector2;
/**
* Hermite样条插值
* @param value1
* @param tangent1
* @param value2
* @param tangent2
* @param amount
* @returns
*/
static hermite(value1: number, tangent1: number, value2: number, tangent2: number, amount: number): any;
/**
* NaN或无穷大
* @param x
* @returns
*/
static isValid(x: number): boolean;
static smoothDamp(current: number, target: number, currentVelocity: number, smoothTime: number, maxSpeed: number, deltaTime: number): {
value: number;
currentVelocity: number;
};
static smoothDampVector(current: Vector2, target: Vector2, currentVelocity: Vector2, smoothTime: number, maxSpeed: number, deltaTime: number): Vector2;
/**
* leftMin - leftMax rightMin - rightMax
* @param value
* @param leftMin
* @param leftMax
* @param rightMin
* @param rightMax
* @returns
*/
static mapMinMax(value: number, leftMin: number, leftMax: number, rightMin: number, rightMax: any): number;
static fromAngle(angle: number): Vector2;
}
}
declare module es {
/**
* 4x4浮点矩阵
*/
class Matrix {
private static identity;
static readonly Identity: Matrix;
m11: number;
m12: number;
m13: number;
m14: number;
m21: number;
m22: number;
m23: number;
m24: number;
m31: number;
m32: number;
m33: number;
m34: number;
m41: number;
m42: number;
m43: number;
m44: number;
constructor(m11?: any, m12?: any, m13?: any, m14?: any, m21?: any, m22?: any, m23?: any, m24?: any, m31?: any, m32?: any, m33?: any, m34?: any, m41?: any, m42?: any, m43?: any, m44?: any);
/**
*
* @param left
* @param right
* @param top
* @param zFarPlane
* @param result
*/
static createOrthographicOffCenter(left: number, right: number, bottom: number, top: number, zNearPlane: number, zFarPlane: number, result?: Matrix): void;
static createTranslation(position: Vector2, result: Matrix): void;
static createRotationZ(radians: number, result: Matrix): void;
/**
*
* @param matrix1
* @param matrix2
* @param result
*/
static multiply(matrix1: Matrix, matrix2: Matrix, result?: Matrix): void;
}
}
declare module es {
/**
* 3 * 3
*/
class Matrix2D implements IEquatable<Matrix2D> {
m11: number;
m12: number;
m21: number;
m22: number;
m31: number;
m32: number;
/**
*
*/
static readonly identity: Matrix2D;
setIdentity(): Matrix2D;
setValues(m11: number, m12: number, m21: number, m22: number, m31: number, m32: number): Matrix2D;
/**
*
*/
translation: Vector2;
/**
*
*/
rotation: number;
/**
*
*/
rotationDegrees: number;
/**
*
*/
scale: Vector2;
/**
* Z轴的旋转矩阵2D
* @param radians
*/
static createRotation(radians: number, result: Matrix2D): void;
static createRotationOut(radians: number, result: Matrix2D): void;
/**
* 2D
* @param xScale
* @param yScale
*/
static createScale(xScale: number, yScale: number, result: Matrix2D): void;
static createScaleOut(xScale: number, yScale: number, result: Matrix2D): void;
/**
* 2D
* @param xPosition
* @param yPosition
*/
static createTranslation(xPosition: number, yPosition: number, result: Matrix2D): Matrix2D;
static createTranslationOut(position: Vector2, result: Matrix2D): void;
static invert(matrix: Matrix2D): Matrix2D;
/**
* matrix,
* @param matrix
*/
add(matrix: Matrix2D): Matrix2D;
substract(matrix: Matrix2D): Matrix2D;
divide(matrix: Matrix2D): Matrix2D;
multiply(matrix: Matrix2D): Matrix2D;
static multiply(matrix1: Matrix2D, matrix2: Matrix2D, result: Matrix2D): void;
determinant(): number;
/**
* Matrix2D线
* @param matrix1
* @param matrix2
* @param amount
*/
static lerp(matrix1: Matrix2D, matrix2: Matrix2D, amount: number): Matrix2D;
/**
*
* @param matrix
*/
static transpose(matrix: Matrix2D): Matrix2D;
mutiplyTranslation(x: number, y: number): Matrix2D;
/**
* Matrix2D
* @param other
*/
equals(other: Matrix2D): boolean;
static toMatrix(mat: Matrix2D): Matrix;
toString(): string;
}
}
declare module es {
class MatrixHelper {
/**
* Matrix2D
* @param matrix1
* @param matrix2
*/
static add(matrix1: Matrix2D, matrix2: Matrix2D): Matrix2D;
/**
* Matrix2D的元素除以另一个矩阵的元素
* @param matrix1
* @param matrix2
*/
static divide(matrix1: Matrix2D, matrix2: Matrix2D): Matrix2D;
/**
* Matrix2D
* @param matrix1
* @param matrix2
*/
static mutiply(matrix1: Matrix2D, matrix2: Matrix2D | number): Matrix2D;
/**
* Matrix2D
* @param matrix1
* @param matrix2
*/
static subtract(matrix1: Matrix2D, matrix2: Matrix2D): Matrix2D;
}
}
declare module es {
class Rectangle implements IEquatable<Rectangle> {
/**
* x坐标
*/
x: number;
/**
* y坐标
*/
y: number;
/**
*
*/
width: number;
/**
*
*/
height: number;
/**
* X=0, Y=0, Width=0, Height=0
*/
static readonly empty: Rectangle;
/**
* Number.Min/Max值的矩形
*/
static readonly maxRect: Rectangle;
/**
* X坐标
*/
readonly left: number;
/**
* X坐标
*/
readonly right: number;
/**
* y坐标
*/
readonly top: number;
/**
* y坐标
*/
readonly bottom: number;
/**
*
*/
readonly max: Vector2;
/**
* 000
*/
isEmpty(): boolean;
/** 这个矩形的左上角坐标 */
location: Vector2;
/**
* -
*/
size: Vector2;
/**
*
* "宽度 " "高度 "
*/
readonly center: Vector2;
_tempMat: Matrix2D;
_transformMat: Matrix2D;
/**
* Rectanglestruct实例
* @param x X坐标
* @param y y坐标
* @param width
* @param height
*/
constructor(x?: number, y?: number, width?: number, height?: number);
/**
* /
* @param minX
* @param minY
* @param maxX
* @param maxY
*/
static fromMinMax(minX: number, minY: number, maxX: number, maxY: number): Rectangle;
/**
*
* @param points
* @returns
*/
static rectEncompassingPoints(points: Vector2[]): Rectangle;
/**
*
* @param edge
*/
getSide(edge: Edge): number;
/**
*
* @param x X坐标
* @param y Y坐标
*/
contains(x: number, y: number): boolean;
/**
*
* @param horizontalAmount
* @param verticalAmount
*/
inflate(horizontalAmount: number, verticalAmount: number): void;
/**
*
* @param value
*/
intersects(value: Rectangle): boolean;
rayIntersects(ray: Ray2D): {
intersected: boolean;
distance: number;
};
/**
*
* @param value
*/
containsRect(value: Rectangle): boolean;
getHalfSize(): Vector2;
getClosestPointOnBoundsToOrigin(): Vector2;
/**
*
* @param point
*/
getClosestPointOnRectangleToPoint(point: Vector2): Vector2;
/**
*
* @param point
* @param edgeNormal
* @returns
*/
getClosestPointOnRectangleBorderToPoint(point: Vector2, edgeNormal: Vector2): Vector2;
/**
* RectangleFRectangleF包含两个其他矩形的重叠区域
* @param value1
* @param value2
* @returns
*/
static intersect(value1: Rectangle, value2: Rectangle): Rectangle;
/**
*
* @param offsetX X坐标
* @param offsetY y坐标
*/
offset(offsetX: number, offsetY: number): void;
/**
*
* @param value1
* @param value2
*/
static union(value1: Rectangle, value2: Rectangle): Rectangle;
/**
*
* @param value1
* @param value2
*/
static overlap(value1: Rectangle, value2: Rectangle): Rectangle;
calculateBounds(parentPosition: Vector2, position: Vector2, origin: Vector2, scale: Vector2, rotation: number, width: number, height: number): void;
/**
*
* @param deltaX
* @param deltaY
*/
getSweptBroadphaseBounds(deltaX: number, deltaY: number): Rectangle;
/**
* true
* moveX和moveY将返回b1为避免碰撞而必须移动的移动量
* @param other
* @param moveX
* @param moveY
*/
collisionCheck(other: Rectangle, moveX: Ref<number>, moveY: Ref<number>): boolean;
/**
*
* @param rectA
* @param rectB
* @returns
* /
*
* Vector2.Zero
*/
static getIntersectionDepth(rectA: Rectangle, rectB: Rectangle): Vector2;
/**
*
* @param other
*/
equals(other: Rectangle): boolean;
/**
*
*/
getHashCode(): number;
clone(): Rectangle;
}
}
declare module es {
/**
* 11update时添加到amount中
* :
*
* let deltaMove = this.velocity * es.Time.deltaTime;
* deltaMove.x = this._x.update(deltaMove.x);
* deltaMove.y = this._y.update(deltaMove.y);
*/
class SubpixelFloat {
remainder: number;
/**
* amount递增余数amount设置为当前值
* @param amount
*/
update(amount: number): number;
/**
* 0
*/
reset(): void;
}
}
declare module es {
class SubpixelVector2 {
_x: SubpixelFloat;
_y: SubpixelFloat;
/**
* s/y余数amount设置为当前值
* @param amount
*/
update(amount: Vector2): void;
/**
* 0
*/
reset(): void;
}
}
declare module es {
/**
* 使itriggerlistener
*/
class ColliderTriggerHelper {
private _entity;
/** 存储当前帧中发生的所有活动交点对 */
private _activeTriggerIntersections;
/** 存储前一帧的交点对,这样我们就可以在移动这一帧后检测到退出 */
private _previousTriggerIntersections;
private _tempTriggerList;
constructor(entity: Entity);
/**
* update应该在实体被移动后被调用Colllider重叠的ITriggerListeners
* Collider重叠的ITriggerListeners
*/
update(): void;
private checkForExitedColliders;
private notifyTriggerListeners;
}
}
declare module es {
enum PointSectors {
center = 0,
top = 1,
bottom = 2,
topLeft = 9,
topRight = 5,
left = 8,
right = 4,
bottomLeft = 10,
bottomRight = 6
}
class Collisions {
static lineToLine(a1: Vector2, a2: Vector2, b1: Vector2, b2: Vector2): boolean;
static lineToLineIntersection(a1: Vector2, a2: Vector2, b1: Vector2, b2: Vector2, intersection?: Vector2): boolean;
static closestPointOnLine(lineA: Vector2, lineB: Vector2, closestTo: Vector2): Vector2;
static circleToCircle(circleCenter1: Vector2, circleRadius1: number, circleCenter2: Vector2, circleRadius2: number): boolean;
static circleToLine(circleCenter: Vector2, radius: number, lineFrom: Vector2, lineTo: Vector2): boolean;
static circleToPoint(circleCenter: Vector2, radius: number, point: Vector2): boolean;
static rectToCircle(rect: Rectangle, cPosition: Vector2, cRadius: number): boolean;
static rectToLine(rect: Rectangle, lineFrom: Vector2, lineTo: Vector2): boolean;
static rectToPoint(rX: number, rY: number, rW: number, rH: number, point: Vector2): boolean;
/**
* 使CohenSutherland算法
*
* :
* 1001 1000 1010
* 0001 0000 0010
* 0101 0100 0110
* @param rX
* @param rY
* @param rW
* @param rH
* @param point
*/
static getSector(rX: number, rY: number, rW: number, rH: number, point: Vector2): PointSectors;
}
}
declare module es {
class RaycastHit {
/**
* 线
*/
collider: Collider;
/**
* 沿线
*/
fraction: number;
/**
* 线
*/
distance: number;
/**
* 线
*/
point: Vector2;
/**
* 线
*/
normal: Vector2;
/**
* 使
*/
centroid: Vector2;
constructor(collider?: Collider, fraction?: number, distance?: number, point?: Vector2, normal?: Vector2);
setAllValues(collider: Collider, fraction: number, distance: number, point: Vector2, normal: Vector2): void;
setValues(fraction: number, distance: number, point: Vector2, normal: Vector2): void;
reset(): void;
clone(): RaycastHit;
toString(): string;
}
}
declare module es {
class Physics {
static _spatialHash: SpatialHash;
/** 用于在全局范围内存储重力值的方便字段 */
static gravity: Vector2;
/** 调用reset并创建一个新的SpatialHash时使用的单元格大小 */
static spatialHashCellSize: number;
/** 接受layerMask的所有方法的默认值 */
static readonly allLayers: number;
/**
* raycast是否检测配置为触发器的碰撞器
*/
static raycastsHitTriggers: boolean;
/**
* 线/线
*/
static raycastsStartInColliders: boolean;
static debugRender: boolean;
/**
* raycast发生时分配它
*/
static _hitArray: RaycastHit[];
/**
*
*/
static _colliderArray: Collider[];
static reset(): void;
/**
* SpatialHash中移除所有碰撞器
*/
static clear(): void;
static debugDraw(secondsToDisplay: any): void;
/**
*
* @param center
* @param radius
* @param layerMask
*/
static overlapCircle(center: Vector2, radius: number, layerMask?: number): Collider;
/**
*
* @param center
* @param randius
* @param results
* @param layerMask
*/
static overlapCircleAll(center: Vector2, radius: number, results: Collider[], layerMask?: number): number;
/**
* boundsbroadphase检查!
* @param rect
* @param layerMask
*/
static boxcastBroadphase(rect: Rectangle, layerMask?: number): Collider[];
/**
* self
*
* @param collider
* @param rect
* @param layerMask
*/
static boxcastBroadphaseExcludingSelf(collider: Collider, rect: Rectangle, layerMask?: number): Collider[];
/**
* collider.bounds (self)
* @param collider
* @param layerMask
*/
static boxcastBroadphaseExcludingSelfNonRect(collider: Collider, layerMask?: number): Collider[];
/**
* collider.bounds deltaX/deltaY self
* @param collider
* @param deltaX
* @param deltaY
* @param layerMask
*/
static boxcastBroadphaseExcludingSelfDelta(collider: Collider, deltaX: number, deltaY: number, layerMask?: number): Collider[];
/**
*
* @param collider
*/
static addCollider(collider: Collider): void;
/**
*
* @param collider
*/
static removeCollider(collider: Collider): void;
/**
*
* @param collider
*/
static updateCollider(collider: Collider): void;
/**
* layerMask匹配的碰撞器的第一次命中
* @param start
* @param end
* @param layerMask
*/
static linecast(start: Vector2, end: Vector2, layerMask?: number, ignoredColliders?: Set<Collider>): RaycastHit;
/**
* hits数组
* @param start
* @param end
* @param hits
* @param layerMask
*/
static linecastAll(start: Vector2, end: Vector2, hits: RaycastHit[], layerMask?: number, ignoredColliders?: Set<Collider>): number;
/**
*
* @param rect
* @param layerMask
*/
static overlapRectangle(rect: Rectangle, layerMask?: number): Collider;
/**
*
* @param rect
* @param results
* @param layerMask
*/
static overlapRectangleAll(rect: Rectangle, results: Collider[], layerMask?: number): number;
}
}
declare module es {
/**
* 线(线)线线
*/
class Ray2D {
readonly start: Vector2;
readonly direction: Vector2;
readonly end: Vector2;
constructor(pos: Vector2, end: Vector2);
private _start;
private _direction;
private _end;
}
}
declare module es {
class SpatialHash {
gridBounds: Rectangle;
_raycastParser: RaycastResultParser;
/**
*
*/
_cellSize: number;
/**
* 1使
*/
_inverseCellSize: number;
/**
*
*/
_overlapTestBox: Box;
/**
*
*/
_overlapTestCircle: Circle;
/**
*
*/
_cellDict: NumberDictionary<Collider>;
/**
* HashSet
*/
_tempHashSet: Set<Collider>;
constructor(cellSize?: number);
/**
* SpatialHash
* @param collider
*/
register(collider: Collider): void;
/**
* SpatialHash中删除对象
* @param collider
*/
remove(collider: Collider): void;
/**
* 使SpatialHash中删除对象
* @param obj
*/
removeWithBruteForce(obj: Collider): void;
clear(): void;
debugDraw(secondsToDisplay: number): void;
private debugDrawCellDetails;
/**
*
* @param bounds
* @param excludeCollider
* @param layerMask
*/
aabbBroadphase(bounds: Rectangle, excludeCollider: Collider, layerMask: number): Collider[];
/**
* 线线
* https://github.com/francisengelmann/fast_voxel_traversal/blob/master/main.cpp
* http://www.cse.yorku.ca/~amana/research/grid.pdf
* @param start
* @param end
* @param hits
* @param layerMask
*/
linecast(start: Vector2, end: Vector2, hits: RaycastHit[], layerMask: number, ignoredColliders: Set<Collider>): number;
/**
*
* @param rect
* @param results
* @param layerMask
*/
overlapRectangle(rect: Rectangle, results: Collider[], layerMask: number): number;
/**
*
* @param circleCenter
* @param radius
* @param results
* @param layerMask
*/
overlapCircle(circleCenter: Vector2, radius: number, results: Collider[], layerMask: any): number;
/**
* x,y值作为世界空间的x,y值
* @param x
* @param y
*/
cellCoords(x: number, y: number): Vector2;
/**
* x,y值的单元格
* createCellIfEmpty为true
* @param x
* @param y
* @param createCellIfEmpty
*/
cellAtPosition(x: number, y: number, createCellIfEmpty?: boolean): Collider[];
}
class NumberDictionary<T> {
_store: Map<string, T[]>;
add(x: number, y: number, list: T[]): void;
/**
* 使
* @param obj
*/
remove(obj: T): void;
tryGetValue(x: number, y: number): T[];
getKey(x: number, y: number): string;
/**
*
*/
clear(): void;
}
class RaycastResultParser {
hitCounter: number;
static compareRaycastHits: (a: RaycastHit, b: RaycastHit) => number;
_hits: RaycastHit[];
_tempHit: RaycastHit;
_checkedColliders: Collider[];
_cellHits: RaycastHit[];
_ray: Ray2D;
_layerMask: number;
private _ignoredColliders;
start(ray: Ray2D, hits: RaycastHit[], layerMask: number, ignoredColliders: Set<Collider>): void;
/**
* hits数组被填充true!
* @param cellX
* @param cellY
* @param cell
*/
checkRayIntersection(cellX: number, cellY: number, cell: Collider[]): boolean;
reset(): void;
}
}
declare module es {
abstract class Shape {
/**
* entity.position
* //
*
*/
position: Vector2;
/**
*
* localOffset
*
*/
center: Vector2;
/** 缓存的形状边界 内部字段 */
bounds: Rectangle;
abstract recalculateBounds(collider: Collider): any;
abstract overlaps(other: Shape): boolean;
abstract collidesWithShape(other: Shape, collisionResult: CollisionResult): boolean;
abstract collidesWithLine(start: Vector2, end: Vector2, hit: RaycastHit): boolean;
abstract containsPoint(point: Vector2): any;
abstract pointCollidesWithShape(point: Vector2, result: CollisionResult): boolean;
}
}
declare module es {
/**
*
*/
class Polygon extends Shape {
/**
*
*
*/
points: Vector2[];
_areEdgeNormalsDirty: boolean;
/**
*
*/
_originalPoints: Vector2[];
_polygonCenter: Vector2;
/**
* box碰撞
*/
isBox: boolean;
isUnrotated: boolean;
/**
*
* /0 0
* @param points
* @param isBox
*/
constructor(points: Vector2[], isBox?: boolean);
create(vertCount: number, radius: number): void;
_edgeNormals: Vector2[];
/**
* 线SAT碰撞检测squareRoots
* box只有两个边缘
*/
readonly edgeNormals: Vector2[];
/**
* 线
* @param points
*/
setPoints(points: Vector2[]): void;
/**
*
*
*/
recalculateCenterAndEdgeNormals(): void;
/**
* 线
* edgeNormals getter惰性创建和更新
*/
buildEdgeNormals(): void;
/**
* (n角形)
* @param vertCount
* @param radius
*/
static buildSymmetricalPolygon(vertCount: number, radius: number): any[];
/**
*
* @param points
*/
static recenterPolygonVerts(points: Vector2[]): void;
/**
*
* @param points
*/
static findPolygonCenter(points: Vector2[]): Vector2;
/**
* climbing算法
* @param points
* @param direction
*/
static getFarthestPointInDirection(points: Vector2[], direction: Vector2): Vector2;
/**
*
* 线
* (-.)
* @param points
* @param point
* @param distanceSquared
* @param edgeNormal
*/
static getClosestPointOnPolygonToPoint(points: Vector2[], point: Vector2): {
distanceSquared: number;
edgeNormal: Vector2;
closestPoint: Vector2;
};
/**
*
* @param radians
* @param originalPoints
* @param rotatedPoints
*/
static rotatePolygonVerts(radians: number, originalPoints: Vector2[], rotatedPoints: Vector2[]): void;
recalculateBounds(collider: Collider): void;
overlaps(other: Shape): any;
collidesWithShape(other: Shape, result: CollisionResult): boolean;
collidesWithLine(start: es.Vector2, end: es.Vector2, hit: es.RaycastHit): boolean;
/**
* 线
*
* @param point
*/
containsPoint(point: Vector2): boolean;
pointCollidesWithShape(point: Vector2, result: CollisionResult): boolean;
}
}
declare module es {
/**
* SAT碰撞检查时28
*/
class Box extends Polygon {
width: number;
height: number;
constructor(width: number, height: number);
/**
*
* @param width
* @param height
*/
private static buildBox;
/**
* /
* @param width
* @param height
*/
updateBox(width: number, height: number): void;
overlaps(other: Shape): any;
collidesWithShape(other: Shape, result: CollisionResult): boolean;
containsPoint(point: Vector2): boolean;
pointCollidesWithShape(point: es.Vector2, result: es.CollisionResult): boolean;
}
}
declare module es {
class Circle extends Shape {
radius: number;
_originalRadius: number;
constructor(radius: number);
recalculateBounds(collider: Collider): void;
overlaps(other: Shape): any;
collidesWithShape(other: Shape, result: CollisionResult): boolean;
collidesWithLine(start: Vector2, end: Vector2, hit: RaycastHit): boolean;
getPointAlongEdge(angle: number): Vector2;
/**
*
* @param point
*/
containsPoint(point: Vector2): boolean;
pointCollidesWithShape(point: Vector2, result: CollisionResult): boolean;
}
}
declare module es {
class CollisionResult {
/**
*
*/
collider: Collider;
/**
*
*/
normal: Vector2;
/**
*
*/
minimumTranslationVector: Vector2;
/**
* 使!ShapeCollisions切割类!
*/
point: Vector2;
reset(): void;
cloneTo(cr: CollisionResult): void;
/**
* x分量
* @param deltaMovement
*/
removeHorizontalTranslation(deltaMovement: Vector2): void;
invertResult(): void;
toString(): string;
}
}
declare module es {
class RealtimeCollisions {
static intersectMovingCircleBox(s: Circle, b: Box, movement: Vector2, time: number): boolean;
/**
* n的矩形vert
* @param b
* @param n
*/
static corner(b: Rectangle, n: number): Vector2;
/**
* point交点
* @param cirlce
* @param box
* @param point
*/
static testCircleBox(cirlce: Circle, box: Box, point: Vector2): boolean;
}
}
declare module es {
class ShapeCollisionsBox {
static boxToBox(first: Box, second: Box, result: CollisionResult): boolean;
/**
* second检查被deltaMovement移动的框的结果
* @param first
* @param second
* @param movement
* @param hit
*/
static boxToBoxCast(first: Box, second: Box, movement: Vector2, hit: RaycastHit): boolean;
private static minkowskiDifference;
}
}
declare module es {
class ShapeCollisionsCircle {
static circleToCircleCast(first: Circle, second: Circle, deltaMovement: Vector2, hit: RaycastHit): boolean;
static circleToCircle(first: Circle, second: Circle, result?: CollisionResult): boolean;
/**
*
* @param circle
* @param box
* @param result
*/
static circleToBox(circle: Circle, box: Box, result?: CollisionResult): boolean;
static circleToPolygon(circle: Circle, polygon: Polygon, result?: CollisionResult): boolean;
static closestPointOnLine(lineA: Vector2, lineB: Vector2, closestTo: Vector2): Vector2;
}
}
declare module es {
class ShapeCollisionsLine {
static lineToPoly(start: Vector2, end: Vector2, polygon: Polygon, hit?: RaycastHit): boolean;
static lineToLine(a1: Vector2, a2: Vector2, b1: Vector2, b2: Vector2, intersection: Vector2): boolean;
static lineToCircle(start: Vector2, end: Vector2, s: Circle, hit: RaycastHit): boolean;
}
}
declare module es {
class ShapeCollisionsPoint {
static pointToCircle(point: Vector2, circle: Circle, result: CollisionResult): boolean;
static pointToBox(point: Vector2, box: Box, result?: CollisionResult): boolean;
static pointToPoly(point: Vector2, poly: Polygon, result?: CollisionResult): boolean;
}
}
declare module es {
class ShapeCollisionsPolygon {
/**
*
* @param first
* @param second
* @param result
*/
static polygonToPolygon(first: Polygon, second: Polygon, result: CollisionResult): boolean;
/**
* [minmax]
* @param axis
* @param polygon
* @param min
* @param max
*/
static getInterval(axis: Vector2, polygon: Polygon): {
min: number;
max: number;
};
/**
* [minA, maxA][minB, maxB]
* @param minA
* @param maxA
* @param minB
* @param maxB
*/
static intervalDistance(minA: number, maxA: number, minB: number, maxB: number): number;
}
}
declare module es {
class Particle {
position: Vector2;
lastPosition: Vector2;
mass: number;
radius: number;
collidesWithColliders: boolean;
isPinned: boolean;
acceleration: Vector2;
pinnedPosition: Vector2;
constructor(position: {
x: number;
y: number;
});
applyForce(force: Vector2): void;
pin(): Particle;
pinTo(position: Vector2): Particle;
unpin(): Particle;
}
}
declare module es {
class VerletWorld {
gravity: Vector2;
constraintIterations: number;
maximumStepIterations: number;
simulationBounds: Rectangle;
allowDragging: boolean;
selectionRadiusSquared: number;
_draggedParticle: Particle;
_composites: Composite[];
static _colliders: Collider[];
_tempCircle: Circle;
_leftOverTime: number;
_fixedDeltaTime: number;
_iterationSteps: number;
_fixedDeltaTimeSq: number;
onHandleDrag: Function;
constructor(simulationBounds?: Rectangle);
update(): void;
constrainParticleToBounds(p: Particle): void;
handleCollisions(p: Particle, collidesWithLayers: number): void;
updateTiming(): void;
addComposite<T extends Composite>(composite: T): T;
removeComposite(composite: Composite): void;
handleDragging(): void;
getNearestParticle(position: Vector2): Particle;
debugRender(batcher: IBatcher): void;
}
}
declare module es {
class Composite {
friction: Vector2;
drawParticles: boolean;
drawConstraints: boolean;
collidesWithLayers: number;
particles: Particle[];
_constraints: Constraint[];
addParticle(particle: Particle): Particle;
removeParticle(particle: Particle): void;
removeAll(): void;
addConstraint<T extends Constraint>(constraint: T): T;
removeConstraint(constraint: Constraint): void;
applyForce(force: Vector2): void;
solveConstraints(): void;
updateParticles(deltaTimeSquared: number, gravity: Vector2): void;
handleConstraintCollisions(): void;
debugRender(batcher: IBatcher): void;
}
}
declare module es {
class Ball extends Composite {
constructor(position: Vector2, radius?: number);
}
}
declare module es {
class VerletBox extends es.Composite {
constructor(center: es.Vector2, width: number, height: number, borderStiffness?: number, diagonalStiffness?: number);
}
}
2021-07-04 23:53:38 +08:00
declare module es {
class Cloth extends Composite {
constructor(topLeftPosition: Vector2, width: number, height: number, segments?: number, stiffness?: number, tearSensitivity?: number, connectHorizontalParticles?: boolean);
}
}
declare module es {
class LineSegments extends Composite {
constructor(vertices: Vector2[], stiffness: number);
pinParticleAtIndex(index: number): LineSegments;
}
}
2021-07-04 23:53:38 +08:00
declare module es {
class Ragdoll extends Composite {
constructor(x: number, y: number, bodyHeight: number);
}
}
declare module es {
class Tire extends Composite {
constructor(origin: Vector2, radius: number, segments: number, spokeStiffness?: number, treadStiffness?: number);
}
}
declare module es {
abstract class Constraint {
composite: Composite;
collidesWithColliders: boolean;
abstract solve(): void;
handleCollisions(collidesWithLayers: number): void;
debugRender(batcher: IBatcher): void;
}
}
declare module es {
class AngleConstraint extends Constraint {
stiffness: number;
angleInRadius: number;
_particleA: Particle;
_centerParticle: Particle;
_particleC: Particle;
constructor(a: Particle, center: Particle, c: Particle, stiffness: number);
angleBetweenParticles(): number;
solve(): void;
}
}
declare module es {
class DistanceConstraint extends Constraint {
stiffness: number;
restingDistance: number;
tearSensitivity: number;
shouldApproximateCollisionsWithPoints: boolean;
totalPointsToApproximateCollisionsWith: number;
_particleOne: Particle;
_particleTwo: Particle;
static _polygon: Polygon;
constructor(first: Particle, second: Particle, stiffness: number, distance?: number);
static create(a: Particle, center: Particle, c: Particle, stiffness: number, angleInDegrees: number): DistanceConstraint;
setTearSensitivity(tearSensitivity: number): this;
setCollidesWithColliders(collidesWithColliders: boolean): this;
setShouldApproximateCollisionsWithPoints(shouldApproximateCollisionsWithPoints: boolean): this;
solve(): void;
handleCollisions(collidesWithLayers: number): void;
approximateCollisionsWithPoints(collidesWithLayers: number): void;
preparePolygonForCollisionChecks(midPoint: Vector2): void;
debugRender(batcher: IBatcher): void;
}
}
declare module es {
/**
* AbstractTweenable作为你可能想做的任何可以执行的自定义类的基础
* ITweensITweenT接口
* AbstractTweenable不仅仅是将一个值从开始移动到结束
*
*/
abstract class AbstractTweenable implements ITweenable {
protected _isPaused: boolean;
/**
* abstractTweenable在完成后往往会被保留下来
* TweenManager盯上了便
*/
protected _isCurrentlyManagedByTweenManager: boolean;
abstract tick(): boolean;
recycleSelf(): void;
isRunning(): boolean;
start(): void;
pause(): void;
resume(): void;
stop(bringToCompletion?: boolean): void;
}
}
declare module es {
class PropertyTweens {
static NumberPropertyTo(self: any, memberName: string, to: number, duration: number): ITween<number>;
static Vector2PropertyTo(self: any, memeberName: string, to: Vector2, duration: number): ITween<Vector2>;
}
}
declare module es {
enum LoopType {
none = 0,
restartFromBeginning = 1,
pingpong = 2
}
enum TweenState {
running = 0,
paused = 1,
complete = 2
}
abstract class Tween<T> implements ITweenable, ITween<T> {
protected _target: ITweenTarget<T>;
protected _isFromValueOverridden: boolean;
protected _fromValue: T;
protected _toValue: T;
protected _easeType: EaseType;
protected _shouldRecycleTween: boolean;
protected _isRelative: boolean;
protected _completionHandler: (tween: ITween<T>) => void;
protected _loopCompleteHandler: (tween: ITween<T>) => void;
protected _nextTween: ITweenable;
protected _tweenState: TweenState;
private _isTimeScaleIndependent;
protected _delay: number;
protected _duration: number;
protected _timeScale: number;
protected _elapsedTime: number;
protected _loopType: LoopType;
protected _loops: number;
protected _delayBetweenLoops: number;
private _isRunningInReverse;
context: any;
setEaseType(easeType: EaseType): ITween<T>;
setDelay(delay: number): ITween<T>;
setDuration(duration: number): ITween<T>;
setTimeScale(timeSclae: number): ITween<T>;
setIsTimeScaleIndependent(): ITween<T>;
setCompletionHandler(completeHandler: (tween: ITween<T>) => void): ITween<T>;
setLoops(loopType: LoopType, loops?: number, delayBetweenLoops?: number): ITween<T>;
setLoopCompletionHanlder(loopCompleteHandler: (tween: ITween<T>) => void): ITween<T>;
setFrom(from: T): ITween<T>;
prepareForReuse(from: T, to: T, duration: number): ITween<T>;
setRecycleTween(shouldRecycleTween: boolean): ITween<T>;
abstract setIsRelative(): ITween<T>;
setContext(context: any): ITween<T>;
setNextTween(nextTween: ITweenable): ITween<T>;
tick(): boolean;
recycleSelf(): void;
isRunning(): boolean;
start(): void;
pause(): void;
resume(): void;
stop(bringToCompletion?: boolean): void;
jumpToElapsedTime(elapsedTime: any): void;
/**
* tween
*/
reverseTween(): void;
/**
* StartCoroutine调用时tween完成
*/
waitForCompletion(): IterableIterator<any>;
getTargetObject(): any;
private resetState;
/**
*
* Tween子类就可以调用它tweens就可以被回收
*
* @param target
* @param to
* @param duration
*/
initialize(target: ITweenTarget<T>, to: T, duration: number): void;
/**
*
* @param elapsedTimeExcess
*/
private handleLooping;
protected abstract updateValue(): any;
}
}
declare module es {
class NumberTween extends Tween<number> {
static create(): NumberTween;
constructor(target?: ITweenTarget<number>, to?: number, duration?: number);
setIsRelative(): ITween<number>;
protected updateValue(): void;
recycleSelf(): void;
}
class Vector2Tween extends Tween<Vector2> {
static create(): Vector2Tween;
constructor(target?: ITweenTarget<Vector2>, to?: Vector2, duration?: number);
setIsRelative(): ITween<Vector2>;
protected updateValue(): void;
recycleSelf(): void;
}
class RectangleTween extends Tween<Rectangle> {
static create(): RectangleTween;
constructor(target?: ITweenTarget<Rectangle>, to?: Rectangle, duration?: number);
setIsRelative(): ITween<Rectangle>;
protected updateValue(): void;
recycleSelf(): void;
}
class ColorTween extends Tween<Color> {
static create(): ColorTween;
constructor(target?: ITweenTarget<Color>, to?: Color, duration?: number);
setIsRelative(): this;
protected updateValue(): void;
}
}
declare module es {
class RenderableColorTween extends ColorTween implements ITweenTarget<Color> {
_renderable: RenderableComponent;
setTweenedValue(value: Color): void;
getTweenedValue(): Color;
getTargetObject(): RenderableComponent;
updateValue(): void;
setTarget(renderable: RenderableComponent): void;
recycleSelf(): void;
}
}
declare module es {
class TransformSpringTween extends AbstractTweenable {
readonly targetType: TransformTargetType;
private _transform;
private _targetType;
private _targetValue;
private _velocity;
/**
* 0.01-1
*/
dampingRatio: number;
/**
* 2pi(/)1Hz.35
*/
angularFrequency: number;
constructor(transform: Transform, targetType: TransformTargetType, targetValue: Vector2);
/**
* setTargetValue来重置目标值到一个新的Vector2
* start来添加spring tween
* @param targetValue
*/
setTargetValue(targetValue: Vector2): void;
/**
* lambda应该是振荡幅度减少50%
* @param lambda
*/
updateDampingRatioWithHalfLife(lambda: number): void;
tick(): boolean;
private setTweenedValue;
private getCurrentValueOfTweenedTargetType;
}
}
declare module es {
/**
* Transform相关的属性tweens都是有用的枚举
*/
enum TransformTargetType {
position = 0,
localPosition = 1,
scale = 2,
localScale = 3,
rotationDegrees = 4,
localRotationDegrees = 5
}
/**
* Transform是迄今为止最被ween的对象
* Tween和ITweenTarget封装在一个单一的
*/
class TransformVector2Tween extends Vector2Tween implements ITweenTarget<Vector2> {
private _transform;
private _targetType;
setTweenedValue(value: Vector2): void;
getTweenedValue(): Vector2;
getTargetObject(): Transform;
setTargetAndType(transform: Transform, targetType: TransformTargetType): void;
protected updateValue(): void;
recycleSelf(): void;
}
}
declare module es {
enum EaseType {
linear = 0,
sineIn = 1,
sineOut = 2,
sineInOut = 3,
quadIn = 4,
quadOut = 5,
quadInOut = 6,
quintIn = 7,
quintOut = 8,
quintInOut = 9,
cubicIn = 10,
cubicOut = 11,
cubicInOut = 12,
quartIn = 13,
quartOut = 14,
quartInOut = 15,
expoIn = 16,
expoOut = 17,
expoInOut = 18,
circleIn = 19,
circleOut = 20,
circleInOut = 21,
elasticIn = 22,
elasticOut = 23,
elasticInOut = 24,
punch = 25,
backIn = 26,
backOut = 27,
backInOut = 28,
bounceIn = 29,
bounceOut = 30,
bounceInOut = 31
}
/**
* EaseTypeEase方程
* Funcs为垃圾收集器制造大量垃圾
*/
class EaseHelper {
/**
* easeType EaseType
* @param easeType
*/
static oppositeEaseType(easeType: EaseType): EaseType.linear | EaseType.sineIn | EaseType.sineOut | EaseType.sineInOut | EaseType.quadIn | EaseType.quadOut | EaseType.quadInOut | EaseType.quintIn | EaseType.quintOut | EaseType.quintInOut | EaseType.cubicIn | EaseType.cubicOut | EaseType.cubicInOut | EaseType.quartIn | EaseType.quartInOut | EaseType.expoIn | EaseType.expoOut | EaseType.expoInOut | EaseType.circleIn | EaseType.circleOut | EaseType.circleInOut | EaseType.elasticIn | EaseType.elasticOut | EaseType.elasticInOut | EaseType.punch | EaseType.backIn | EaseType.backOut | EaseType.backInOut | EaseType.bounceIn | EaseType.bounceOut | EaseType.bounceInOut;
static ease(easeType: EaseType, t: number, duration: number): number;
}
}
declare module es {
class GlobalManager {
_enabled: boolean;
/**
* true则启用了GlobalManager
* OnEnabled/OnDisable
*/
/**
* true则启用了GlobalManager
* OnEnabled/OnDisable
* @param value
*/
enabled: boolean;
/**
* /GlobalManager
* @param isEnabled
*/
setEnabled(isEnabled: boolean): void;
/**
* GlobalManager启用时调用
*/
onEnabled(): void;
/**
* GlobalManager禁用时调用
*/
onDisabled(): void;
/**
* frame .update之前调用每一帧
*/
update(): void;
}
}
declare module es {
class TweenManager extends GlobalManager {
static defaultEaseType: EaseType;
/**
* tween列表将被清除
*/
static removeAllTweensOnLevelLoad: boolean;
/**
*
* 使tweens时tweens时从缓存中获取tween时
* tween
*/
static cacheNumberTweens: boolean;
static cacheVector2Tweens: boolean;
static cacheColorTweens: boolean;
static cacheRectTweens: boolean;
/**
*
*/
private _activeTweens;
private _tempTweens;
/**
* tween更新循环正在运行
*/
private _isUpdating;
/**
* 便API以方便访问
*/
private static _instance;
constructor();
update(): void;
/**
* tween添加到活动tweens列表中
* @param tween
*/
static addTween(tween: ITweenable): void;
/**
* tweens列表中删除一个tween
* @param tween
*/
static removeTween(tween: ITweenable): void;
/**
* tween并选择地把他们全部完成
* @param bringToCompletion
*/
static stopAllTweens(bringToCompletion?: boolean): void;
/**
* tweens
* Tweens以ITweenable的形式返回TweenManager所知道的所有内容
* @param context
*/
static allTweensWithContext(context: any): ITweenable[];
/**
* tweens
* @param context
* @param bringToCompletion
*/
static stopAllTweensWithContext(context: any, bringToCompletion?: boolean): void;
/**
* tweens
* Tweens以ITweenControl的形式返回TweenManager只知道这些
* @param target
*/
static allTweenWithTarget(target: any): ITweenable[];
/**
* TweenManager知道的特定目标的tweens
* @param target
* @param bringToCompletion
*/
static stopAllTweensWithTarget(target: any, bringToCompletion?: boolean): void;
}
}
declare module es {
/**
* b和c参数01
* 0 - 1/lerp任何东西
*/
module Easing {
class Linear {
static easeNone(t: number, d: number): number;
}
class Quadratic {
static easeIn(t: number, d: number): number;
static easeOut(t: number, d: number): number;
static easeInOut(t: number, d: number): number;
}
class Back {
static easeIn(t: number, d: number): number;
static easeOut(t: number, d: number): number;
static easeInOut(t: number, d: number): number;
}
class Bounce {
static easeOut(t: number, d: number): number;
static easeIn(t: number, d: number): number;
static easeInOut(t: number, d: number): number;
}
class Circular {
static easeIn(t: number, d: number): number;
static easeOut(t: number, d: number): number;
static easeInOut(t: number, d: number): number;
}
class Cubic {
static easeIn(t: number, d: number): number;
static easeOut(t: number, d: number): number;
static easeInOut(t: number, d: number): number;
}
class Elastic {
static easeIn(t: number, d: number): number;
static easeOut(t: number, d: number): number;
static easeInOut(t: number, d: number): number;
static punch(t: number, d: number): number;
}
class Exponential {
static easeIn(t: number, d: number): number;
static easeOut(t: number, d: number): number;
static easeInOut(t: number, d: number): number;
}
class Quartic {
static easeIn(t: number, d: number): number;
static easeOut(t: number, d: number): number;
static easeInOut(t: number, d: number): number;
}
class Quintic {
static easeIn(t: number, d: number): number;
static easeOut(t: number, d: number): number;
static easeInOut(t: number, d: number): number;
}
class Sinusoidal {
static easeIn(t: number, d: number): number;
static easeOut(t: number, d: number): number;
static easeInOut(t: number, d: number): number;
}
}
}
declare module es {
/**
* tween类型结构unclamped lerps.unclamped lerps对于超过0-1bounceelastic或其他tweens是必需的
*/
class Lerps {
static lerp(from: Color, to: Color, t: number): any;
static lerp(from: number, to: number, t: number): any;
static lerp(from: Rectangle, to: Rectangle, t: number): any;
static lerp(from: Vector2, to: Vector2, t: number): any;
static angleLerp(from: Vector2, to: Vector2, t: number): Vector2;
static ease(easeType: EaseType, from: Rectangle, to: Rectangle, t: number, duration: number): any;
static ease(easeType: EaseType, from: Vector2, to: Vector2, t: number, duration: number): any;
static ease(easeType: EaseType, from: number, to: number, t: number, duration: number): any;
static ease(easeType: EaseType, from: Color, to: Color, t: number, duration: number): any;
static easeAngle(easeType: EaseType, from: Vector2, to: Vector2, t: number, duration: number): Vector2;
/**
* 使
* http://allenchou.net/2015/04/game-math-more-on-numeric-springing/
* @param currentValue
* @param targetValue
* @param velocity Velocity的引用targetValue0
* @param dampingRatio 0.01-1
* @param angularFrequency 2pi(/)1Hz.35
*/
static fastSpring(currentValue: Vector2, targetValue: Vector2, velocity: Vector2, dampingRatio: number, angularFrequency: number): Vector2;
}
}
declare module es {
/**
* tween属性
*/
interface ITween<T> extends ITweenControl {
/**
* tween的易用性类型
* @param easeType
*/
setEaseType(easeType: EaseType): ITween<T>;
/**
* tween前的延迟
* @param delay
*/
setDelay(delay: number): ITween<T>;
/**
* tween的持续时间
* @param duration
*/
setDuration(duration: number): ITween<T>;
/**
* tween使用的timeScale
* TimeScale将与Time.deltaTime/Time.unscaledDeltaTime相乘tween实际使用的delta时间
* @param timeScale
*/
setTimeScale(timeScale: number): ITween<T>;
/**
* tween使用Time.unscaledDeltaTime代替Time.deltaTime
*/
setIsTimeScaleIndependent(): ITween<T>;
/**
* tween完成时应该调用的动作
* @param completionHandler
*/
setCompletionHandler(completionHandler: (tween: ITween<T>) => void): ITween<T>;
/**
* tween的循环类型pingpong循环意味着从开始--
* @param loopType
* @param loops
* @param delayBetweenLoops
*/
setLoops(loopType: LoopType, loops: number, delayBetweenLoops: number): ITween<T>;
/**
* tween的起始位置
* @param from
*/
setFrom(from: T): ITween<T>;
/**
* tween的from/to值和持续时间使tween做准备
* @param from
* @param to
* @param duration
*/
prepareForReuse(from: T, to: T, duration: number): ITween<T>;
/**
* true()tween将在使用后被回收
* TweenManager类中进行了配置Tween<T>
* @param shouldRecycleTween
*/
setRecycleTween(shouldRecycleTween: boolean): ITween<T>;
/**
* tween的to值设置为相对于其当前值的+使tween
*/
setIsRelative(): ITween<T>;
/**
* tween.context.context来设置任何可检索的对象引用
* 便
* TweenManager中搜索具有特定上下文的所有tweens
* @param context
*/
setContext(context: any): ITween<T>;
/**
* tweentween完成后会被运行
* nextTween ITweenable! ITweenT都是ITweenable
* @param nextTween
*/
setNextTween(nextTween: ITweenable): ITween<T>;
}
}
declare module es {
/**
* Tween播放控制在这里
*/
interface ITweenControl extends ITweenable {
/**
* 使使
*/
context: any;
/**
* tween扭曲为elapsedTime0duration之间tween对象是暂停
* @param elapsedTime
*/
jumpToElapsedTime(elapsedTime: number): any;
/**
* StartCoroutine调用时tween完成
*/
waitForCompletion(): any;
/**
* tween的目标TweenTargets不一定都是一个对象nullTweenManager按目标查找tweens的列表
*/
getTargetObject(): any;
}
}
declare module es {
/**
* weened的对象都需要实现这个功能
* TweenManager内部喜欢做一个简单的对象来实现这个接口tweened对象的引用
*/
interface ITweenTarget<T> {
/**
* tweened值
* @param value
*/
setTweenedValue(value: T): any;
getTweenedValue(): T;
/**
* tween的目标TweenTargets不一定都是一个对象nullTweenManager按目标查找tweens的列表
*/
getTargetObject(): any;
}
}
declare module es {
interface ITweenable {
/**
* Update一样TweenManager调用
*/
tick(): boolean;
/**
* tween被移除时TweenManager调用
* _shouldRecycleTween bool!
*/
recycleSelf(): any;
/**
* tween在运行
*/
isRunning(): boolean;
/**
* tween
*/
start(): any;
/**
*
*/
pause(): any;
/**
* tween
*/
resume(): any;
/**
* tween
* @param bringToCompletion
*/
stop(bringToCompletion: boolean): any;
}
}
declare module es {
interface IAnimFrame {
t: number;
value: number;
}
class AnimCurve {
readonly points: IAnimFrame[];
constructor(points: IAnimFrame[]);
lerp(t: number): number;
_points: IAnimFrame[];
}
}
declare module es {
/**
*
*/
class FuncPack {
/** 函数 */
func: Function;
/** 上下文 */
context: any;
constructor(func: Function, context: any);
}
/**
*
*/
class Emitter<T> {
private _messageTable;
constructor();
/**
*
* @param eventType
* @param handler
* @param context
*/
addObserver(eventType: T, handler: Function, context: any): void;
/**
*
* @param eventType
* @param handler
*/
removeObserver(eventType: T, handler: Function): void;
/**
*
* @param eventType
* @param data
*/
emit(eventType: T, ...data: any[]): void;
}
}
declare module es {
enum Edge {
top = 0,
bottom = 1,
left = 2,
right = 3
}
}
declare module es {
class EqualityComparer<T> implements IEqualityComparer<T> {
static default<T>(): EqualityComparer<T>;
protected constructor();
equals(x: T, y: T): boolean;
getHashCode(o: T): number;
private _getHashCodeForNumber;
private _getHashCodeForString;
private forOwn;
}
}
declare module es {
class Hash {
/**
*
* @param data
*/
static computeHash(...data: number[]): number;
}
}
declare module es {
interface IComparer<T> {
compare(x: T, y: T): number;
}
}
declare module es {
/**
* Hashcode的生成
*/
interface IEqualityComparable {
/**
*
* @param other
*/
equals(other: any): boolean;
/**
*
*/
getHashCode(): number;
}
}
declare module es {
/**
*
*/
interface IEqualityComparer<T> {
/**
*
* @param x
* @param y
*/
equals(x: T, y: T): boolean;
/**
*
* @param value
*/
getHashCode(value: T): number;
}
}
declare module es {
/**
*
*/
interface IEquatable<T> {
equals(other: T): boolean;
}
}
declare module es {
interface IListener {
caller: object;
callback: Function;
}
interface IObservable {
addListener(caller: object, callback: Function): any;
removeListener(caller: object, callback: Function): any;
clearListener(): any;
clearListenerWithCaller(caller: object): any;
}
class Observable implements IObservable {
constructor();
addListener(caller: object, callback: Function): void;
removeListener(caller: object, callback: Function): void;
clearListener(): void;
clearListenerWithCaller(caller: object): void;
notify(...args: any[]): void;
private _listeners;
}
class ObservableT<T> extends Observable {
addListener(caller: object, callback: (arg: T) => void): void;
removeListener(caller: object, callback: (arg: T) => void): void;
notify(arg: T): void;
}
class ObservableTT<T, R> extends Observable {
addListener(caller: object, callback: (arg1: T, arg2: R) => void): void;
removeListener(caller: object, callback: (arg: T, arg2: R) => void): void;
notify(arg1: T, arg2: R): void;
}
class Command implements IObservable {
constructor(caller: object, action: Function);
bindAction(caller: object, action: Function): void;
dispatch(...args: any[]): void;
addListener(caller: object, callback: Function): void;
removeListener(caller: object, callback: Function): void;
clearListener(): void;
clearListenerWithCaller(caller: object): void;
private _onExec;
private _caller;
private _action;
}
class ValueChangeCommand<T> implements IObservable {
constructor(value: T);
readonly onValueChange: Observable;
value: T;
dispatch(value: T): void;
addListener(caller: object, callback: Function): void;
removeListener(caller: object, callback: Function): void;
clearListener(): void;
clearListenerWithCaller(caller: object): void;
private _onValueChange;
private _value;
}
}
declare module es {
class Ref<T> {
value: T;
constructor(value: T);
}
}
declare module es {
class Screen {
static width: number;
static height: number;
static readonly size: Vector2;
static readonly center: Vector2;
}
}
declare module es {
/**
* 11update时添加到amount中
*/
class SubpixelNumber {
remainder: number;
/**
* amount递增余数intamount设置为当前值
* @param amount
*/
update(amount: number): number;
/**
* 0
*
*/
reset(): void;
}
}
declare module es {
/**
* triangleIndices列表中
*/
class Triangulator {
/**
* 使
*/
triangleIndices: number[];
private _triPrev;
private _triNext;
static testPointTriangle(point: Vector2, a: Vector2, b: Vector2, c: Vector2): boolean;
/**
* CCWarePointsCCW参数传递为false
* @param points
* @param arePointsCCW
*/
triangulate(points: Vector2[], arePointsCCW?: boolean): void;
private initialize;
}
}
declare module es {
class UUID {
static randomUUID(): string;
}
}
declare module es {
interface Class extends Function {
}
function getClassName(klass: any): string;
}
declare namespace es {
/**
*
*/
class Stopwatch {
private readonly getSystemTime;
/**
*
* undefined
*/
private _startSystemTime;
/**
*
* undefined
*/
private _stopSystemTime;
/** 自上次复位以来,秒表已停止的系统时间总数。 */
private _stopDuration;
/**
*
* undefined
*/
private _pendingSliceStartStopwatchTime;
/**
*
*/
private _completeSlices;
constructor(getSystemTime?: GetTimeFunc);
getState(): State;
isIdle(): boolean;
isRunning(): boolean;
isStopped(): boolean;
/**
*
*/
slice(): Slice;
/**
* /
*/
getCompletedSlices(): Slice[];
/**
* /
*/
getCompletedAndPendingSlices(): Slice[];
/**
*
*/
getPendingSlice(): Slice;
/**
*
*/
getTime(): number;
/**
*
*/
reset(): void;
/**
* ()
* @param forceReset
*/
start(forceReset?: boolean): void;
/**
*
* @param recordPendingSlice
*/
stop(recordPendingSlice?: boolean): number;
/**
*
* @param endStopwatchTime
*/
private calculatePendingSlice;
/**
*
* @param endSystemTime
*/
private caculateStopwatchTime;
/**
*
*
*/
private getSystemTimeOfCurrentStopwatchTime;
/**
* /
* @param endStopwatchTime
*/
private recordPendingSlice;
}
/**
*
*
*/
type GetTimeFunc = () => number;
enum State {
/** 秒表尚未启动,或已复位。 */
IDLE = "IDLE",
/** 秒表正在运行。 */
RUNNING = "RUNNING",
/** 秒表以前还在跑,但现在已经停了。 */
STOPPED = "STOPPED"
}
function setDefaultSystemTimeGetter(systemTimeGetter?: GetTimeFunc): void;
/**
*
*/
interface Slice {
/** 秒表显示的时间在这一片开始的时候。 */
readonly startTime: number;
/** 秒表在这片片尾的时间。 */
readonly endTime: number;
/** 该切片的运行时间 */
readonly duration: number;
}
}
declare module es {
class Bag<E> implements ImmutableBag<E> {
size_: number;
length: number;
private array;
constructor(capacity?: number);
removeAt(index: number): E;
remove(e: E): boolean;
removeLast(): E;
contains(e: E): boolean;
removeAll(bag: ImmutableBag<E>): boolean;
get(index: number): E;
safeGet(index: number): E;
size(): number;
getCapacity(): number;
isIndexWithinBounds(index: number): boolean;
isEmpty(): boolean;
add(e: E): void;
set(index: number, e: E): void;
grow(newCapacity?: number): void;
ensureCapacity(index: number): void;
clear(): void;
addAll(items: ImmutableBag<E>): void;
}
}
declare module es {
/**
*
* 使
* N倍
* Faster dictionary在大部分操作上也比标准字典快
* 使
*/
class FasterDictionary<TKey, TValue> {
_values: TValue[];
_valuesInfo: FastNode[];
_buckets: number[];
_freeValueCellIndex: number;
_collisions: number;
constructor(size?: number);
getValuesArray(count: {
value: number;
}): TValue[];
readonly valuesArray: TValue[];
readonly count: number;
add(key: TKey, value: TValue): void;
addValue(key: TKey, value: TValue, indexSet: {
value: number;
}): boolean;
remove(key: TKey): boolean;
trim(): void;
clear(): void;
fastClear(): void;
containsKey(key: TKey): boolean;
tryGetValue(key: TKey): TValue;
tryFindIndex(key: TKey, findIndex: {
value: number;
}): boolean;
getDirectValue(index: number): TValue;
getIndex(key: TKey): number;
static updateLinkedList(index: number, valuesInfo: FastNode[]): void;
static hash(key: any): number;
static reduce(x: number, n: number): number;
}
class FastNode {
readonly key: any;
readonly hashcode: number;
previous: number;
next: number;
constructor(key: any, hash: number, previousNode?: number);
}
}
declare module es {
interface ImmutableBag<E> {
get(index: number): E;
size(): number;
isEmpty(): boolean;
contains(e: E): boolean;
}
}
declare module es {
class Node<T> {
element: T;
next: Node<T>;
constructor(element: T, next?: Node<T>);
}
interface equalsFnType<T> {
(a: T, b: T): boolean;
}
function defaultEquals<T>(a: T, b: T): boolean;
class LinkedList<T> {
protected count: number;
protected next: any;
protected equalsFn: equalsFnType<T>;
protected head: Node<T>;
constructor(equalsFn?: typeof defaultEquals);
push(element: T): void;
removeAt(index: number): T;
getElementAt(index: number): Node<T>;
insert(element: T, index: number): boolean;
indexOf(element: T): number;
remove(element: T): void;
clear(): void;
size(): number;
isEmpty(): boolean;
getHead(): Node<T>;
toString(): string;
}
}
declare module es {
/**
*
*/
class ListPool {
private static readonly _objectQueue;
/**
* 使cacheCount对象填充缓存
* @param cacheCount
*/
static warmCache(cacheCount: number): void;
/**
* cacheCount项目
* @param cacheCount
*/
static trimCache(cacheCount: any): void;
/**
*
*/
static clearCache(): void;
/**
*
*/
static obtain<T>(): T[];
/**
*
* @param obj
*/
static free<T>(obj: Array<T>): void;
}
}
declare module es {
/**
* DTO
*/
class Pair<T> implements IEqualityComparable {
first: T;
second: T;
constructor(first: T, second: T);
clear(): void;
equals(other: Pair<T>): boolean;
getHashCode(): number;
}
}
declare module es {
/**
*
*/
class Pool {
private static _objectQueue;
/**
* 使cacheCount对象填充缓存
* @param type
* @param cacheCount
*/
static warmCache<T>(type: new (...args: any[]) => T, cacheCount: number): void;
/**
* cacheCount项目
* @param cacheCount
*/
static trimCache(cacheCount: number): void;
/**
*
*/
static clearCache(): void;
/**
*
*/
static obtain<T>(type: new (...args: any[]) => T): T;
/**
*
* @param obj
*/
static free<T>(obj: T): void;
}
interface IPoolable {
/**
*
*/
reset(): any;
}
var isIPoolable: (props: any) => props is IPoolable;
}
declare module es {
interface ISet<T> {
add(item: T): boolean;
remove(item: T): boolean;
contains(item: T): boolean;
getCount(): number;
clear(): void;
toArray(): Array<T>;
/**
*
* @param other
*/
exceptWith(other: Array<T>): void;
/**
* Set对象使
* @param other
*/
intersectWith(other: Array<T>): void;
/**
* 使
* @param other
*/
unionWith(other: Array<T>): void;
isSubsetOf(other: Array<T>): boolean;
isSupersetOf(other: Array<T>): boolean;
overlaps(other: Array<T>): boolean;
setEquals(other: Array<T>): boolean;
}
abstract class Set<T> implements ISet<T> {
protected buckets: T[][];
protected count: number;
constructor(source?: Array<T>);
abstract getHashCode(item: T): number;
abstract areEqual(value1: T, value2: T): boolean;
add(item: T): boolean;
remove(item: T): boolean;
contains(item: T): boolean;
getCount(): number;
clear(): void;
toArray(): T[];
/**
*
* @param other
*/
exceptWith(other: Array<T>): void;
/**
* Set对象使
* @param other
*/
intersectWith(other: Array<T>): void;
unionWith(other: Array<T>): void;
/**
*
* @param other
*/
isSubsetOf(other: Array<T>): boolean;
/**
*
* @param other
*/
isSupersetOf(other: Array<T>): boolean;
overlaps(other: Array<T>): boolean;
setEquals(other: Array<T>): boolean;
private buildInternalBuckets;
private bucketsContains;
}
class HashSet<T extends IEqualityComparable> extends Set<T> {
constructor(source?: Array<T>);
getHashCode(item: T): number;
areEqual(value1: T, value2: T): boolean;
}
}
declare module es {
/**
* startCoroutine返回的接口coroutine的能力
*/
interface ICoroutine {
/**
* Coroutine
*/
stop(): any;
/**
* Coroutine是否应该使用deltaTime或unscaledDeltaTime进行计时
* @param useUnscaledDeltaTime
*/
setUseUnscaledDeltaTime(useUnscaledDeltaTime: boolean): ICoroutine;
}
class Coroutine {
/**
* Coroutine在指定的时间内暂停Coroutine.waitForSeconds的基础上Coroutine中使用Yield
* @param seconds
*/
static waitForSeconds(seconds: number): WaitForSeconds;
}
/**
* coroutine想要暂停一段时间时Coroutine.waitForSeconds返回其中一个
*/
class WaitForSeconds {
static waiter: WaitForSeconds;
waitTime: number;
wait(seconds: number): WaitForSeconds;
}
}
declare module es {
/**
* CoroutineManager用于隐藏Coroutine所需数据的内部类
*/
class CoroutineImpl implements ICoroutine, IPoolable {
enumerator: any;
/**
* waitTimer中
*/
waitTimer: number;
isDone: boolean;
waitForCoroutine: CoroutineImpl;
useUnscaledDeltaTime: boolean;
stop(): void;
setUseUnscaledDeltaTime(useUnscaledDeltaTime: boolean): this;
prepareForUse(): void;
reset(): void;
}
class CoroutineManager extends GlobalManager {
/**
*
* coroutineshouldRunNextFrame列表中
*/
_isInUpdate: boolean;
_unblockedCoroutines: CoroutineImpl[];
_shouldRunNextFrame: CoroutineImpl[];
/**
* IEnumerator添加到CoroutineManager中
* Coroutine在每一帧调用Update之前被执行
* @param enumerator
*/
startCoroutine(enumerator: any): CoroutineImpl;
update(): void;
/**
* coroutinecoroutine应该在下一帧继续运行truecoroutine放回Pool
* @param coroutine
*/
tickCoroutine(coroutine: CoroutineImpl): boolean;
}
}
declare module es {
class MaxRectsBinPack {
binWidth: number;
binHeight: number;
allowRotations: boolean;
usedRectangles: Rectangle[];
freeRectangles: Rectangle[];
constructor(width: number, height: number, rotations?: boolean);
init(width: number, height: number, rotations?: boolean): void;
insert(width: number, height: number): Rectangle;
findPositionForNewNodeBestAreaFit(width: number, height: number, bestAreaFit: Ref<number>, bestShortSideFit: Ref<number>): Rectangle;
splitFreeNode(freeNode: Rectangle, usedNode: Rectangle): boolean;
pruneFreeList(): void;
isContainedIn(a: Rectangle, b: Rectangle): boolean;
}
}
declare module es {
class ArrayUtils {
/**
*
* @param ary
*/
static bubbleSort(ary: number[]): void;
/**
*
* @param ary
*/
static insertionSort(ary: number[]): void;
/**
*
* @param ary
* @param value
* @returns
*/
static binarySearch(ary: number[], value: number): number;
/**
*
* @param ary
* @param num
*/
static findElementIndex(ary: any[], num: any): any;
/**
*
* @param ary
*/
static getMaxElementIndex(ary: number[]): number;
/**
*
* @param ary
*/
static getMinElementIndex(ary: number[]): number;
/**
* "唯一性"
* @param ary
* @returns
*
* @tutorial
* : [1, 2, 2, 3, 4]
* : [1, 2, 3, 4]
*/
static getUniqueAry(ary: number[]): number[];
/**
* 2
* A = [1, 2, 3, 4, 6]
* B = [0, 2, 1, 3, 4]
* [6, 0]
* @param aryA
* @param aryB
* @return
*/
static getDifferAry(aryA: number[], aryB: number[]): number[];
/**
*
* @param array
* @param index1
* @param index2
*/
static swap(array: any[], index1: number, index2: number): void;
/**
*
* @param ary
*/
static clearList(ary: any[]): void;
/**
*
* @param ary
* @return
*/
static cloneList(ary: any[]): any[];
/**
* 2
* @param ary1 1
* @param ary2 2
*/
static equals(ary1: number[], ary2: number[]): Boolean;
/**
*
* @param ary
* @param index
* @param value
* @returns
*/
static insert(ary: any[], index: number, value: any): any;
/**
* FisherYates shuffle
* @param list
*/
static shuffle<T>(list: T[]): void;
/**
* falsetrue
* @param list
* @param item
*/
static addIfNotPresent<T>(list: T[], item: T): boolean;
/**
*
* @param list
*/
static lastItem<T>(list: T[]): T;
/**
* !
* @param list
*/
static randomItem<T>(list: T[]): T;
/**
* List可以通过ListPool.free放回池中
* @param list
* @param itemCount
*/
static randomItems<T>(list: T[], itemCount: number): T[];
}
}
declare module es {
class Base64Utils {
private static _keyStr;
/**
* Base64位解析
*/
static readonly nativeBase64: boolean;
/**
*
* @param input
*/
static decode(input: string): string;
/**
*
* @param input
*/
static encode(input: string): string;
/**
* Base64格式数据
* @param input
* @param bytes
*/
static decodeBase64AsArray(input: string, bytes: number): Uint32Array;
/**
*
* @param data
* @param decoded
* @param compression
* @private
*/
static decompress(data: string, decoded: any, compression: string): any;
/**
* csv数据
* @param input
*/
static decodeCSV(input: string): Array<number>;
}
}
declare module es {
class EdgeExt {
static oppositeEdge(self: Edge): Edge;
/**
* true
* @param self
*/
static isHorizontal(self: Edge): boolean;
/**
* true
* @param self
*/
static isVertical(self: Edge): boolean;
}
}
declare module es {
class NumberExtension {
static toNumber(value: any): number;
}
}
declare module es {
class RandomUtils {
/**
* start stop之间取一个随机整数step指定间隔 start与stop较大的一个
*
* this.randrange(1, 10, 3)
* 1 4 7 , 1010
*
* @param start
* @param stop
* @param step
* @return start < stop, [start, stop)
*
*/
static randrange(start: number, stop: number, step?: number): number;
/**
* a b之间的随机整数 a b
* @param a
* @param b
* @return [a, b]
*
*/
static randint(a: number, b: number): number;
/**
* a - b之间的随机数 Math.max(a, b)
* @param a
* @param b
* @return a < b, [a, b)
*/
static randnum(a: number, b: number): number;
/**
*
* @param array
* @return
*/
static shuffle(array: any[]): any[];
/**
*
* @param sequence vectorlength属性
*
* @return
*
*/
static choice(sequence: any): any;
/**
* æ ?
* <pre>
* this.sample([1, 2, 3, 4, 5], 3) // Choose 3 elements
* [4, 1, 5]
* </pre>
* @param sequence
* @param num
* @return
*
*/
static sample(sequence: any[], num: number): any[];
/**
* 0.0 - 1.0 Math.random()
* @return Math.random()
*
*/
static random(): number;
/**
*
* @param chance
* @return
*/
static boolean(chance?: number): boolean;
private static _randomCompare;
}
}
declare module es {
class RectangleExt {
/**
*
* @param rect
* @param edge
*/
static getSide(rect: Rectangle, edge: Edge): number;
/**
*
* @param first
* @param point
*/
static union(first: Rectangle, point: Vector2): Rectangle;
static getHalfRect(rect: Rectangle, edge: Edge): Rectangle;
/**
* /
* @param rect
* @param edge
* @param size
*/
static getRectEdgePortion(rect: Rectangle, edge: Edge, size?: number): Rectangle;
static expandSide(rect: Rectangle, edge: Edge, amount: number): void;
static contract(rect: Rectangle, horizontalAmount: any, verticalAmount: any): void;
/**
*
* @param points
*/
static boundsFromPolygonVector(points: Vector2[]): Rectangle;
/**
* /
* @param min
* @param max
*/
static fromMinMaxVector(min: Vector2, max: Vector2): Rectangle;
/**
* delta位置的Bounds
* @param rect
* @param deltaX
* @param deltaY
*/
static getSweptBroadphaseBounds(rect: Rectangle, deltaX: number, deltaY: number): Rectangle;
/**
* true
* moveX和moveY将返回b1为避免碰撞而必须移动的移动量
* @param rect
* @param other
* @param moveX
* @param moveY
*/
collisionCheck(rect: Rectangle, other: Rectangle, moveX: Ref<number>, moveY: Ref<number>): boolean;
/**
*
* @param rectA
* @param rectB
* @returns
*
*
* Vector2.zero
*/
static getIntersectionDepth(rectA: Rectangle, rectB: Rectangle): Vector2;
static getClosestPointOnBoundsToOrigin(rect: Rectangle): Vector2;
/**
* Rectangle中或上的最接近点返回给定点
* @param rect
* @param point
*/
static getClosestPointOnRectangleToPoint(rect: Rectangle, point: Vector2): Vector2;
/**
*
* @param rect
* @param point
*/
static getClosestPointOnRectangleBorderToPoint(rect: Rectangle, point: Vector2): Vector2;
static getMax(rect: Rectangle): Vector2;
/**
* Vector2的形式获取矩形的中心点
* @param rect
* @returns
*/
static getCenter(rect: Rectangle): Vector2;
/**
*
* @param points
*/
static boundsFromPolygonPoints(points: Vector2[]): Rectangle;
static calculateBounds(rect: Rectangle, parentPosition: Vector2, position: Vector2, origin: Vector2, scale: Vector2, rotation: number, width: number, height: number): void;
/**
*
* @param rect
* @param scale
*/
static scale(rect: Rectangle, scale: Vector2): void;
static translate(rect: Rectangle, vec: Vector2): void;
}
}
declare module es {
class TextureUtils {
static premultiplyAlpha(pixels: number[]): void;
}
}
declare module es {
class TypeUtils {
static getType(obj: any): any;
}
}
declare module es {
class Vector2Ext {
/**
* CCW还是CW
* @param a
* @param center
* @param c
*/
static isTriangleCCW(a: Vector2, center: Vector2, c: Vector2): boolean;
static halfVector(): Vector2;
/**
* (Perp(u) v)
* @param u
* @param v
*/
static cross(u: Vector2, v: Vector2): number;
/**
*
* @param first
* @param second
*/
static perpendicular(first: Vector2, second: Vector2): Vector2;
/**
* x/y值翻转y反转x/y的值
* @param original
*/
static perpendicularFlip(original: Vector2): Vector2;
/**
*
* @param from
* @param to
*/
static angle(from: Vector2, to: Vector2): number;
/**
*
* @param self
* @param left
* @param right
*/
static angleBetween(self: Vector2, left: Vector2, right: Vector2): number;
/**
* 线(ab和cd)
* @param a
* @param b
* @param c
* @param d
* @param intersection
*/
static getRayIntersection(a: Vector2, b: Vector2, c: Vector2, d: Vector2, intersection?: Vector2): boolean;
/**
* Vector2的临时解决方案
*
* @param vec
*/
static normalize(vec: Vector2): void;
/**
* Vector2的数组中的向量应用变换
* @param sourceArray
* @param sourceIndex
* @param matrix
* @param destinationArray
* @param destinationIndex
* @param length
*/
static transformA(sourceArray: Vector2[], sourceIndex: number, matrix: Matrix2D, destinationArray: Vector2[], destinationIndex: number, length: number): void;
/**
* Vector2Vector2包含了通过指定的Matrix进行的二维向量变换
* @param position
* @param matrix
* @param result
*/
static transformR(position: Vector2, matrix: Matrix2D, result?: Vector2): void;
/**
* Vector2的数组中的所有向量应用变换
* @param sourceArray
* @param matrix
* @param destinationArray
*/
static transform(sourceArray: Vector2[], matrix: Matrix2D, destinationArray: Vector2[]): void;
static round(vec: Vector2): Vector2;
}
}
declare module es {
class Enumerable {
/**
*
*/
static range(start: number, count: number): List<number>;
/**
*
*/
static repeat<T>(element: T, count: number): List<T>;
}
}
declare module es {
/**
*
*/
const isObj: <T>(x: T) => boolean;
/**
*
*/
const negate: <T>(pred: (...args: T[]) => boolean) => (...args: T[]) => boolean;
/**
*
*/
const composeComparers: <T>(previousComparer: (a: T, b: T) => number, currentComparer: (a: T, b: T) => number) => (a: T, b: T) => number;
const keyComparer: <T>(_keySelector: (key: T) => string, descending?: boolean) => (a: T, b: T) => number;
}
declare module es {
type PredicateType<T> = (value?: T, index?: number, list?: T[]) => boolean;
class List<T> {
protected _elements: T[];
/**
*
*/
constructor(elements?: T[]);
/**
*
*/
add(element: T): void;
/**
*
*/
append(element: T): void;
/**
*
*/
prepend(element: T): void;
/**
*
*/
addRange(elements: T[]): void;
/**
*
*/
aggregate<U>(accumulator: (accum: U, value?: T, index?: number, list?: T[]) => any, initialValue?: U): any;
/**
*
*/
all(predicate: PredicateType<T>): boolean;
/**
*
*/
any(): boolean;
any(predicate: PredicateType<T>): boolean;
/**
*
*/
average(): number;
average(transform: (value?: T, index?: number, list?: T[]) => any): number;
/**
*
*/
cast<U>(): List<U>;
/**
*
*/
clear(): void;
/**
*
*/
concat(list: List<T>): List<T>;
/**
*
*/
contains(element: T): boolean;
/**
*
*/
count(): number;
count(predicate: PredicateType<T>): number;
/**
*
*/
defaultIfEmpty(defaultValue?: T): List<T>;
/**
*
*/
distinctBy(keySelector: (key: T) => string | number): List<T>;
/**
*
*/
elementAt(index: number): T;
/**
*
*/
elementAtOrDefault(index: number): T | null;
/**
* 使
*/
except(source: List<T>): List<T>;
/**
*
*/
first(): T;
first(predicate: PredicateType<T>): T;
/**
*
*/
firstOrDefault(): T;
firstOrDefault(predicate: PredicateType<T>): T;
/**
*
*/
forEach(action: (value?: T, index?: number, list?: T[]) => any): void;
/**
*
*/
groupBy<TResult>(grouper: (key: T) => string | number, mapper?: (element: T) => TResult): {
[key: string]: TResult[];
};
/**
*
*/
groupJoin<U, R>(list: List<U>, key1: (k: T) => any, key2: (k: U) => any, result: (first: T, second: List<U>) => R): List<R>;
/**
*
*/
indexOf(element: T): number;
/**
*
*/
insert(index: number, element: T): void | Error;
/**
* 使
*/
intersect(source: List<T>): List<T>;
/**
*
*/
join<U, R>(list: List<U>, key1: (key: T) => any, key2: (key: U) => any, result: (first: T, second: U) => R): List<R>;
/**
*
*/
last(): T;
last(predicate: PredicateType<T>): T;
/**
*
*/
lastOrDefault(): T;
lastOrDefault(predicate: PredicateType<T>): T;
/**
*
*/
max(): number;
max(selector: (value: T, index: number, array: T[]) => number): number;
/**
*
*/
min(): number;
min(selector: (value: T, index: number, array: T[]) => number): number;
/**
*
*/
ofType<U>(type: any): List<U>;
/**
*
*/
orderBy(keySelector: (key: T) => any, comparer?: (a: T, b: T) => number): List<T>;
/**
*
*/
orderByDescending(keySelector: (key: T) => any, comparer?: (a: T, b: T) => number): List<T>;
/**
*
*/
thenBy(keySelector: (key: T) => any): List<T>;
/**
*
*/
thenByDescending(keySelector: (key: T) => any): List<T>;
/**
*
*/
remove(element: T): boolean;
/**
*
*/
removeAll(predicate: PredicateType<T>): List<T>;
/**
*
*/
removeAt(index: number): void;
/**
*
*/
reverse(): List<T>;
/**
*
*/
select<TOut>(selector: (element: T, index: number) => TOut): List<TOut>;
/**
*
*/
selectMany<TOut extends List<any>>(selector: (element: T, index: number) => TOut): TOut;
/**
* 使
*/
sequenceEqual(list: List<T>): boolean;
/**
*
*/
single(predicate?: PredicateType<T>): T;
/**
* ;
*/
singleOrDefault(predicate?: PredicateType<T>): T;
/**
*
*/
skip(amount: number): List<T>;
/**
*
*/
skipLast(amount: number): List<T>;
/**
*
*/
skipWhile(predicate: PredicateType<T>): List<T>;
/**
*
*/
sum(): number;
sum(transform: (value?: T, index?: number, list?: T[]) => number): number;
/**
*
*/
take(amount: number): List<T>;
/**
*
*/
takeLast(amount: number): List<T>;
/**
*
*/
takeWhile(predicate: PredicateType<T>): List<T>;
/**
*
*/
toArray(): T[];
/**
* <dictionary>List< T>
*/
toDictionary<TKey>(key: (key: T) => TKey): List<{
Key: TKey;
Value: T;
}>;
toDictionary<TKey, TValue>(key: (key: T) => TKey, value: (value: T) => TValue): List<{
Key: TKey;
Value: T | TValue;
}>;
/**
* Set从一个Enumerable.List< T>
*/
toSet(): Set<any>;
/**
* List< T>Enumerable.List< T>
*/
toList(): List<T>;
/**
* TElement>IEnumerable< T>
*/
toLookup<TResult>(keySelector: (key: T) => string | number, elementSelector: (element: T) => TResult): {
[key: string]: TResult[];
};
/**
*
*/
where(predicate: PredicateType<T>): List<T>;
/**
*
*/
zip<U, TOut>(list: List<U>, result: (first: T, second: U) => TOut): List<TOut>;
}
/**
* 使
*
* ToDictionaryToLookupToList或ToArray方法枚举对象之前
*/
class OrderedList<T> extends List<T> {
private _comparer;
constructor(elements: T[], _comparer: (a: T, b: T) => number);
/**
*
* @override
*/
thenBy(keySelector: (key: T) => any): List<T>;
/**
*
* @override
*/
thenByDescending(keySelector: (key: T) => any): List<T>;
}
}
declare module es {
/**
*
*/
class EndPoint {
/** 该部分的位置 */
position: Vector2;
/** 如果这个端点是一个段的起始点或终点(每个段只有一个起始点和一个终点) */
begin: boolean;
/** 该端点所属的段 */
segment: Segment;
/** 端点相对于能见度测试位置的角度 */
angle: number;
constructor();
}
class EndPointComparer implements IComparer<EndPoint> {
/**
*
* @param a
* @param b
*/
compare(a: EndPoint, b: EndPoint): 0 | 1 | -1;
}
}
declare module es {
/**
* 线
*/
class Segment {
/**
*
*/
p1: EndPoint;
/**
*
*/
p2: EndPoint;
constructor();
}
}
declare module es {
/**
* 使
*
* - begin
* -
* - end来获取可见度多边形end时
*/
class VisibilityComputer {
/**
* 线180线
*/
lineCountForCircleApproximation: number;
_radius: number;
_origin: Vector2;
_isSpotLight: boolean;
_spotStartAngle: number;
_spotEndAngle: number;
_endPoints: EndPoint[];
_segments: Segment[];
_radialComparer: EndPointComparer;
static _cornerCache: Vector2[];
static _openSegments: LinkedList<Segment>;
constructor(origin?: Vector2, radius?: number);
/**
* PolyLight的遮蔽器
* @param collider
*/
addColliderOccluder(collider: Collider): void;
/**
*
* @param position
* @param radius
*/
addCircleOccluder(position: Vector2, radius: number): void;
/**
* 线
* @param p1
* @param p2
*/
addLineOccluder(p1: Vector2, p2: Vector2): void;
/**
*
* @param bounds
*/
addSquareOccluder(bounds: Rectangle): void;
/**
*
*
* @param p1
* @param p2
*/
addSegment(p1: Vector2, p2: Vector2): void;
/**
*
*/
clearOccluders(): void;
/**
*
* @param origin
* @param radius
*/
begin(origin: Vector2, radius: number): void;
/**
* ListPool
*/
end(): Vector2[];
addTriangle(triangles: Vector2[], angle1: number, angle2: number, segment: Segment): void;
/**
* 线p1-p2与p3-p4的交点
* @param p1
* @param p2
* @param p3
* @param p4
*/
static lineLineIntersection(p1: Vector2, p2: Vector2, p3: Vector2, p4: Vector2): Vector2;
static between(value: number, min: number, max: number): boolean;
/**
* 沿线
*/
loadRectangleBoundaries(): void;
/**
* a段在b的前面吗isSegmentInFrontOf(a, b) != (!isSegmentInFrontOf(b, a))
*
* http://www.redblobgames.com/articles/visibility/segment-sorting.html
* @param a
* @param b
* @param relativeTo
*/
isSegmentInFrontOf(a: Segment, b: Segment, relativeTo: Vector2): boolean;
/**
* p * (1 - f) + q * f
* @param p
* @param q
* @param f
*/
static interpolate(p: Vector2, q: Vector2, f: number): Vector2;
/**
* 线p1-p2的 "左边"
* @param p1
* @param p2
* @param point
*/
static isLeftOf(p1: Vector2, p2: Vector2, point: Vector2): boolean;
/**
* 便
*/
updateSegments(): void;
}
}
declare module es {
interface ITimer {
context: any;
/**
* stop以停止此计时器再次运行
*/
stop(): any;
/**
* 0
*/
reset(): any;
/**
* T的上下文便
*/
getContext<T>(): T;
}
}
declare module es {
/**
* ITimer的实现
*/
class Timer implements ITimer {
context: any;
_timeInSeconds: number;
_repeats: boolean;
_onTime: (timer: ITimer) => void;
_isDone: boolean;
_elapsedTime: number;
getContext<T>(): T;
reset(): void;
stop(): void;
tick(): boolean;
initialize(timeInsSeconds: number, repeats: boolean, context: any, onTime: (timer: ITimer) => void): void;
/**
* 便js需要时GC可以清理它们的引用
*/
unload(): void;
}
}
declare module es {
/**
*
*/
class TimerManager extends GlobalManager {
_timers: Timer[];
update(): void;
/**
*
* @param timeInSeconds
* @param repeats
* @param context
* @param onTime
*/
schedule(timeInSeconds: number, repeats: boolean, context: any, onTime: (timer: ITimer) => void): Timer;
}
}