{"_id":"@dreamoment/metronome","name":"@dreamoment/metronome","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@dreamoment/metronome","version":"0.0.1","type":"module","types":"dist/index.d.ts","main":"dist/index.es.js","author":{"name":"dreamoment-npm"},"license":"MIT","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"dev":"vite","build:example":"vue-tsc && vite build --mode example","build:lib":"vue-tsc && vite build --mode lib","publish:patch":"npm version patch && npm publish"},"devDependencies":{"@types/node":"^20.10.5","@types/three":"^0.159.0","@vitejs/plugin-vue":"^4.5.2","typescript":"^5.2.2","vite":"^5.0.8","vite-plugin-dts":"^3.6.4","vue":"^3.3.11","vue-tsc":"^1.8.25"},"dependencies":{"normalize.css":"^8.0.1","three":"^0.159.0"},"_id":"@dreamoment/metronome@0.0.1","gitHead":"ee8769f8c8fad1ab1520b39cf1094a9c4043ba33","description":"<h1 align=\"center\">metronome</h1>","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-rNcXM0FliAfbxDz66698CSav1VyG2y+A3ABc932S3Z2/PEwqW9nBCp5EXgp0U8LKmYdDt+s/3IlSs17prIqwiA==","shasum":"3f30103b16f201ead444fec9df17a7f3d355916c","tarball":"https://registry.npmjs.org/@dreamoment/metronome/-/metronome-0.0.1.tgz","fileCount":6,"unpackedSize":11122,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD72bNkCmbhzh6H2utxysQxdCTOho8Cr/FJhdMqiGX/MQIhAIAEmx8Bff1pOOmuU4S1Q0MFZp9cOGhiIIgLxN1FEajG"}]},"_npmUser":{"name":"dreamoment-npm","email":"dasu709394@qq.com"},"directories":{},"maintainers":[{"name":"dreamoment-npm","email":"dasu709394@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/metronome_0.0.1_1703168673467_0.8659837002830193"},"_hasShrinkwrap":false}},"time":{"created":"2023-12-21T14:24:33.358Z","0.0.1":"2023-12-21T14:24:33.640Z","modified":"2023-12-21T14:24:33.946Z"},"maintainers":[{"name":"dreamoment-npm","email":"dasu709394@qq.com"}],"description":"<h1 align=\"center\">metronome</h1>","author":{"name":"dreamoment-npm"},"license":"MIT","readme":"<h1 align=\"center\">metronome</h1>\n\nLanguage: English | [中文简体](README_zh_cn.md)\n\n## What is metronome ?\n\nLoop through your code snippets, just like a metronome.\n\n## Features\n\n- lightweight and easy to use\n\n- switch control\n\n- frame rate adjustment\n\n- supports background operation\n\n- support 'typescript'\n\n## Install\n\n```agsl\nnpm i @dreamoment/metronome\n```\n\n## Examples\n\n```\nimport * as THREE from 'three'\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'\nimport Stats from 'three/examples/jsm/libs/stats.module.js'\nimport { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js'\nimport Metronome from '@dreamoment/metronome'\n\n\nconst scene = new THREE.Scene()\nconst camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000 )\nconst ambientLight = new THREE.AmbientLight(0xffffff)\nconst directionalLight = new THREE.DirectionalLight(0xffffff)\ndirectionalLight.position.set(1, 1, 1)\nscene.add(ambientLight, directionalLight)\n\nconst renderer = new THREE.WebGLRenderer()\nrenderer.setSize(window.innerWidth, window.innerHeight)\ndocument.body.appendChild(renderer.domElement)\n\nconst params = {\n  FPS: 60,\n  enable: true,\n  enableRunningInBG: false,\n}\n\nconst stats = new Stats()\nstats.showPanel(0)\ndocument.body.appendChild(stats.dom)\n\nconst gui = new GUI()\ngui.add(params, 'FPS', 1, 300, 1)\ngui.add(params, 'enable')\ngui.add(params, 'enableRunningInBG')\n\nconst controls = new OrbitControls(camera, renderer.domElement)\n\nconst geometry = new THREE.BoxGeometry(1, 1, 1)\nconst material = new THREE.MeshPhysicalMaterial({ color: 0xff0000 })\nconst cube = new THREE.Mesh(geometry, material)\nscene.add(cube)\n\ncamera.position.z = 5\n\nconst animate = (delta: number) => {\n  stats.begin()\n  cube.rotation.x += 1 * delta\n  cube.rotation.y += 1 * delta\n  controls.update()\n  renderer.render(scene, camera)\n  stats.end()\n}\n\nconst onWindowResize = () => {\n  camera.aspect = window.innerWidth / window.innerHeight\n  camera.updateProjectionMatrix()\n  renderer.setSize(window.innerWidth, window.innerHeight)\n}\n\nwindow.addEventListener('resize', onWindowResize)\n\nconst metronome = new Metronome(params.FPS)\ngui.onFinishChange((payload: any) => {\n  switch (payload.property) {\n    case 'FPS':\n      metronome.setFPS(payload.value)\n      break\n    case 'enable':\n      payload.value ? metronome.start() : metronome.stop()\n      break\n    case 'enableRunningInBG':\n      metronome.allowRunningInBG(payload.value)\n      break\n  }\n})\n\nmetronome.on(animate)\nmetronome.start()\n\n// before the application ends...\n// metronome.dispose()\n```\n\n## API\n\n```\nnew Metronome(FPS: number)\n```\n\n### on\n\nset the callback function, and the callback parameter is the interval between two adjacent frames\n\n```\ntype Callback = (delta: number) => void\n\non(callback: Callback): void\n```\n\n### start\n\nstart looping through the callback function\n\n```\nstart(): void\n```\n\n### stop\n\nstop running the callback function\n\n```\nstop(): void\n```\n\n### setFPS\n\nset frame rate\n\n```\nsetFPS(FPS: number): void\n```\n\n### allowRunningInBG\n\nwhether to allow background running\n\n```\nallowRunningInBG(enable: boolean): void\n```\n\n### dispose\n\ndestruction instance\n\n```\ndispose(): void\n```","readmeFilename":"README.md"}