mirror of
https://github.com/zhigang1992/DefinitelyTyped.git
synced 2026-04-17 12:16:38 +08:00
88 lines
2.1 KiB
TypeScript
88 lines
2.1 KiB
TypeScript
|
|
|
|
import { Node, Size, FamousEngine } from 'famous/core'
|
|
import { DOMElement } from 'famous/dom-renderables'
|
|
import { PhysicsEngine, Box, RotationalSpring } from 'famous/physics'
|
|
import { Vec3, Quaternion } from 'famous/math'
|
|
|
|
function test_seed() {
|
|
FamousEngine.init();
|
|
|
|
var logo = FamousEngine.createScene().addChild();
|
|
|
|
new DOMElement(logo, { tagName: 'img' })
|
|
.setAttribute('src', './images/famous_logo.png');
|
|
|
|
logo
|
|
.setSizeMode('absolute', 'absolute', 'absolute')
|
|
.setAbsoluteSize(250, 250)
|
|
.setAlign(0.5, 0.5)
|
|
.setMountPoint(0.5, 0.5)
|
|
.setOrigin(0.5, 0.5);
|
|
|
|
var spinner = logo.addComponent({
|
|
onUpdate: function(time: number) {
|
|
logo.setRotation(0, time / 1000, 0);
|
|
logo.requestUpdateOnNextTick(spinner);
|
|
}
|
|
});
|
|
|
|
logo.requestUpdate(spinner);
|
|
}
|
|
|
|
function test_physics() {
|
|
let button = new Node()
|
|
.setSizeMode(Size.ABSOLUTE, Size.ABSOLUTE)
|
|
.setAbsoluteSize(120, 40)
|
|
.setAlign(.5, .5)
|
|
.setMountPoint(.5, .5)
|
|
.setOrigin(.5, .4);
|
|
|
|
button.addUIEvent('mousedown');
|
|
button.addUIEvent('touchstart');
|
|
button.addUIEvent('mouseup');
|
|
button.addUIEvent('touchend');
|
|
|
|
let engine = new PhysicsEngine();
|
|
let box = new Box({
|
|
mass: .25,
|
|
size: [1, 1, 1]
|
|
});
|
|
engine.add(box);
|
|
|
|
let anchor = new Quaternion();
|
|
let rotationalSpring = new RotationalSpring(null, box, {
|
|
period: 0.5,
|
|
dampingRatio: 0.3,
|
|
anchor: anchor
|
|
});
|
|
engine.add(rotationalSpring);
|
|
|
|
let started = false;
|
|
let id = button.addComponent({
|
|
onUpdate: (time: number) => {
|
|
engine.update(time);
|
|
|
|
if (box.getAngularVelocity().length() < 1e-7) {
|
|
return;
|
|
}
|
|
|
|
let t = engine.getTransform(box);
|
|
button.setRotation(t.rotation[0], t.rotation[1], t.rotation[2], t.rotation[3]);
|
|
|
|
button.requestUpdateOnNextTick(id);
|
|
},
|
|
onReceive: (event: string) => {
|
|
if (event == 'mousedown' || event == 'touchstart') {
|
|
anchor.fromEuler(Math.PI, 0, 0);
|
|
started = true;
|
|
button.requestUpdate(id);
|
|
}
|
|
|
|
if (event == 'mouseup' || event == 'touchend') {
|
|
anchor.fromEuler(0, 0, 0);
|
|
started = false;
|
|
}
|
|
}
|
|
});
|
|
} |