/* * encantar.js * GPU-accelerated Augmented Reality for the web * Copyright (C) 2022-2024 Alexandre Martins * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * trackable-pointer.ts * A trackable representing an instance of pointer-based input */ import { Trackable } from '../tracker'; import { Vector2 } from '../../geometry/vector2'; /** * The phase of a TrackablePointer. Possible values: * - "began": the tracking began in this frame (e.g., a finger has just touched the screen) * - "stationary": the user did not move the pointer in this frame * - "moved": the user moved the pointer in this frame * - "ended": the tracking ended in this frame (e.g., a finger has just been lifted from the screen) * - "canceled": the tracking was canceled in this frame (e.g., the page has just lost focus) */ export type TrackablePointerPhase = 'began' | 'moved' | 'stationary' | 'ended' | 'canceled'; /** * A trackable representing an instance of pointer-based input */ export interface TrackablePointer extends Trackable { /** a unique identifier assigned to this pointer */ readonly id: number; /** the phase of the pointer */ readonly phase: TrackablePointerPhase; /** current position in normalized units [-1,1]x[-1,1] */ readonly position: Vector2; /** the difference between the position of the pointer in this and in the previous frame */ readonly deltaPosition: Vector2; /** the position of the pointer when its tracking began */ readonly initialPosition: Vector2; /** current velocity, given in normalized units per second */ readonly velocity: Vector2; /** elapsed time, in seconds, since the tracking of this pointer began */ readonly elapsedTime: number; /** how much this pointer has moved, in normalized units, since its tracking began */ readonly totalDistance: number; /** whether or not this is the primary pointer for this type */ readonly isPrimary: boolean; /** the type of the originating device; typically "mouse", "touch" or "pen" */ readonly kind: string; }