molstar
Version:
A comprehensive macromolecular library.
75 lines • 3.1 kB
JavaScript
/**
* Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.PluginAnimationLoop = void 0;
var tslib_1 = require("tslib");
var now_1 = require("../mol-util/now");
var PluginAnimationLoop = /** @class */ (function () {
function PluginAnimationLoop(plugin) {
var _this = this;
this.plugin = plugin;
this.currentFrame = void 0;
this._isAnimating = false;
this.frame = function () {
_this.tick((0, now_1.now)());
if (_this._isAnimating) {
_this.currentFrame = requestAnimationFrame(_this.frame);
}
};
}
Object.defineProperty(PluginAnimationLoop.prototype, "isAnimating", {
get: function () {
return this._isAnimating;
},
enumerable: false,
configurable: true
});
PluginAnimationLoop.prototype.tick = function (t, options) {
var _a;
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
return (0, tslib_1.__generator)(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, this.plugin.managers.animation.tick(t, options === null || options === void 0 ? void 0 : options.isSynchronous)];
case 1:
_b.sent();
(_a = this.plugin.canvas3d) === null || _a === void 0 ? void 0 : _a.tick(t, options);
return [2 /*return*/];
}
});
});
};
PluginAnimationLoop.prototype.resetTime = function (t) {
var _a;
if (t === void 0) { t = (0, now_1.now)(); }
(_a = this.plugin.canvas3d) === null || _a === void 0 ? void 0 : _a.resetTime(t);
};
PluginAnimationLoop.prototype.start = function (options) {
var _a;
(_a = this.plugin.canvas3d) === null || _a === void 0 ? void 0 : _a.resume();
this._isAnimating = true;
this.resetTime();
// TODO: should immediate be the default mode?
if (options === null || options === void 0 ? void 0 : options.immediate)
this.frame();
else
this.currentFrame = requestAnimationFrame(this.frame);
};
PluginAnimationLoop.prototype.stop = function (options) {
var _a;
this._isAnimating = false;
if (this.currentFrame !== void 0) {
cancelAnimationFrame(this.currentFrame);
this.currentFrame = void 0;
}
if (options === null || options === void 0 ? void 0 : options.noDraw) {
(_a = this.plugin.canvas3d) === null || _a === void 0 ? void 0 : _a.pause(options === null || options === void 0 ? void 0 : options.noDraw);
}
};
return PluginAnimationLoop;
}());
exports.PluginAnimationLoop = PluginAnimationLoop;
//# sourceMappingURL=animation-loop.js.map
;