UNPKG

5.46 kBTypeScriptView Raw
1export class SpringSystem {
2 listeners: Array<Listener>|null;
3 looper: Looper;
4
5 constructor(looper?: Looper);
6
7 setLooper(looper: Looper): void;
8
9 createSpring(tension?: number, friction?: number): Spring;
10 createSpringWithBouncinessAndSpeed(bounciness?: number, speed?: number):
11 Spring;
12 createSpringWithConfig(kwargs: SpringConfigDict): Spring;
13
14 getIsIdle(): boolean;
15 getSpringById(id: number): Spring;
16 getAllSprings(): Array<Spring>;
17
18 registerSpring(value: Spring): void;
19 deregisterSpring(value: Spring): void;
20
21 advance(time: number, deltaTime: number): void;
22 loop(currentTimeMillis: number): void;
23
24 activateSpring(springId: number): void;
25
26 addListener(listener: Listener): void;
27 removeListener(listener: Listener): void;
28 removeAllListeners(): void;
29}
30
31export class Spring {
32 static MAX_DELTA_TIME_SEC: number;
33 static SOLVER_TIMESTEP_SEC: number;
34
35 listeners: Array<Listener>|null;
36
37 constructor(system: SpringSystem);
38
39 destroy(): void;
40
41 getId(): number;
42
43 getSpringConfig(): SpringConfigDict;
44 setSpringConfig(value: SpringConfigDict): Spring;
45
46 getCurrentValue(): number;
47 setCurrentValue(currentValue: number, skipSetAtRest?: boolean): Spring;
48
49 getStartValue(): number;
50
51 getCurrentDisplacementDistance(): number;
52 getCurrentDisplacementDistanceForState(state: PhysicsState): number;
53
54 getEndValue(): number;
55 setEndValue(value: number): Spring;
56
57 getVelocity(): number;
58 setVelocity(value: number): Spring;
59
60 getRestSpeedThreshold(): number;
61 setRestSpeedThreshold(value: number): Spring;
62
63 getRestDisplacementThreshold(): number;
64
65 isOvershootClampingEnabled(): boolean;
66 setOvershootClampingEnabled(value: boolean): Spring;
67
68 isOvershooting(): boolean;
69
70 advance(time: number, realDeltaTime: number): void;
71 systemShouldAdvance(): boolean;
72
73 notifyPositionUpdated(notifyActivate?: boolean, notifyAtRest?: boolean): void;
74
75 wasAtRest(): boolean;
76 isAtRest(): boolean;
77 setAtRest(): Spring;
78
79 interpolate(value: number): void;
80
81 getListeners(): Array<Listener>;
82 addListener(value: Listener): Spring;
83 removeListener(value: Listener): Spring;
84 removeAllListeners(): Spring;
85
86 currentValueIsApproximately(value: number): boolean;
87}
88
89export interface CompleteListener {
90 onSpringEndStateChange(spring: Spring): void;
91 onBeforeIntegrate(spring: Spring): void;
92 onAfterIntegrate(spring: Spring): void;
93 onSpringActivate(spring: Spring): void;
94 onSpringUpdate(spring: Spring): void;
95 onSpringAtRest(spring: Spring): void;
96}
97
98export type Listener = Partial<CompleteListener>;
99
100export type PhysicsState = {
101 position: number,
102 friction: number,
103};
104
105// We can't just export the type alias, because the library provides a factory
106// called SpringConfig, so we export the factory as SpringConfig and call the
107// type alias SpringConfigDict.
108
109export type SpringConfigDict = {
110 tension: number,
111 friction: number,
112};
113
114export class SpringConfig {
115 static DEFAULT_ORIGAMI_SPRING_CONFIG: SpringConfig;
116
117 static fromOrigamiTensionAndFriction(tension: number, friction: number):
118 SpringConfig;
119 static fromBouncinessAndSpeed(bounciness: number, speed: number):
120 SpringConfig;
121 static coastingConfigWithOrigamiFriction(friction: number): SpringConfig;
122
123 tension: number;
124 friction: number;
125
126 constructor(tension: number, friction: number);
127}
128
129export interface Looper {
130 springSystem: SpringSystem;
131
132 run(): void;
133}
134
135export class AnimationLooper implements Looper {
136 springSystem: SpringSystem;
137
138 constructor();
139
140 run(): void;
141}
142
143export class SimulationLooper implements Looper {
144 springSystem: SpringSystem;
145
146 constructor(timestep?: number);
147
148 run(): void;
149}
150
151export class SteppingSimulationLooper extends SimulationLooper {
152 step(timestep: number): void;
153}
154
155export namespace OrigamiValueConverter {
156 function tensionFromOrigamiValue(value: number): number;
157 function origamiValueFromTension(value: number): number;
158 function frictionFromOrigamiValue(value: number): number;
159 function origamiFromFriction(value: number): number;
160}
161
162export class BouncyConversion {
163 bounciness: number;
164 speed: number;
165
166 constructor(bounciness: number, speed: number);
167
168 normalize(value: number, startValue: number, endValue: number): void;
169 projectNormal(n: number, start: number, end: number): void;
170 linearInterpolation(t: number, start: number, end: number): void;
171 quadraticOutInterpolation(t: number, start: number, end: number): void;
172 b3Friction1(x: number): void;
173 b3Friction2(x: number): void;
174 b3Friction3(x: number): void;
175 b3Nobounce(tension: number): void;
176}
177
178export type RGB = {
179 r: number,
180 g: number,
181 b: number,
182};
183
184export type RequestAnimationFrame = typeof requestAnimationFrame;
185
186export namespace util {
187 function bind(func: Function, context: any): Function;
188 function extend<T, U>(target: T, source: U): T&U;
189
190 function hexToRGB(color: string): RGB;
191 function rgbToHex(r: number, g: number, b: number): string;
192
193 const onFrame: RequestAnimationFrame;
194
195 // These are technically aliased to MathUtil, but it's not worth breaking them
196 // out
197 function mapValueInRange(
198 value: number, fromLow: number, fromHigh: number, toLow: number,
199 toHigh: number): number;
200 function interpolateColor(
201 val: number, startColor: string, endColor: string, fromLow?: number,
202 fromHigh?: number, asRGB?: boolean): string;
203 function degreesToRadians(value: number): number;
204 function radiansToDegrees(value: number): number;
205}