UNPKG

@antv/g-webgpu-raytracer

Version:

A simple ray tracer implemented with WebGPU

122 lines (102 loc) 3.42 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.InteractionSystem = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _hammerjs = _interopRequireDefault(require("hammerjs")); var InteractionSystem = /*#__PURE__*/function () { function InteractionSystem(canvas, camera, onCameraChanged) { var _this = this; (0, _classCallCheck2.default)(this, InteractionSystem); this.canvas = canvas; this.camera = camera; this.onCameraChanged = onCameraChanged; this.isMoving = false; this.lastX = -1; this.lastY = -1; this.deltaX = 0; this.deltaY = 0; this.deltaZ = 0; this.hammertime = void 0; this.onPanend = function (e) { _this.isMoving = false; }; this.onPanstart = function (e) { _this.lastX = e.center.x; _this.lastY = e.center.y; _this.isMoving = true; _this.deltaZ = 0; }; this.onPanmove = function (e) { if (_this.isMoving) { _this.deltaX = e.center.x - _this.lastX; _this.deltaY = e.center.y - _this.lastY; _this.lastX = e.center.x; _this.lastY = e.center.y; _this.onChangeCamera({ deltaX: _this.deltaX, // deltaY: this.deltaY, deltaY: 0, deltaZ: _this.deltaZ }); } }; this.onMousewheel = function (e) { _this.deltaZ = e.deltaY; _this.onChangeCamera({ deltaX: _this.deltaX, deltaY: _this.deltaY, deltaZ: _this.deltaZ }); }; this.onPinch = function (e) { _this.deltaZ = (1 - e.scale) * 10; }; this.onChangeCamera = function (data) { var deltaX = data.deltaX, deltaY = data.deltaY, deltaZ = data.deltaZ; _this.camera.rotate(deltaX, deltaY, 0); _this.camera.dolly(deltaZ); _this.onCameraChanged(); }; } (0, _createClass2.default)(InteractionSystem, [{ key: "initialize", value: function initialize() { var hammertime = new _hammerjs.default(this.canvas); hammertime.get('pan').set({ direction: _hammerjs.default.DIRECTION_ALL }); hammertime.get('pinch').set({ enable: true }); hammertime.on('panstart', this.onPanstart); hammertime.on('panmove', this.onPanmove); hammertime.on('panend', this.onPanend); hammertime.on('pinch', this.onPinch); this.hammertime = hammertime; this.canvas.addEventListener('wheel', this.onMousewheel); } }, { key: "tearDown", value: function tearDown() { this.hammertime.off('panstart', this.onPanstart); this.hammertime.off('panmove', this.onPanmove); this.hammertime.off('panend', this.onPanend); this.hammertime.off('pinch', this.onPinch); this.canvas.removeEventListener('wheel', this.onMousewheel); } }]); return InteractionSystem; }(); exports.InteractionSystem = InteractionSystem; InteractionSystem.UP_EVENT = 'mouseup'; InteractionSystem.MOVE_EVENT = 'mousemove'; InteractionSystem.DOWN_EVENT = 'mousedown'; InteractionSystem.OUT_EVENT = 'mouseout'; InteractionSystem.WHEEL_EVENT = 'mousewheel'; //# sourceMappingURL=index.js.map